validacion simple opcional extension elemento crear atributos xsd

xsd - simple - ¿Cómo se definen varios elementos en el esquema XML con el mismo nombre y el valor de atributo diferente permitido?



xml schema simple (5)

¿Has considerado algo como esto? (es decir, el día es un tipo y los elementos se nombran después de los días de la semana)

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:complexType name="day" /> <xs:element name="a"> <xs:complexType> <xs:sequence> <xs:element name="monday" maxOccurs="1" minOccurs="0" type="day" /> <xs:element name="tuesday" maxOccurs="1" minOccurs="0" type="day" /> <xs:element name="wednesday" maxOccurs="1" minOccurs="0" type="day" /> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>

Me gustaría crear un esquema XML para este trozo de xml, me gustaría restringir los valores del atributo "nombre", de modo que en el documento de salida y solo se permita una instancia del día para cada día de la semana:

<a> <day name="monday" /> <day name="tuesday" /> <day name="wednesday" /> </a>

He intentado usar esto:

<xs:complexType name="a"> <xs:sequence> <xs:element name="day" minOccurs="1" maxOccurs="1"> <xs:complexType> <xs:attribute name="name" use="required"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:enumeration value="monday" /> </xs:restriction> </xs:simpleType> </xs:attribute> </xs:complexType> </xs:element> <xs:element name="day" minOccurs="1" maxOccurs="1"> <xs:complexType> <xs:attribute name="name" use="required"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:enumeration value="tuesday" /> </xs:restriction> </xs:simpleType> </xs:attribute> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType>

pero el validador de esquemas XML en eclipse dice "Aparecen varios elementos con el nombre ''día'', con diferentes tipos, en el grupo de modelos".

¿Hay alguna otra manera?


Prueba esto:

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="a"> <xs:complexType> <xs:sequence> <xs:element maxOccurs="unbounded" name="day"> <xs:complexType> <xs:attribute name="atrib" type="xs:string" use="required" /> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element>

Creo que maxOccurs = "ilimitado" es lo que necesitas.


Necesitas algo como esto:

<?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> <xs:element name="a"> <xs:complexType> <xs:sequence> <xs:element maxOccurs="unbounded" ref="day"/> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="day"> <xs:complexType> <xs:attribute name="name" use="required"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:enumeration value="monday"/> <xs:enumeration value="tuesday"/> <xs:enumeration value="wednesday"/> </xs:restriction> </xs:simpleType> </xs:attribute> </xs:complexType> </xs:element> </xs:schema>


Utilice la opción en lugar de la secuencia

De esta forma puedes tener solo el elemento uno en un elemento

Y para el atributo de nombre use el atributo ref y haga referencia a él con enumeración


Para cumplir con la restricción a lo sumo descrita en la pregunta original, debe usar un elemento xs: unique en su esquema.

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> <xs:element name="a"> <xs:complexType> <xs:sequence> <xs:element name="day" maxOccurs="7" minOccurs="1"> <xs:complexType> <xs:attribute name="name" use="required"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:pattern value="(mon|tues|wednes|thurs|fri|satur|sun)day"/> </xs:restriction> </xs:simpleType> </xs:attribute> </xs:complexType> <xs:unique name="eachDayAtMostOnce"> <xs:selector xpath="day"/> <xs:field xpath="@name"/> </xs:unique> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>