xsd:抽象类集合



我有xml文件:

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

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

也就是说,问题是:如何为可以具有任意数量不同类型元素的集合设置验证方案?

致以最良好的问候!

<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. 验证器查看第一个元素。CCD_ 1是第一个这样验证的元素
  2. 然后,验证器在父对象内部查找复杂类型。它找到CCD_ 2。由于<Child1>choice块中的第一个元素,因此它进行验证
  3. 验证器然后查找<Child2>元素。由于<Child2>是下一个,它也进行了验证
  4. 验证器然后查看下一个元素。它不是</Parent>,因此验证器将其与choice块进行检查,因为它可以作为maxOccurs=unbounded出现无限次
  5. 验证器找到一个<Parent>0元素进行验证
  6. 验证器查找不存在的<Child2>元素,从而完成choice
  7. 验证器然后查看下一个元素。它不是</Parent>,因此验证器将其与choice块进行检查,因为它可以作为maxOccurs=unbounded出现无限次
  8. 验证器找到一个<Child1>元素进行验证
  9. 验证器然后查看下一个元素。验证的是</Parent>
  10. 验证程序已完成。文档验证成功

由于minOccurs=0,这也允许<Child1>0或<Child2>元素出现0的情况。除非明确声明,否则XML模式元素继承其父元素的属性。在这种情况下,由于我们没有为<Child1><Child2>声明minOccurs属性,因此这相当于<xs:element minOccurs="0" name="Child1"/><xs:element minOccurs="0" name="Child2"/>

最新更新