XSD-Schema를 사용하여 유효성을 검사해야하는 일반 XML이 있습니다. 불행히도 XML의 구조는 고정되어 있으며 변경할 수 없습니다.assert와 xpath를 사용하여 xsd 1.1을 사용하여 xml 노드의 값을 검사하거나 유효성을 검사 할 수 있습니까?
는 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-스키마 : ID가 동일한 경우
<?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>
XSD는-스키마는 이제 "A"타입은 "할 필요가 확인하는 동작 DATETIME "이지만"2017-10-01T09 : 34 : 11Z "값이 xs : dateTime인지 확인해야합니다. 다른 요소에도 동일하게 적용됩니다.
그래서 목표는 특정 ID 만 하나 유형 만 한 XS에 대한 것을 확인하는 것입니다 : 형 simpleType이 유효합니다.내 현재 xs : assert 표현식을 사용하면 Prop 요소에 특정 ID 및 유형 특성 만 있는지 확인할 수 있습니다. 그러나 나는 또한 가치를 확인할 필요가있다.
감사합니다. Joe