Como faço para mudar o “nível” de validação que tarefa XMLValidate de Ant fornece?

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

  •  05-07-2019
  •  | 
  •  

Pergunta

Eu estou tentando usar tarefa XMLValidate do Ant para validar um documento XML contra um DTD. O problema não é que ele não funciona, mas que ele funciona muito bem. Meu DTD contém um elemento xref com um atributo "@linkend" do tipo IDREF. A maioria destes IDs de referência fora do documento atual. Devido a isso, a minha compilação falhar, uma vez que o analisador se queixa de que o ID que o IDREF faz referência não existe. Então, há alguma maneira que eu posso validar o meu documento XML contra o DTD, mas ignorar erros deste tipo?

Algumas coisas que eu tentei: Definir a opção "branda" na XMLValidate torna a tarefa verificar apenas boa formação do documento, e não a sua validade contra um DTD. A tarefa XMLValidate nas listas manual do Ant algumas opções JAXP e SAX você pode definir , mas nenhum parece aplicável.

Aqui está o meu 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 você pode ver, eu estou usando ResolvingXMLReader para resolver o DTD contra um catálogo de identificadores públicas. No entanto, eu obter o mesmo comportamento se eu especificar o DTD diretamente usando um elemento xmlcatalog aninhada.

Foi útil?

Solução

Seus deriva problema a partir da diferença entre duas interpretações da DTD: o seu, e o da especificação :-). IDREFS deve se referir a ids no mesmo documento, ao passo que o seu referem-se a elementos em documentos.

A minha sugestão é criar sua própria versão da DTD que especifica NmToken vez de IDREF para esse atributo, e usá-lo para realizar sua validação. Isso irá garantir que o conteúdo será valores xml de identificação válido.

Outras dicas

Não sei se isso ajuda, mas você pode tentar esta solução alternativa? Criar um arquivo temporário, juntar todas as suas XMLs e fazer a validação.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top