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.