tutorial tipos simples significa que opcional minoccurs esquema español elemento ejemplo datos atributos xml xsd

xml - tipos - ¿Deberían los límites de ocurrencia XSD estar en la secuencia o el elemento?



xsd atributos (3)

Si tengo un elemento con uno o más subelementos, ¿deberían estar los atributos min / maxcurrentes en el elemento xsd: sequence, xsd: element, both, or either?

<xsd:element name="books"> <xsd:complexType> <xsd:sequence minOccurs="1" maxOccurs="unbounded"> <!-- here? --> <xsd:element ref="book" minOccurs="1" maxOccurs="unbounded"/> <!-- or here? --> </xsd:sequence> </xsd:complexType> </xsd:element>


Coloque el atributo maxOccurs en el elemento <xsd: element>.

<xsd:sequence> <xsd:element ref="book" minOccurs="1" maxOccurs="unbounded"/> <!-- here! --> </xsd:sequence>


Debe estar en <xsd:element> , en mi humilde opinión.

El efecto de ponerlo en la secuencia es el mismo, eventualmente (para este caso). Pero mirándolo desde una perspectiva lógica, quiere expresar que se trata de una secuencia de elementos , y no una fila de secuencias que contienen un elemento cada una .

Ponerlo en ambos definitivamente me parecería mal, aunque para este caso no volvería a tener ninguna diferencia práctica.


En casi todas las circunstancias, quiere poner el Mín / Máx Ocurre en el elemento dentro de una secuencia y no en la secuencia. Usando tu ejemplo:

<xsd:element name="books"> <xsd:complexType> <xsd:sequence> <xsd:element ref="book" minOccurs="1" maxOccurs="unbounded"/> </xsd:sequence> </xsd:complexType> </xsd:element>

Esto es inequívoco Si tiene una serie de elementos de libro en una fila, puede señalar exactamente qué elemento de esquema los está produciendo. Sin embargo:

<xsd:element name="books"> <xsd:complexType> <xsd:sequence minOccurs="1" maxOccurs="unbounded"/> <xsd:element ref="book" minOccurs="1" maxOccurs="unbounded"/> </xsd:sequence> </xsd:complexType> </xsd:element>

Aquí, si tiene dos elementos de " book " seguidos, ¿tiene dos sequence en una fila, o una sequence con dos elementos de book ? Esto falla el requisito de atribución de partículas únicas .

Finalmente, si coloca el Mín / Máx Ocurre en la secuencia y luego agrega un elemento adicional:

<xsd:element name="books"> <xsd:complexType> <xsd:sequence minOccurs="1" maxOccurs="unbounded"/> <xsd:element ref="book"/> <xsd:element ref="ebook"/> </xsd:sequence> </xsd:complexType> </xsd:element>

entonces esto puede permitir el siguiente XML, que probablemente no sea lo que pretendes:

<books> <book/><ebook/><book/><ebook/><book/><ebook/><book/><ebook/> </books>

mientras que si tienes:

<xsd:element name="books"> <xsd:complexType> <xsd:sequence/> <xsd:element ref="book" minOccurs="1" maxOccurs="unbounded"/> <xsd:element ref="ebook" minOccurs="1" maxOccurs="unbounded"/> </xsd:sequence> </xsd:complexType> </xsd:element>

entonces es claro e inequívoco lo que pretendes: una secuencia de uno o más elementos del book seguidos por una secuencia de uno o más elementos del ebook .