Je développe un schéma en utilisant RELAX NG. Je suis assez nouveau à ce sujet, donc il est tout à fait possible que je néglige quelque chose d'évident, mais il ne semble pas y avoir un moyen pratique de spécifier le nombre d'occurrences d'un élément comme vous pouvez dans le langage XML Schema. Par exemple, supposons que je veuille spécifier qu'un élément A
peut contenir 2 à 5 éléments B
Comment spécifier une plage numérique d'occurrences dans RELAX NG?
Je ne veux pas utiliser les étiquettes zeroOrMore
ou oneOrMore
parce que j'ai effectivement une limite supérieure sur le nombre d'éléments. Dans le schéma XML, je peux utiliser les propriétés minOccurs
et maxOccurs
pour spécifier cela de manière compacte. J'ai lu le official RELAX NG tutorial, écrémé the spec, et fait quelques recherches de base, mais je n'ai pas été en mesure de trouver un moyen pratique de le faire avec RELAX NG. Le mieux que je peux comprendre, vous devez faire quelque chose comme ceci:
<element name="A">
<ref name="B"/>
<ref name="B"/>
<optional><ref name="B"/></optional>
<optional><ref name="B"/></optional>
<optional><ref name="B"/></optional>
</element>
<define name="B">
<element name="B">
<text/>
</element>
</define>
Ceci est faisable, mais commencer à regarder laid quand vous avez besoin d'un plus grand nombre d'occurrences. Dans mon schéma actuel, j'ai un type d'élément qui pourrait se produire jusqu'à 256 fois, donc les éléments facultatifs spécifiés manuellement seront clunky. Je le ferai si j'en ai besoin, mais j'aimerais savoir s'il existe une façon plus élégante d'exprimer mes restrictions d'occurrence.
Merci pour les suggestions! J'avais pensé à votre première approche, mais j'ai décidé contre. La deuxième approche semble que ce ne serait pas trop de problèmes. Je finirai probablement par l'utiliser. –