Quizz XML Evaluez vos connaissances

Inria

Connaissez-vous vraiment bien les technologies Web / XML ?

Evaluez vos connaissances en 10 questions tordues.

DOM

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.

Explication

Il ne faut pas ignorer les nœuds blancs, qui contiennent espaces, retours à la ligne, et tabulations.

XPath et espace de nommage

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)

Explication

//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.

Normalisation

Quelle est la valeur normalisée par un parser XML de l'attribut bar ?

<?xml version="1.0"?>
<foo bar="abc&#xA;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)

Explication

Voir l'algorithme de normalisation des valeurs d'attributs.

DTD

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;)>)

Explication

Voir la contrainte de forme applicable aux entités paramètres dans le sous-ensemble interne de la DTD

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)*>

Explication

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.

Espace de nommage

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

Explication

Les attributes sans préfixes ne sont jamais dans un espace de nommage.

DOM

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

Explication

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.

Espace de nommage

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 !

Explication

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.

Encapsulation XML dans MIME

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 ?

US-ASCII

Explication

Voir la RFC 3023.

SAX

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.

Explication

Ca dépend du parser SAX utilisé, qui peut prendre la liberté d'émettre plusieurs événements characters() successifs.

Attention Vous obtenez des résultats différents ?

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.