xsd:抽象类集合

时间:2012-02-16 05:35:01

标签: xml xsd

我有xml文件:

<Parent>
  <Child1 ... />
  <Child2 ... />
  ...
  <Child1 ... />
  <Child1 ... />
<Parent>

其中Clild1和Child2 - Parent抽象类的子项。

也就是说,问题是: 如何为可以包含任意数量元素的集合设置验证方案?

祝你好运!

1 个答案:

答案 0 :(得分:1)

<xs:element name="Parent">
  <xsl:complexType>
    <xs:choice minOccurs="0" maxOccurs="unbounded">
      <xs:element name="Child1"/>
      <xs:element name="Child2"/>
    </xs:choice>
  </xs:complexType>
</xs:element>

为了说明这是如何工作的,让我们使用示例输入的简化版本。

<Parent>
  <Child1 ... />
  <Child2 ... />
  <Child1 ... />
  <Child1 ... />
</Parent>
  1. 验证器查看第一个元素。<Parent>是第一个验证的元素。
  2. 然后验证器在父级内部查找复杂类型。它找到了<Child1>。由于<Child1>choice块中的第一个元素,因此会验证。
  3. 然后验证器查找<Child2>元素。由于<Child2>是下一个,它也会验证。
  4. 验证器然后查看下一个元素。它不是</Parent>,因此验证器会对choice块进行检查,因为它可以无限次地发生maxOccurs=unbounded
  5. 验证器找到一个有效的<Child1>元素。
  6. 验证程序查找不存在的<Child2>元素,以便它完成choice块。
  7. 验证器然后查看下一个元素。它不是</Parent>,因此验证器会对choice块进行检查,因为它可以无限次地发生maxOccurs=unbounded
  8. 验证器找到一个有效的<Child1>元素。
  9. 验证器然后查看下一个元素。它是</Parent>验证。
  10. 验证器已完成。该文件成功验证。
  11. minOccurs=0起,这也允许出现0<Child1>元素<Child2>的情况。除非显式声明,否则XML模式元素将继承其父元素的属性。在这种情况下,由于我们没有为<Child1><Child2>声明minOccurs属性,因此它等同于<xs:element minOccurs="0" name="Child1"/><xs:element minOccurs="0" name="Child2"/>