xsd: type d’élément booléen accepte “true” mais pas “True”. Comment puis-je lui faire accepter ça?

J’utilise l’option –schema xmllint pour valider mon XML qui ressemble à ceci

 True  

Dans mon fichier de schéma, j’ai la ligne suivante qui décrit l’élément actif.

  

Lorsque je lance xmllint, je reçois des messages d’erreur indiquant

/tmp/schema_validation.xml:73: element Active: erreur de validité des schémas: élément ‘Active’: ‘True’ n’est pas une valeur valide du type atomique ‘xs: boolean’.

Lorsque je change le XML en

 true 

Le message d’erreur disparaît ensuite.

Donc, il semble que xsd: boolean signifie que tout est en minuscule “true / false” mais pas “True / False” en xmllint. Ou existe-t-il différents outils que je peux utiliser pour valider ce XML? Modifier le XML ou le schéma n’est pas mon option à ce stade.

Merci!

Vous ne pouvez pas.

Selon la spécification XML Schema , un booléen est true ou false . True n’est pas valide:


   3.2.2.1 Représentation lexicale
   Une instance d'un type de données défini comme · booléen peut avoir 
   littéraux légaux suivants {true, false, 1, 0}. 

   3.2.2.2 Représentation canonique
   La représentation canonique de booléen est l'ensemble de 
   littéraux {true, false}. 

Si l’outil que vous utilisez valide vraiment par rapport à la norme XML Schema, vous ne pouvez pas le convaincre d’accepter la valeur True pour un booléen.

xs:boolean est prédéfini en fonction du type d’entrée qu’il accepte. Si vous avez besoin de quelque chose de différent, vous devez définir votre propre énumération:

        

Si vous êtes sous Linux ou si cygwin est disponible sur Windows, vous pouvez exécuter le code XML d’entrée via un script sed simple qui remplacera True par true , comme ceci:

 cat  | sed 'sXTrueXtrueX' | xmllint --schema - 

Si vous ne l’êtes pas, vous pouvez toujours utiliser un pocesseur xslt (xalan, saxon, etc.) non valide pour exécuter une transformation xslt simple sur l’entrée, puis la diriger uniquement vers xmllint.

Qu’est-ce que le xsl devrait contenir quelque chose comme ci-dessous, pour l’exemple que vous avez énuméré ci-dessus (le processeur xslt devrait être compatible 2.0):