¿XSD permite contenido simpleType y complexType para el mismo elemento?
Tengo una situación en la que tengo diferentes XML que tendrán diferentes tipos de propiedades. A veces el elementoHEADER
podría tener solo un nodo o algunos XML podrían tener elementos dentro delHEADER
nodo y valores dentro.
Ejemplo 1 (HEADER
con solo texto):
<Details HeaderLabel="DETAILS">
<HEADER Label="Header">2.5%</HEADER>
</Details>
Ejemplo 2 (HEADER
con dos elementos secundarios):
<Details HeaderLabel="DETAILS">
<HEADER Label="Header">
<HEAD Label="H1a">2.88%</HEAD>
<HEAD Label="H2b">3.24%</HEAD>
</HEADER>
</Details>
El XSD funciona así: esto se validará paraEjemplo 1:
<xs:element name="HEADER">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="Label" type="xs:string" use="required" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
Esto validará elejemplo 2:
<xs:element name="HEADER">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" name="HEAD">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="Label" type="xs:string" use="required" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="Label" type="xs:string" use="required" />
</xs:complexType>
</xs:element>
Traté de usarxs:choice
pero no pareció funcionar bien o tal vez no tengo una comprensión clara sobre cómo implementar la elección en esta situación.