Connaissez-vous vraiment bien les technologies Web / XML ?
Evaluez vos connaissances en 10 questions tordues.
Combien y-a-t-il de nœuds texte dans ce document ?
<?xml version="1.0"?> <A> <B> <C>abcd efgh ijkl</C> <C> abcd efgh ijkl </C> </B> </A>
Il y a 7
nœuds texte.
Il ne faut pas ignorer les nœuds blancs, qui contiennent espaces, retours à la ligne, et tabulations.
Que retourne l'expression XPath
//A[namespace-uri()="http://www.foo.com"]
?
<?xml version="1.0"?> <foo:A xmlns:foo="http://www.foo.com" />
Rien
(un ensemble de noeuds vides)
//A
sélectionne les nœuds d'éléments A
qui ne sont dans aucun espace de nommage. Il n'y en a pas : le document
contient un nœud d'élément A
qui se trouve dans
l'espace de nommage http://www.foo.com
, donc il n'est
pas sélectionné. Le prédicat s'applique alors sur un résultat déjà vide.
Quelle est la valeur normalisée par un parser XML de l'attribut bar
?
<?xml version="1.0"?> <foo bar="abc
def ghi" />
(il y a un retour chariot entre def
et ghi
)
abc def ghi(avec un retour à la ligne entre abc et def et un espace entre def et ghi)
Quelle contrainte n'est pas respectée dans ce document ?
<?xml version="1.0"?> <!DOCTYPE foo [ <!ENTITY % bar "bar"> <!ELEMENT foo (%bar;)> <!ELEMENT bar (#PCDATA)> ]> <foo><bar /></foo>
Les entités de paramètres ne peuvent pas être utilisées
au sein des déclarations de balise dans un sous-ensemble interne
(<!ELEMENT foo (%bar;)>
)
Voir la contrainte de forme applicable aux entités paramètres dans le sous-ensemble interne de la DTD
Cette déclaration est incorrecte :
<!ELEMENT foo (#PCDATA , bar?)>
Quelle déclaration correcte permet de définir le même contenu que ci-dessus
pour l'élément foo
mais avec moins de contraintes ?
<!ELEMENT foo (#PCDATA | bar)*>
Un contenu mixte (texte et éléments) ne peut être contraint que par cette déclaration ; il n'est pas possible d'être plus restrictif comme tentait de l'être la déclaration incorrecte.
Dans quel espace de nommage se trouve l'attribut bgcolor
?
<?xml version="1.0"?> <html xmlns="http://www.w3.org/1999/xhtml"> <body bgcolor="#808080"> </body> </html>
Aucun
Les attributes sans préfixes ne sont jamais dans un espace de nommage.
Les fils de node
sont les nœuds A,B,C,D,E,F,G,H.
Quels sont les nœuds retirés de node
après l'exécution
du code suivant ?
NodeList nodeList = node.getChildNodes(); for (int i = 0; i < nodeList.getLength(); i++) { node.removeChild(nodeList.item(i)); }
A,C,E,G
A la première itération (i vaut 0), le nœud A est retiré, les nœuds suivants sont immédiatement "renumérotés", le nœud B passe donc de l'indice 1 à 0 ; à la seconde itération (i vaut 1), c'est le nœud C qui est retiré ; et ainsi de suite : un nœud sur deux est retiré contrairement à ce que laisse penser le code.
Quelle valeur retourne l'expression XPath
count(//namespace::*)
?
<?xml version="1.0"?> <foo:A xmlns:foo="http://www.foo.com"> <B /> <B xmlns="http://www.bar.com"> <C xmlns=""> <foo:D /> <D /> </C> </B> </foo:A>
Il y a 13
nœuds d'espace de nommage !
Chaque déclaration d'espace de nommage est héritée dans le sous-arbre
la contenant.
La déclaration xmlns:xml="http://www.w3.org/XML/1998/namespace"
est implicitement déclarée et doit s'ajouter au décompte.
Un document XML est transmi via HTTP. L'en-tête HTTP contient :
Content-type: text/xml
La déclaration XML du document est la suivante :
<?xml version="1.0" encoding="utf-8"?>
Selon les standards, quel doit être le jeu de caractère utilisé par le document pour qu'il ne provoque pas d'erreur ?
Voir la RFC 3023.
Combien d'événements characters()
sont émis entre
startElement()
et endElement()
de l'élément A
?
<?xml version="1.0"?> <A> Hello world ! </A>
Au moins 1.
Ca dépend du parser SAX utilisé, qui peut prendre la liberté
d'émettre plusieurs événements characters()
successifs.
Il se peut que, en vérifiant certains exercices, vous constatiez des résultats différents, selon les outils utilisés : ceux-ci doivent prendre en compte les options standards préconisées par les spécifications, et peuvent différer de certaines options par défaut de ces outils.