xsd - tutorial - Tener tanto un atributo como una restricción en un elemento en el esquema xml
xsd lista elementos (2)
No puede combinar una restricción y una extensión en un bloque de XSD. La solución que tiene con el tipo simple "ReviewDate" es la mejor solución que conozco.
Bagazo
Estoy intentando escribir un esquema xml que validará esta pieza de xml:
<date isodate="2007-03-14">14 march 2007</date>
El atributo isodate debe tener su tipo establecido en xs: date y el contenido debe tener una longitud máxima de 50 caracteres.
Me pregunto si es posible escribir la definición del esquema xml en un bloque, algo como esto tal vez:
<xs:element name="date" minOccurs="0" maxOccurs="1">
<xs:complexType>
<xs:simpleContent>
<xs:restriction base="xs:string">
<xs:minLength value="0"/>
<xs:maxLength value="50"/>
</xs:restriction>
<xs:attribute name="isodate" type="xs:date" use="required"/>
</xs:simpleContent>
</xs:complexType>
</xs:element>
El código anterior no funciona, y realmente no puedo entender por qué. La única solución que he encontrado es dividir la parte de restricción en un tipo separado, y vincular eso como esto:
<xs:simpleType name="reviewDate">
<xs:restriction base="xs:string">
<xs:minLength value="0"/>
<xs:maxLength value="50"/>
</xs:restriction>
</xs:simpleType>
<xs:element name="date" minOccurs="0" maxOccurs="1">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="reviewDate">
<xs:attribute name="isodate" type="xs:date" use="required"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
La pregunta que tengo es cómo escribir la definición en un bloque para que el esquema sea un poco más legible y no haga referencia a tipos en otras partes del esquema.
Puedes tener un elemento con restricción y atributo (-s). La clave es definir el tipo personalizado con sus restricciones y luego usarlo para agregarle atributos. Consulte aquí: Restricción de contenido y validación de atributos en el mismo elemento en XSD