¿Cómo cambio el "nivel" de validación que proporciona la tarea XMLValidate de Ant?

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

  •  05-07-2019
  •  | 
  •  

Pregunta

Estoy intentando usar la tarea XMLValidate de Ant para validar un documento XML contra una DTD. El problema no es que no funcione, sino que funciona demasiado bien. Mi DTD contiene un elemento de referencia externa con un " @ linkend " Atributo de tipo IDREF. La mayoría de estas ID de referencia están fuera del documento actual. Debido a esto, mi compilación falla, ya que el analizador se queja de que la ID a la que hace referencia IDREF no existe. Entonces, ¿hay alguna manera de que pueda validar mi documento XML contra la DTD, pero ignorar los errores de este tipo?

Algunas cosas que he intentado: configurar " lenient " La opción en XMLValidate hace que la tarea solo verifique la buena formación del documento, no su validez contra una DTD. La tarea XMLValidate en el manual de Ant enumera algunas opciones de JAXP y SAX que puede configurar , pero ninguno parece aplicable.

Aquí está mi código:

 <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>

Como puede ver, estoy usando ResolvingXMLReader para resolver el DTD contra un catálogo de identificadores públicos. Sin embargo, obtengo el mismo comportamiento si especifico el DTD directamente usando un elemento xmlcatalog anidado.

¿Fue útil?

Solución

Su problema se deriva de la diferencia entre dos interpretaciones de la DTD: suya y especificaciones de :-). Las IDREF deben referirse a las identificaciones en el mismo documento, mientras que las suyas se refieren a elementos en todos los documentos.

Mi sugerencia es crear su propia versión de la DTD que especifique NMTOKEN en lugar de IDREF para ese atributo, y utilizarla para realizar su validación. Esto asegurará que los contenidos sean valores de ID de XML válidos.

Otros consejos

No estoy seguro de si esto ayuda, pero ¿podrías intentar esta solución? Cree un archivo temporal, combine todos sus XML y haga la validación.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top