簡體   English   中英

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 :模式類型'#AnonType_course'上元素'course'的斷言評估('ceu = first_year + second_year')未成功。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM