2010-11-09 65 views

Répondre

1

Bonne question. AFAIK, le seul moyen est de valider votre XML contre la DTD après la génération des noeuds. Généralement, cela se ferait par un processus séparé. Voir this article pour savoir comment faire cela en Java (selon la version). Mais pour clarifier: étant donné que vous avez le plein contrôle de la génération du XML, comment voulez-vous que MarkupBuilder contribue à assurer la validité ... lancer une exception si vous essayez de créer un nœud qui n'est pas autorisé à un point particulier? La validité d'un document XML incomplet n'est pas un concept bien défini. Que se passe-t-il si l'invalidité est qu'un élément requis est manquant ... lorsque vous créez son nœud parent, ses enfants seront tous "manquants", alors comment MarkupBuilder saura-t-il décider quand le XML sera invalide? Ou que se passe-t-il si vous émettez un attribut de type ID ou IDREF, et que vous ne pouvez pas vérifier l'unicité ou l'intégrité référentielle tant que tous les autres ID n'ont pas été émis?

Je ne peux pas imaginer un processus qui fonctionnerait vraiment pour garantir une sortie XML valide, ce qui est sensiblement différent de la validation de la sortie après sa génération.

Il y a certainement des façons de partiellement lors de la sortie, valider à savoir pour attraper certains problèmes qui conduiraient à la sortie non valide. Toutefois, le XSLT compatible avec le schéma peut apparemment effectuer une validation complète lors de la génération du code XML. L'article à http://www.ibm.com/developerworks/xml/library/x-schemaxslt.html#validout parle d'utiliser des transformations XSLT à l'aide de schémas pour garantir que la sortie est valide. Je ne suis pas sûr entièrement comment cela fonctionne. Peut-être qu'il valide ce qu'il peut pendant la génération, mais pour certaines contraintes il doit attendre que la sortie soit finie avant de le prononcer valide ou non.

Cela ne répond pas à votre question à propos de Groovy MarkupBuilder, mais il éclaire sur ce qui est possible. AFAIK, il n'y a pas de processeurs XSLT gratuits qui fournissent un traitement sensible au schéma; mais Saxon-SA a un essai de 30 jours, et probablement d'autres commerciaux aussi.

+0

Oui, vous écrivez. J'ai compris cela après avoir écrit la question. Quoi qu'il en soit, je trouve cela assez intéressant de laisser passer son chemin dans StackOverflow. – Riduidel

+0

@Riduidel: C'est une question intéressante. Il y a certainement des moyens de valider * partiellement * pendant la sortie, c'est-à-dire d'attraper * certains * problèmes qui conduiraient à une sortie invalide. L'article à http://www.ibm.com/developerworks/xml/library/x-schemaxslt.html#validout parle d'utiliser des transformations XSLT à l'aide de schémas pour garantir que la sortie est valide. Je ne suis pas sûr entièrement comment cela fonctionne. Je pense qu'il vaut la peine de mettre à jour ma réponse pour mentionner que, ce n'est pas Groovy. – LarsH