xml - tutorial - xsd atributos
¿Cómo forzar al elemento hijo a tener un valor en XSD? (2)
XSD 1.0
Su restricción no se puede expresar en XSD 1.0.
XSD 1.1
Su restricción se puede expresar en XSD 1.1 utilizando una aserción para indicar que debe haber al menos un hijo Type
de Order
que tenga un valor de 1
:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning"
vc:minVersion="1.1">
<xs:element name="Order">
<xs:complexType>
<xs:sequence>
<xs:element name="Type" maxOccurs="unbounded" type="xs:integer"/>
</xs:sequence>
<xs:assert test="Type = 1"/>
</xs:complexType>
</xs:element>
</xs:schema>
Tengo XML (como ejemplo) con un segmento llamado Type
dentro del segmento Order
. El segmento es de uno a muchos, así que tenemos algo como:
<Order>
<Type>1</Type>
<Type>2</Type>
<Type>3</Type>
</Order>
Ahora la validación debería ser, que siempre debe haber un segmento Type
con valor 1 en el segmento Order
, de lo contrario, debería ocurrir un error de validación. Intenté algunas validaciones, pero no pude obtener el resultado correcto. ¿Alguien ha pensado en cómo implementar esto y si esto es posible?
en XSD 1.1 , puede usar xs:assert
element:
<xs:element name="Order">
<xs:complexType>
<xs:sequence maxOccurs="unbounded">
<xs:element name="Type" type="xs:string"/>
</xs:sequence>
<xs:assert test="count(Type[text() = ''1'']) > 0"/>
</xs:complexType>
</xs:element>