2012-02-01 72 views
2

我得到了以下的模式:XML架構的maxOccurs和xs:所有

<?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=unboundeddelta,這是必須的。所有其他元素只出現一次,所以xs:all這裏不會有問題。有沒有辦法在元素上定義隨機順序,同時允許無限數量的delta s?

回答

2

而不是<sequence>,您可以使用<choice maxOccurrs="unbounded">,但它意味着所有元素可能會出現多次。

3

XSD 1.1允許你在找什麼:xs:所有的每個元素都有一個maxOccurs粒子。