J'ai un XML générique qui doit être validé en utilisant un schéma XSD. Malheureusement, la structure du fichier XML est fixe et ne peut pas être modifiée.Est-il possible de vérifier ou de valider la valeur d'un nœud xml en utilisant xsd 1.1, à l'aide de assert et xpath?
XML:
<?xml version="1.0" encoding="UTF-8"?>
<Root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="RatingRequestShema-V2.xsd">
<Request>
<Props id="Info">
<Prop id="A" type="DATETIME">2017-10-01T09:34:11Z</Prop>
<Prop id="B" type="ENUM">Test</Prop>
</Props>
<Props id="Example">
<Prop id="C" type="DATE">1980-08-14</Prop>
<Prop id="D" type="DECIMAL">34,5</Prop>
</Props>
</Request>
</Root>
XSD-schéma:
<?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" elementFormDefault="qualified" attributeFormDefault="unqualified" vc:minVersion="1.1">
<xs:element name="Root">
<xs:complexType>
<xs:sequence>
<xs:element name="Request">
<xs:complexType>
<xs:sequence>
<xs:element name="Props" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="Prop" maxOccurs="unbounded">
<xs:complexType>
<xs:attribute name="id" use="required"/>
<xs:attribute name="type" use="required"/>
<xs:assert test="if (@id eq 'A') then @type eq 'DATETIME'
else if (@id eq 'B') then @type eq 'ENUM' else false()"/>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="id" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="Info"/>
<xs:enumeration value="Example"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:simpleType name="datetime">
<xs:restriction base="xs:dateTime"/>
</xs:simpleType>
<xs:simpleType name="B_Enum">
<xs:restriction base="xs:string">
<xs:enumeration value="Test_1"/>
<xs:enumeration value="Test_2"/>
<xs:enumeration value="Test_3"/>
</xs:restriction>
</xs:simpleType>
Le XSD-schéma vérifie maintenant seulement que si l'identifiant est égal à "A" le type doit être " DATETIME "mais il doit également vérifier si la valeur" 2017-10-01T09: 34: 11Z "est de type xs: dateTime. La même chose s'applique pour les autres éléments.
Donc, le but est de vérifier que pour un certain id que un type et seulement un xs: simpleType est valide. Avec mon expression actuelle xs: assert, je peux seulement vérifier si un élément Prop a un attribut id et type spécifique. Mais j'ai aussi besoin de vérifier la valeur.
Merci, Joe