所有maxOccurs都在XSD版本1.0中无限制

时间:2016-07-11 15:26:29

标签: xml xsd xsd-validation xml-validation

我的XML结构如下所示:

<node>
  <!-- node contains a lot of optional property nodes, 
       and the order is random. -->
  <property2>value</property2>
  <property1>value</property1>
  <property4>value</property4>
  <property3>value</property3>

  <!-- node also contains 0-to-unbounded child elements 
       to simplify things, these are listed after the properties. -->
  <child> ... </child>
  <child> ... </child>
  <child> ... </child>
</node>

据我所知,在XSD 1.1中,我可以按如下方式验证:

<xs:all>
  <xs:element name="property1" minOccurs="0"/>
  <xs:element name="property2" minOccurs="0"/>
  <xs:element name="property3" minOccurs="0"/>
  <xs:element name="property4" minOccurs="0"/>
  ...

  <xs:element name="child" minOccurs="0" maxOccurs="unbounded"/>
</xs:all>

不幸的是,我应该在XSD 1.0中执行此操作。(即使用的应用程序不支持XSD 1.1。)但是,XSD 1.0不允许maxOccurs="unbounded"限制在一个xs:all节点。

并非所有事情都必须严格验证。

  • 但重要的是,每个属性节点只定义一次(例如,不是property3的多次)。
  • 重要的是外观顺序不严格。
  • 子节点不止一次出现很重要。

1 个答案:

答案 0 :(得分:1)

如果这些属性没有子结构,请考虑将它们作为属性而不是元素;那么你可以订单无足轻重。

否则,请声明属性元素的排序,不要担心。从来没有看到过排序对生成XML数据的应用程序造成过度负担。相反,XSD设计师始终认为没有内在的订购需求,并且担心任意强加一个。然而,实际上,除非元素的顺序本身用于传达信息,否则序列工作正常。在所有其他情况下,XSD 1.0 xs:sequence都可以。