Ciao a tutti.
Io ho la necessità di validare dei file xml prodotti da codice Java mediante gli schematron. Il file xml ha questa forma:
Per validare questo tipo di file xml uso la seguente regola schematron:codice:<root> <nodeA> <nodeB> <nodeC> <nodeD>abcd</nodeD> <nodeE>abcd</nodeE> <nodeF>1</nodeF> </nodeC> <nodeC> <nodeD>abcd</nodeD> <nodeE>abcd</nodeE> <nodeF>1</nodeF> </nodeC> </nodeB> </nodeA> <nodeA> <nodeB> <nodeC> <nodeD>abcd</nodeD> <nodeE>abcd</nodeE> <nodeF>1</nodeF> </nodeC> <nodeC> <nodeD>abcd</nodeD> <nodeE>abcd</nodeE> <nodeF>1</nodeF> </nodeC> </nodeB> </nodeA> </root> (<--<root> è solo un esempio, il file xml vero è chiuso con gli header appropriati)
Ora questa regola funziona con i file xml campione prodotti da Oxygen, mentre non funziona affatto con i file xml prodotti dal codice Java. In particolare il messaggio di errore che riscontro è che index-of produce una sequence di più di un elemento, per cui non può effettuare la sottrazione (richiesta dal codice Java per visualizzare i messaggi di errore correttamente).codice:<iso:pattern> <iso:rule context="nodeC"> <assert test="exists(nodeF) and nodeF > 0">nodeB[<value-of select="(index-of(../../nodeB, ..)-1)" />].nodeC[<value-of select="(index-of(../nodeC, self::node())-1)" />].nodeF#Un messaggio di errore. </assert> </iso:rule> </iso:pattern>
La differenza fra i due file xml prodotti è che l'elemento nodeF, che è opzionale come tutti gli altri, non viene prodotto se nella maschera il corrispondente campo non viene valorizzato.

Rispondi quotando