comptage en utilisant XSD pour valider le noeud
Question
Je ne pense pas que ce soit possible, mais je pensais que je jette là-bas. Compte tenu de cette XML:
<people count="3">
<person>Bill</person>
<person>Joe</person>
<person>Susan</person>
</people>
Est-il possible dans un XSD pour forcer la valeur d'attribut @count être le nombre correct d'éléments définis (dans ce cas, l'élément de personne)? L'exemple ci-dessus serait évidemment correct et exemple ci-dessous ne validerait pas:
<people count="5">
<person>Bill</person>
<person>Joe</person>
<person>Susan</person>
</people>
La solution
Je suis assez sûr XSD ne peut pas le faire. Toutefois, si vous voulez garantir que votre attribut de compte est le nombre réel d'éléments ci-dessous, l'exécution d'une feuille de style XSLT sur le document peut veiller à ce que est vrai en définissant la valeur:
<xsl:template match="people">
<xsl:attribute name="count">
<xsl:value-of select="count(person)"/>
</xsl:attibute>
<xsl:apply-templates/>
</xsl:template>
<!-- insert your identity template here -->
Autres conseils
Parsers mise en œuvre XSD spécification 1.1 devrait fournir une fonction assert qui peut être utilisé pour valider le contenu XML par rapport au nombre de noeuds enfants