XSD 验证:元素值应为其他 2 个元素的总和
XSD validation: Element Value should be sum of 2 other Elements
<xml>
<root>
<courses>
<course>
<ceu>2000</ceu>
<first_year>1000</first_year>
<second_year>1000</first_year>
</course>
</courses>
</root>
如何添加 XSD 验证以使元素 CEU 的值始终等于 first_year 和 second_year 值的总和?
如果你使用xsd 1.1
,你可以使用xs:assert
:
<xs:element name="course">
<xs:complexType>
<xs:sequence>
<xs:element name="ceu" type="xs:positiveInteger"/>
<xs:element name="first_year" type="xs:positiveInteger"/>
<xs:element name="second_year" type="xs:positiveInteger"/>
</xs:sequence>
<xs:assert test="ceu = sum((first_year,second_year))"/>
</xs:complexType>
</xs:element>
XSD 1.0
不可能。
XSD 1.1
此 XML 文件将有效:
<course>
<ceu>3000</ceu>
<first_year>1000</first_year>
<second_year>2000</second_year>
</course>
有了这个XSD:
<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="course">
<xs:complexType>
<xs:sequence>
<xs:element name="ceu" type="xs:positiveInteger"/>
<xs:element name="first_year" type="xs:positiveInteger"/>
<xs:element name="second_year" type="xs:positiveInteger"/>
</xs:sequence>
<xs:assert test="ceu = first_year + second_year"/>
</xs:complexType>
</xs:element>
</xs:schema>
但是这个XML:
<course>
<ceu>4000</ceu>
<first_year>1000</first_year>
<second_year>2000</second_year>
</course>
将违反断言并导致如下错误消息:
cvc-assertion: Assertion evaluation ('ceu = first_year +
second_year') for element 'course' on schema type '#AnonType_course'
did not succeed.
<xml>
<root>
<courses>
<course>
<ceu>2000</ceu>
<first_year>1000</first_year>
<second_year>1000</first_year>
</course>
</courses>
</root>
如何添加 XSD 验证以使元素 CEU 的值始终等于 first_year 和 second_year 值的总和?
如果你使用xsd 1.1
,你可以使用xs:assert
:
<xs:element name="course">
<xs:complexType>
<xs:sequence>
<xs:element name="ceu" type="xs:positiveInteger"/>
<xs:element name="first_year" type="xs:positiveInteger"/>
<xs:element name="second_year" type="xs:positiveInteger"/>
</xs:sequence>
<xs:assert test="ceu = sum((first_year,second_year))"/>
</xs:complexType>
</xs:element>
XSD 1.0
不可能。
XSD 1.1
此 XML 文件将有效:
<course>
<ceu>3000</ceu>
<first_year>1000</first_year>
<second_year>2000</second_year>
</course>
有了这个XSD:
<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="course">
<xs:complexType>
<xs:sequence>
<xs:element name="ceu" type="xs:positiveInteger"/>
<xs:element name="first_year" type="xs:positiveInteger"/>
<xs:element name="second_year" type="xs:positiveInteger"/>
</xs:sequence>
<xs:assert test="ceu = first_year + second_year"/>
</xs:complexType>
</xs:element>
</xs:schema>
但是这个XML:
<course>
<ceu>4000</ceu>
<first_year>1000</first_year>
<second_year>2000</second_year>
</course>
将违反断言并导致如下错误消息:
cvc-assertion: Assertion evaluation ('ceu = first_year + second_year') for element 'course' on schema type '#AnonType_course' did not succeed.