validacion tipos significa que opcional minoccurs elemento xml xsd xsd-validation xml-validation

xml - tipos - validacion xsd



XSD permitiendo contenido simpleType y complexType para el mismo elemento? (2)

En XSD, no puede permitir contenido simple y complejo a menos que esté dispuesto a mezclar elementos y texto a través de mixed="true" . A continuación, podría utilizar las aserciones de XSD 1.1 para excluir que ambas aparezcan simultáneamente.

Sin embargo, estás nadando contra la corriente aquí. En su lugar, acepte que realmente tiene dos entidades diferentes con dos modelos de contenido diferentes y nombre diferentes entidades de forma diferente : SIMPLE_HEADER y COMPLEX_HEADER vienen a la mente. Luego puede usar xs:choice/maxOccurs="unbounded" en Details para permitir que los encabezados simples y complejos se entremezclen libremente.

Tengo una situación en la que tengo diferentes XML que tendrán diferentes tipos de propiedades. A veces, el elemento HEADER podría tener solo un nodo o algunos XML podrían tener elementos dentro del nodo HEADER 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 de la siguiente manera: Esto validará por ejemplo 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á el ejemplo 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>

Intenté usar xs:choice pero no parecía funcionar bien o tal vez no tengo una idea clara sobre cómo implementar la elección en esta situación.


Si las instancias ya existen, y no puede cambiarlas, y está tratando de escribir un esquema XSD para describirlas, y tiene que haber un esquema que las describa todas, entonces sus opciones son muy limitadas. Por lo que sé, la única solución es definir HEADER con contenido mixto, y esa es una solución pésima. Se puede mejorar un poco (aunque no mucho) mediante el uso de aserciones de XSD 1.1.

Si puede eliminar cualquiera de estos requisitos (por ejemplo, si puede cambiar los documentos de la instancia, o si puede usar RelaxNG para hacer la validación, o si puede usar un esquema diferente para cada tipo de documento), entonces tiene la oportunidad de obtener más información. solución satisfactoria.