【问题标题】:XML Schema maxOccurs and xs:allXML Schema maxOccurs 和 xs:all
【发布时间】:2012-02-24 05:45:51
【问题描述】:

我得到了以下架构:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
  <xs:element name="machine">
    <xs:complexType>
    <xs:sequence>
      <xs:element name="states" type="tokenList"/>
      <xs:element name="in_alphabet" type="tokenList"/>
      <xs:element name="blank" type="xs:string"/>
      <xs:element name="tape_alphabet" type="tokenList"/>
      <xs:element name="first_state" type="xs:string"/>
      <xs:element name="final_states" type="tokenList"/>

      <xs:element name="delta" type="delta_func" maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <xs:simpleType name="tokenList">
    <xs:list itemType="xs:normalizedString"/>
  </xs:simpleType>

  <xs:complexType name="delta_func">
    <xs:sequence>
      <xs:element name="state" type="xs:string"/>
      <xs:element name="read" type="xs:string"/>
      <xs:element name="target_states" type="tokenList"/>
      <xs:element name="write" type="xs:string"/>
      <xs:element name="move">
        <xs:simpleType>
        <xs:restriction base="xs:string">
          <xs:pattern value="R|L|r|l"/>
        </xs:restriction>
        </xs:simpleType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>

</xs:schema>

这可行,但我不想限制元素的顺序。我尝试了xs:all,但它不允许maxOccurs=unbounded 用于delta,这是必须的。所有其他元素只出现一次,所以xs:all 在这里不会有问题。有没有办法在元素上定义随机顺序,同时允许无限数量的deltas?

【问题讨论】:

    标签: xml xsd


    【解决方案1】:

    您可以使用&lt;choice maxOccurrs="unbounded"&gt; 而不是&lt;sequence&gt;,但这意味着所有元素都可以出现多次。

    【讨论】:

      【解决方案2】:

      XSD 1.1 允许您寻找:xs:all 在每个元素粒子上都有一个 maxOccurs。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-06-16
        • 2019-01-13
        • 2015-12-05
        • 2013-09-09
        • 2015-04-26
        • 2010-10-21
        • 2014-07-05
        相关资源
        最近更新 更多