2009-07-15 8 views
0

Je dois valider les fichiers XML en fonction d'un large éventail de contraintes: type et/ou format du texte de l'élément, cooccurrences, comparaisons de dates et calculs de date, ainsi que règles provenant d'une base de données (l'élément X ne peut contenir que les éléments enfants A, B et C) et je ne suis pas sûr de la façon de procéder.Validation des documents XML par rapport à un grand nombre de contraintes

L'incarnation actuelle de cette application impose ces contraintes via Perl, à travers je pense que le code Perl duplique une grande partie de la fonctionnalité que je devrais sortir de la boîte en utilisant XSD ou RELAX NG. Malheureusement, l'utilisation de l'un ou l'autre aboutirait à des messages d'erreur qui seraient cryptiques pour les utilisateurs finaux. Mapper ce message cryptique sur quelque chose d'amical semble impossible (autre que de fournir des numéros de ligne/col).

Ensuite, il y a Schematron. Cela me permet de générer des messages amicaux et de vérifier les contraintes que les langages schémas mentionnés ci-dessus ne peuvent pas. Malheureusement, la vérification de type/format et les maths de date deviennent de grands hacks de modèles XSLT.

Maintenant, je ne sais pas quoi faire. Une combinaison entre Schematron et, disons, RELAX NG, semble être la meilleure approche, mais les erreurs générées par RELAX NG rendent impossible de fournir quelque chose d'informatif à l'utilisateur final.

J'avais espéré utiliser un modèle de schéma maître qui serait modifié en fonction des règles personnalisées dans la base de données.

Est-ce que l'approche originale reste la meilleure, ou devrais-je avancer en utilisant Schematron/RELAX NG et en luttant la mise en application du format/type dans les modèles XSLT?

+0

Les erreurs ne sont pas "fournies par RELAX NG", elles sont fournies par une implémentation particulière de cela. Lequel utilisez-vous? –

+0

En effet. J'utilise libxml. –

Répondre

0

Sur une note pratique, il me semble que votre tâche n'est pas vraiment de validation XML, et que vous ne devriez probablement pas y être forcé.

Votre description indique que vous avez beaucoup de validation spécifique au domaine et peut-être même circonstancielle des données contenues dans les documents XML, pas vraiment les documents XML en soi. En tant que tel, je dirais, écrire un validateur dans le code qui analyse les documents et applique votre suite de validation complexe axée sur les données. Je pense que vous serez en mesure de donner un bien meilleur feedback aux utilisateurs puisque votre code aura une connaissance sémantique du domaine. Je suppose que vous pouvez utiliser le système de schéma XML comme "premier passage" d'un tel système, mais si, à la fin, vous devez analyser et charger les données de toute façon, j'ai généralement trouvé la validation du schéma n'ajoute rien puisque le code qui analyse essentiellement doit de toute façon valider.

+0

Le domaine est le document XML. Eh bien, il existe des règles définies par l'utilisateur, mais elles ne représentent qu'une infime partie des besoins globaux. La validation est utilisée pour appliquer certaines spécifications XML élaborées sur lesquelles je n'ai aucun contrôle. Si le document d'instance donné passe, il est envoyé pour ne plus jamais être entendu. Si cela échoue, il est corrigé et envoyé. Les règles ne servent à rien d'autre. –

+0

Peut-être que nous ne comprenons pas assez votre situation. "Comparaisons de dates et maths de date" et "Certaines règles définies par l'utilisateur à partir d'une base de données" ne semblent pas être de bons candidats pour les langages de validation XML standard. Je comprends maintenant que vous n'avez pas besoin de charger les données pour encore d'autres utilisations. Donc, je pense que l'approche en deux passes pourrait être meilleure: Utiliser la validation XML (quel que soit le schéma qui semble le plus facile), puis analyser le document et effectuer les vérifications de données (comme la date mathématique). – MtnViewMark

Questions connexes