2017-03-26 7 views
0

J'ai créé un fichier XML qui utilise les entités définies dans un fichier .dtd afin d'abréger le contenu répétitif. Le fichier fait également référence à un fichier XSD utilisé pour la validation. Le fichier .dtd n'est pas utilisé pour la validation et il ne contient aucun contenu hormis les déclarations et commentaires <!ENTITY ...>. MS Visual Studio accepte cet arrangement et ne signale aucune erreur. (J'ai testé que le XSD est effectivement utilisé pour la validation en perturbant temporairement le contenu du fichier XML et en observant que les erreurs de validation attendues surviennent.) Cependant, j'étais curieux de savoir si cet arrangement est strictement conforme à la façon dont les fichiers DTD sont supposé fonctionner, j'ai donc essayé de soumettre les 3 fichiers à un validateur Web. Le validateur Web a craché une liste d'environ 2000 erreurs qui étaient toutes de la forme 'Element type "ElementName" doit être déclaré'. Cela me suggère qu'il s'attendait à ce que le fichier DTD contienne du contenu supplémentaire, servant aux fins de la validation.Est-il non conforme d'utiliser une DTD uniquement dans le but de définir des entités?

Le comportement observé de Visual Studio est utile pour moi, mais est-il techniquement différent des normes pertinentes ici?

Les premières lignes du fichier XML sont de la forme suivante:

<?xml version="1.0" encoding="utf-8" standalone="no"?> 
<!DOCTYPE FooCollection SYSTEM "entities.dtd"> 

<FooCollection 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:noNamespaceSchemaLocation="FooCollection.xsd"> 
    ... 

Répondre

0

Votre fichier XML est bien formé mais pas valide. C'est parfaitement OK (et conforme). Si vous demandez à l'analyseur XML d'effectuer une vérification de validité, cela donnera des erreurs, mais si vous le demandez seulement pour vérifier la conformité, cela ne sera pas le cas.