que nillable xml xsd xsd-validation xml-validation

xml - que - nillable xsd



Restrinja complexType con atributos en XSD? (1)

Para tener un atributo en un elemento con contenido restringido, defina un nuevo xs:simpleType y luego use xs:extension para extenderlo con un atributo:

<?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> <xs:element name="algo"> <xs:complexType> <xs:sequence> <xs:element name="nota" type="t_algo" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> </xs:element> <xs:complexType name="t_algo"> <xs:simpleContent> <xs:extension base="t_algo_content"> <xs:attribute name="modul" type="t_modul"/> </xs:extension> </xs:simpleContent> </xs:complexType> <xs:simpleType name="t_modul"> <xs:restriction base="xs:string"> <xs:pattern value="m0[0-9]"/> </xs:restriction> </xs:simpleType> <xs:simpleType name="t_algo_content"> <xs:restriction base="xs:integer"> <xs:minInclusive value="0"/> <xs:maxInclusive value="10"/> </xs:restriction> </xs:simpleType> </xs:schema>

Tenga en cuenta también que simplifiqué su patrón de minInclusive regulares en el primer caso y usé minInclusive / maxInclusive para expresar de forma más natural su rango entero en el segundo caso.

Estoy trabajando con un XSD como:

<?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> <xs:element name="algo"> <xs:complexType> <xs:sequence> <xs:element name="nota" type="t_algo" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> </xs:element> <xs:complexType name="t_algo"> <xs:restriction base="xs:string"> <xs:pattern value="[1][0]|[0-9]" /> </xs:restriction> <xs:attribute name="modul" type="t_modul"/> </xs:complexType> <xs:simpleType name="t_modul"> <xs:restriction base="xs:string"> <xs:pattern value="[m][0][0-9]"/> </xs:restriction> </xs:simpleType> </xs:schema>

y usando un XML de prueba como este:

<?xml version="1.0" encoding="UTF-8"?> <algo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="file:///D:/DAM/RECUF1/Mispruebas/telf.xsd"> <nota modul="m01">0</nota> <nota modul="m01">7</nota> <nota modul="m01">3</nota> <nota modul="m01">1</nota> </algo>

Quiero tener niños nota con valores entre 0-10 y con el atributo modul con un valor m0X donde x entre (0-9). Pensé que el XSD anterior funcionaría, pero no es así. ¿Alguien puede explicarme qué estoy haciendo mal?