2 votes

Traitement d'un fichier XML avec un doctype public

Je suis en train d'essayer de traiter un fichier SVG avec XSLT. J'ai des comportements que je ne comprends pas, qui impliquent la déclaration doctype.

Voici deux tests que j'ai faits. Le premier me donne le résultat attendu et le deuxième me donne un résultat que je ne comprends pas. (testé avec Saxon et Xalan).

Stylesheet utilisé pour les deux tests :

        /

        svg

Test n°1

fichier source :

résultat :

/svg

Test n°2

fichier source :

résultat :

/

Pourquoi la déclaration doctype modifie-t-elle le comportement du traitement ?

1voto

Dimitre Novatchev Points 147842

Les éléments SVG sont dans l'espace de noms SVG.

Le DTD définit ceci, donc:

correspond à un élément portant le nom svg, mais sans espace de noms. Tous les éléments du document XML sont dans l'espace de noms SVG et ce modèle ne correspond à aucun nœud.

Cela explique la sortie.

Solution: Remplacez le modèle correspondant à svg par un qui correspond à svg dans l'espace de noms SVG, comme dans la transformation suivante:

        /

        svg

Lorsque cette transformation est appliquée sur le document XML fourni:

le résultat souhaité est produit:

/svg

Mise à jour:

Plusieurs personnes m'ont demandé "Comment un DTD peut définir un espace de noms (par défaut)?"

Voici une réponse: XML et les DTD qui l'accompagnent ont été publiés en tant que Recommandation du W3C avant l'introduction des espaces de noms. Dans le XML pré-espaces de noms, une déclaration d'espace de noms est simplement un attribut.

Les DTD peuvent spécifier des "attributs par défaut" -- des attributs qui peuvent être omis d'une instance mais seront automatiquement ajoutés avec une valeur par défaut.

Par conséquent, une manière de définir un espace de noms par défaut dans un DTD est de définir un attribut par défaut xmlns pour l'élément de haut niveau du document.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X