![](/img/trans.png)
[英]skip XSD validation for specific elements based on content of other element in java
[英]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>
不可能。
此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 :模式類型'#AnonType_course'上元素'course'的斷言評估('ceu = first_year + second_year')未成功。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.