2008-10-04 8 views
0

J'essaie d'utiliser la tâche XMLValidate de Ant pour valider un document XML par rapport à une DTD. Le problème n'est pas que ça ne marche pas, mais que ça marche trop bien. Ma DTD contient un élément xref avec un attribut "@linkend" de type IDREF. La plupart de ces ID de référence se trouvent en dehors du document en cours. Pour cette raison, ma génération échoue, car l'analyseur se plaint que l'ID référencé par l'IDREF n'existe pas. Donc, y a-t-il un moyen de valider mon document XML par rapport à la DTD, mais d'ignorer les erreurs de ce type? Quelques choses que j'ai essayées: La définition de l'option "lenient" sur XMLValidate fait que la tâche vérifie seulement la bonne forme du document, pas sa validité par rapport à une DTD. The XMLValidate task in the Ant manual répertorie certaines options JAXP et SAX que vous pouvez définir, mais aucune ne semble applicable.Comment modifier le "niveau" de validation que fournit la tâche XMLValidate de Ant?

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 voir, j'utilise ResolvingXMLReader pour résoudre la DTD contre un catalogue d'identificateurs publics. Cependant, j'ai le même comportement si je spécifie la DTD directement en utilisant un élément xmlcatalog imbriqué.

Répondre

2

Votre problème provient de la différence entre deux interprétations de la DTD: la vôtre, et la spec's :-). Les IDREF doivent faire référence aux ID dans le même document, tandis que les vôtres se réfèrent à 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 l'utiliser pour effectuer votre validation. Cela garantira que les contenus seront des valeurs d'ID xml valides.

+0

Bon point. C'est en fait ce que j'ai fini par faire. –

0

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

Questions connexes