xsd - tipos - Diferencia entre el grupo y la secuencia en el esquema XML?
validacion xsd (1)
¿Cuál es la diferencia entre un xs:group
y una xs:sequence
en XML Schema? ¿Cuándo usarías uno o el otro?
xs:sequence
- junto con xs:choice
y xs:all
- se usa para definir las secuencias válidas del elemento XML en el XML objetivo. Por ejemplo, el esquema para este XML:
<mainElement>
<firstSubElement/>
<subElementA/>
<subElementB/>
</mainElement>
es algo así como:
<xs:element name=''mainElement''>
<xs:complexType>
<xs:sequence>
<xs:element name="firstSubElement"/>
<xs:element name="subElementA"/>
<xs:element name="subElementB"/>
</xs:sequence>
</xs:complexType>
</xs:element>
xs:group
se usa para definir un grupo nombrado de elemento XML siguiendo ciertas reglas que luego se pueden referenciar en diferentes partes del esquema. Por ejemplo, si el XML es:
<root>
<mainElementA>
<firstSubElement/>
<subElementA/>
<subElementB/>
</mainElementA>
<mainElementB>
<otherSubElement/>
<subElementA/>
<subElementB/>
</mainElementB>
</root>
puedes definir un grupo para los subelementos comunes:
<xs:group name="subElements">
<xs:sequence>
<xs:element name="subElementA"/>
<xs:element name="subElementB"/>
</xs:sequence>
</xs:group>
y luego úsalo:
<xs:element name="mainElementA">
<xs:complexType>
<xs:sequence>
<xs:element name="firstSubElement"/>
<xs:group ref="subElements"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="mainElementB">
<xs:complexType>
<xs:sequence>
<xs:element name="otherSubElement"/>
<xs:group ref="subElements"/>
</xs:sequence>
</xs:complexType>
</xs:element>