使用XML Schema验证XML文档

时间:2013-03-06 13:58:42

标签: xml validation xsd

嗯,在短版本中。老师给了我们测试的评论,它包含了XML模式(我们还没有在课堂上讨论)。我正在读这一章,但很难弄明白,因为这本书一次只能提供代码片段。所以,我不知道应该如何处理事情的大局。

我们有一个类似这样的XML文档

<enrollment>
  <semester>1128</semester>
  <student>
    <id>1000001</id>
    <lastname>Smith</lastname>
    <firstname>Joe</firstname>
    <courses>
      <course id="10001"/>
      <course id="10003"/>
    </courses>
    <tuition>200</tuition>
  </student>
</enrollment>

我们必须创建一个具有这些验证的XML Schema。

  1. 可以有0到10个课程

  2. 学费必须大于零且小于10,000。

  3. 创建一个名为CourseType的自定义类型,用于验证课程ID属性是否包含5位数字。

  4. 这是我到目前为止的XML Schema Code(不确定它是否正确)。我非常有信心前两个是正确的。我不明白第三个。

    <xs:schema blah blah blah validation inputs>
    <xs:element name="enrollment">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="courses">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="course"
              minOccurs="0"
              maxOccurs="10"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
    
        <xs:element name="tuition">
        <xs:simpleType>
          <xs:restriction base="xs:integer">
            <xs:minInclusive value="0"/>
            <xs:maxInclusive value="10000"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
    
        <xs:element name="Courses">
          <xs:complexType name ="Course">
          <xs:simpleContent>
            <xs:extension base ="xs:course ID">
              <xs:attribute name="id" type="CourseType">
              </xs:attribute>
            </xs:extension>
           </xs:simpleContent>
          </xs:complexType>
       </xs:element>
      </xs:sequence>  
    </xs:complexType>  
    </xs:element>
    
    <xs:simpleType name="CourseType">
       <xs:restriction base="xs:integer">
       <xs:totalDigits value ="5"/>
       </xs:restriction>
     </xs:simpleType>
     </xs:schema>
    

1 个答案:

答案 0 :(得分:0)

一些建议。

  • 你说学费的限制是它应该大于零而不是一万。您的声明使用minInclusive和maxInclusive facets,但它允许值为零和一万;您可能需要考虑minExclusive和maxExclusive是否能更好地匹配需求。

  • totalDigits facet确保CourseType值可以写入五位小数或更少,但不禁止值1-123450000000000001492。约束“恰好包含5位数”表示对值的词汇表示的约束。你能用模式方面得到你需要的东西吗?