Estoy teniendo problemas para entender el comportamiento de la siguiente esquema XML:entendimiento xsd: la elección y minOcurrencias
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="rootnode">
<xsd:complexType>
<xsd:sequence>
<xsd:choice minOccurs="1" maxOccurs="2">
<xsd:element name="e1" minOccurs="1" maxOccurs="2"/>
<xsd:element name="e2" minOccurs="0" maxOccurs="1"/>
</xsd:choice>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
que esperaba al menos una instancia de alguno de los elementos o <e1>
<e2>
se requerirá como un hijo de <rootnode>
. A pesar de mis expectativas, un vacío <rootnode>
validará contra este esquema:
> xmllint --schema test.xsd empty.xml
<?xml version="1.0" encoding="UTF-8"?>
<rootnode>
</rootnode>
empty.xml validates
Si cambio el atributo de elemento minOccurs
e2
a algo distinto de "0"
, consigo el comportamiento que esperaba originalmente.
Parece como si la mera ausencia del elemento
<e2>
cuenta como una ocurrencia delxsd:choice
en mi ejemplo.Si este es el caso, entonces ¿cómo es que este número infinito de ocurrencias no infringe el límite de
maxOccurs
en mixsd:choice
?
@mizo escribe (en una respuesta que eliminé): Dibujé un árbol de decisión de esto, y concluí que la elección puede dar como resultado once secuencias distintas. Si decido "ir de compras" una vez, puedo terminar con e1, e1 e1, nada o e2. Si decido "ir de compras" dos veces, puedo terminar con cualquiera de las cuatro permutaciones anteriores o e1 e1 e1, e1 e2, e1 e1 e1 e1, e1 e1 e2, e2 e1, e2 e1 e1 o e2 e2. ¿Es esto correcto? - mizo hace 6 horas –
Es por eso que como plátanos: hay menos ramas en los plataneros. – Dan
La mejor respuesta que he leído en un momento en SO: claro, conciso, y te hace sonreír en el proceso. Prestigio. – tsemer