Transfo XSLT dans validation Schematron - XML/XSL - Programmation
MarshPosté le 21-10-2007 à 14:04:23
Bonjour, Je ne sais pas exactement quel parser j'utilise mais je vais essayer d'être clair. J'ai récupérer sur le net des sources Java qui permettent de valider un fichier XML par rapport à un schéma Schematron. Le principe est basé sur 2 transfo XSLT, la première transforme le schéma Schematron à l'aide d'un 'preprocessor.xslt' fournit avec les sources Java, en un 'processor.xslt' qui, appliqué au fichier XML à valider, fournit soit un log.xml des erreurs de validation, soit un fichier vide si le XML est valide. Mon problème concerne le log.xml dans lequel je n'arrive pas à récupérer l'ID de l'élément qui est en erreur. Mon fichier XML d'entrée a la forme suivante:
Si par exemple l'élément <document1 xml:id="ID0003"> a une erreur Schematron dans une de ces balises, avec la commande : <axsl:value-of select="//ec:document1/@xml:id"/> dans la feuille intermédiaire processor.xslt, je récupère dans ma log non pas l'ID "ID0002" mais le "ID0001". Idem si' c'est le <ec:document2 xml:id="ID0005"> qui est en erreur, je récupère l'ID "ID0004". Bref, je récupère toujours l'ID du 1er document de même type que celui en erreur. Est-ce juste ma commande xslt qui est mauvaise, et dans ce cas quelle est la bonne, ou est-ce plus grave docteur ?... Merci d'avance pour vos réponses
Marsh Posté le 21-10-2007 à 14:04:23
Bonjour,
Je ne sais pas exactement quel parser j'utilise mais je vais essayer d'être clair.
J'ai récupérer sur le net des sources Java qui permettent de valider un fichier XML par rapport à un schéma Schematron.
Le principe est basé sur 2 transfo XSLT, la première transforme le schéma Schematron à l'aide d'un 'preprocessor.xslt' fournit avec les sources Java, en un 'processor.xslt' qui, appliqué au fichier XML à valider, fournit soit un log.xml des erreurs de validation, soit un fichier vide si le XML est valide.
Mon problème concerne le log.xml dans lequel je n'arrive pas à récupérer l'ID de l'élément qui est en erreur.
Mon fichier XML d'entrée a la forme suivante:
<ec:lotdocuments xmlns:ec="URI" xml:id="ID0100">
<ec:document1 xml:id="ID0001">
<ec:balise1>
<ec:sousbalise1>xxx</ec:sousbalise1>
</ec:balise1>
...
</ec:document1>
<ec:document1 xml:id="ID0002">
<ec:balise1>
<ec:sousbalise1>yyy</ec:sousbalise1>
</ec:balise1>
</ec:document1>
<ec:document1 xml:id="ID0003">
<ec:balise1>
<ec:sousbalise1>zzz</ec:sousbalise1>
</ec:balise1>
</ec:document1>
<ec:document2 xml:id="ID0004">
...
</ec:document2>
<ec:document2 xml:id="ID0005">
...
</ec:document2>
</ec:lotdocuments>
Si par exemple l'élément <document1 xml:id="ID0003"> a une erreur Schematron dans une de ces balises, avec la commande :
<axsl:value-of select="//ec:document1/@xml:id"/>
dans la feuille intermédiaire processor.xslt, je récupère dans ma log non pas l'ID "ID0002" mais le "ID0001". Idem si' c'est le
<ec:document2 xml:id="ID0005"> qui est en erreur, je récupère l'ID "ID0004".
Bref, je récupère toujours l'ID du 1er document de même type que celui en erreur.
Est-ce juste ma commande xslt qui est mauvaise, et dans ce cas quelle est la bonne, ou est-ce plus grave docteur ?...
Merci d'avance pour vos réponses