Comment modifier le & # 8220; niveau & # 8221; de validation fournie par la tâche XMLValidate de Ant?

StackOverflow https://stackoverflow.com/questions/171097

  •  05-07-2019
  •  | 
  •  

Question

J'essaie d'utiliser la tâche XMLValidate d'Ant pour valider un document XML par rapport à une DTD. Le problème n'est pas que cela ne fonctionne pas, mais que cela fonctionne trop bien. Ma DTD contient un élément xref avec le symbole "@ linkend". attribut de type IDREF. La plupart de ces identifiants de référence en dehors du document actuel. De ce fait, ma construction échoue, car l'analyseur se plaint que l'ID référencé par IDREF n'existe pas. Alors, y a-t-il un moyen de valider mon document XML par rapport à la DTD, tout en ignorant les erreurs de ce type?

Quelques éléments que j'ai essayés: Définir le paramètre "clément" L'option sur XMLValidate permet à la tâche de vérifier uniquement la bonne formation du document, et non sa validité par rapport à une DTD. La la tâche XMLValidate du manuel Ant répertorie certaines options JAXP et SAX que vous pouvez définir. , mais aucun ne semble applicable.

Voici mon code:

 <target name="validate">
        <echo message="Validating ${input}"/>
        <xmlvalidate file="${input}" failonerror="yes"
            classname="org.apache.xml.resolver.tools.ResolvingXMLReader">
            <classpath refid="xslt.processor.classpath"/>
        </xmlvalidate>
 </target>

Comme vous pouvez le constater, j'utilise ResolvingXMLReader pour résoudre la DTD par rapport à un catalogue d'identifiants publics. Cependant, j'obtiens le même comportement si je spécifie la DTD directement à l'aide d'un élément imbriqué xmlcatalog.

Était-ce utile?

La solution

Votre problème découle de la différence entre deux interprétations de la DTD: la vôtre et le spec's :-). Les IDREF doivent faire référence à des identifiants dans le même document, tandis que les vôtres font référence à des éléments d’un document à l’autre.

Ma suggestion est de créer votre propre version de la DTD qui spécifie NMTOKEN au lieu de IDREF pour cet attribut et de l'utiliser pour effectuer votre validation. Cela garantira que le contenu sera constitué de valeurs id XML valides.

Autres conseils

Je ne sais pas si cela vous aidera, mais pourriez-vous essayer cette solution de contournement? Créez un fichier temporaire, fusionnez tous vos fichiers XML et effectuez la validation.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top