Come posso modificare il "livello" di convalida fornito dall'attività XMLValidate di Ant?

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

  •  05-07-2019
  •  | 
  •  

Domanda

Sto tentando di utilizzare l'attività XMLValidate di Ant per convalidare un documento XML rispetto a un DTD. Il problema non è che non funziona, ma che funziona troppo bene. Il mio DTD contiene un elemento xrif con un " @ linkend " attributo di tipo IDREF. La maggior parte di questi ID di riferimento al di fuori del documento corrente. Per questo motivo, la mia build non riesce, poiché il parser si lamenta che l'ID a cui fa riferimento IDREF non esiste. Quindi, c'è un modo in cui posso convalidare il mio documento XML rispetto al DTD, ma ignorare errori di questo tipo?

Alcune cose che ho provato: impostazione di " lenient " L'opzione su XMLValidate fa sì che l'attività verifichi solo la correttezza del documento, non la sua validità rispetto a un DTD. L'attività XMLValidate nel manuale Ant elenca alcune opzioni JAXP e SAX che puoi impostare , ma nessuno sembra applicabile.

Ecco il mio codice:

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

Come puoi vedere, sto usando ResolvingXMLReader per risolvere il DTD rispetto a un catalogo di identificatori pubblici. Tuttavia, ottengo lo stesso comportamento se specifico direttamente il DTD utilizzando un elemento xmlcatalog nidificato.

È stato utile?

Soluzione

Il tuo problema deriva dalla differenza tra due interpretazioni del DTD: il tuo e il specifiche :-). Gli IDREF devono fare riferimento agli ID nello stesso documento, mentre i tuoi fanno riferimento agli elementi tra i documenti.

Il mio suggerimento è di creare la propria versione del DTD che specifica NMTOKEN invece di IDREF per quell'attributo e utilizzarlo per eseguire la convalida. Ciò garantirà che i contenuti siano valori ID xml validi.

Altri suggerimenti

Non sei sicuro che questo aiuti, ma potresti provare questa soluzione alternativa? Crea un file temporaneo, unisci tutti i tuoi XML ed esegui la convalida.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top