Xml XSD验证:元素值应该是其他两个元素的总和 2000 1000 1000

Xml XSD验证:元素值应该是其他两个元素的总和 2000 1000 1000,xml,xsd,xsd-validation,Xml,Xsd,Xsd Validation,如何添加XSD验证,使元素CEU的值始终等于第一年和第二年值的总和 如果您使用的是xsd1.1,则可以使用xs:assert: <xml> <root> <courses> <course> <ceu>2000</ceu> <first_year>1000</first_year> <

如何添加XSD验证,使元素CEU的值始终等于第一年和第二年值的总和

如果您使用的是
xsd1.1
,则可以使用
xs:assert

<xml>
   <root>
     <courses>
         <course>
             <ceu>2000</ceu>
             <first_year>1000</first_year>
             <second_year>1000</first_year>
         </course>
     </courses>
   </root>

XSD 1.0 不可能

XSD 1.1 此XML文件将有效:

<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>

3000
1000
2000
使用此XSD:

<course>
  <ceu>3000</ceu>
  <first_year>1000</first_year>
  <second_year>2000</second_year>
</course>

但是这个XML:

<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>

4000
1000
2000
将违反该断言并导致如下错误消息:

:断言评估('ceu=第一年+ 模式类型“#Anantype_course”上的元素“course”的第二年 没有成功

<course>
  <ceu>4000</ceu>
  <first_year>1000</first_year>
  <second_year>2000</second_year>
</course>