validacion tutorial simple opcional extension español elemento atributos xml xsd xsd-validation xml-validation

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>