<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值的总和?
答案 0 :(得分:1)
如果您使用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>
答案 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:断言评估(&#39; ceu = first_year + second_year&#39;)for element&#39; course&#39;在架构类型&#39;#AnonType_course&#39; 没有成功。