0

好吧,在简短的版本中。老师给了我们测试的复习,​​它包含了 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 模式。

  1. 可以有 0 到 10 门课程

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

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

这是我到目前为止的 XML 模式代码(不确定是否正确)。我非常有信心前两个是正确的。第三个没看懂

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

1 回答 1

0

几个建议。

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

  • totalDigits 方面确保 CourseType 值可以用五个或更少的十进制数字写入,但它不禁止值1-123450000000000001492。约束“正好包含 5 个数字”暗示了对值的词法表示的约束。你能用模式刻面得到你需要的东西吗?

于 2013-03-06T16:39:00.523 回答