xml - type - Entendiendo xsd: choice y minOccurs
xsd element types (2)
Aquí están las combinaciones permitidas
Two choices:
e1 (1 - 2) + e1 (1 - 2) = e1 x (2 - 4), or
e1 (1 - 2) + e2 (0 - 1), or
e2 (0 - 1) + e1 (1 - 2), or
e2 (0 - 1) + e2 (0 - 1) = e2 (0 - 2)
One choice (but no new outcomes):
e1 (1-2), or
e2 (0-1)
e1e1, e1e1e1, e1e1e1e1
e1, e1e2, e1e1e2
e2e1, e2e1e1
empty, e2, e2e2
Tenga en cuenta que la opción [min = 2 max = 2] habría producido el mismo conjunto de combinaciones válidas.
Tengo problemas para comprender el comportamiento del siguiente esquema XML:
<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>
Esperaba que al menos una instancia de cualquiera de los elementos <e1>
o <e2>
fuera necesaria como elemento secundario de <rootnode>
. A pesar de mis expectativas, un <rootnode>
vacío se 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 minOccurs
del elemento e2
a algo distinto de "0"
, obtendré el comportamiento que originalmente esperaba.
Parece que la mera ausencia del elemento
<e2>
cuenta como una ocurrencia de laxsd:choice
en mi ejemplo.Si este es el caso, entonces, ¿por qué este número infinito de ocurrencias no viola el límite de
maxOccurs
en mixsd:choice
?
Le digo que puede ir a las tiendas al menos una vez y como máximo dos veces, y cada vez que tiene la opción de comprar: puede comprar manzanas (ya sea una o dos manzanas), o puede comprar naranjas (o no naranjas o una naranja).
Es muy posible que decidas ir a las tiendas dos veces y en cada ocasión no comprar naranjas. Así que vuelves con nada.