2013-05-15 100 views
1

现在我验证的XML这样的:xml元素验证针对xsd - 如何定义无序元素?

<?xml version="1.0" encoding="utf-8"?> 
    <all> 
    <allElem> 
     <a>12345</a>   
     <b>2</b>    
     <c>3</c>     
     <d>        
     <d1>4</d1>    
     <d2>5</d2>    
     <d3>6</d3>   
     </d> 
     <d>        
     <d1>7</d1>    
     <d2>8</d2>    
     <d3>9</d3> 
     </d>      
    </allElem> 
</all> 

我写了一个简单XSD这样的:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 

    <xs:element name="all"> 
    <xs:complexType> 
    <xs:sequence> 
    <xs:element name="allElem" maxOccurs="1"> 
     <xs:complexType> 
      <xs:sequence> 
      <xs:element name="a" type="xs:string"/> 
      <xs:element name="b" type="xs:string"/> 
      <xs:element name="c" type="xs:string"/> 
      <xs:element name="d" minOccurs="1" maxOccurs="unbounded"> 
       <xs:complexType>  
        <xs:sequence> 
        <xs:element name="d1" type="xs:string"/> 
        <xs:element name="d2" type="xs:string"/> 
        <xs:element name="d3" type="xs:string"/> 
        </xs:sequence> 
       </xs:complexType> 
      </xs:element> 
      </xs:sequence> 
     </xs:complexType> 
    </xs:element> 
    </xs:sequence> 
    </xs:complexType> 
    </xs:element>  

</xs:schema> 

我的问题是:我使用xs:sequence,但我不希望我的xml元素需要排序,我不能使用xs:all,因为它只允许元素发生一次max,但是我的xml元素“d”应该能够出现多次。在xsd中有解决方案,我可以定义一个无序元素出现一次或出现多次? 换句话说,我想知道是否有这样一个xsd标签,可以定义可以出现多次的无序元素。

+0

我建议删除java标记 –

回答

0

在XSD 1.0:

  • 可以使用的xs:全部到位的xs:序列,但随后只能出现的每个元素(0或1)次。

  • 可以使用的xs:选择一个minOccurs = 0的maxOccurs =无界的,但随后的每个元素可以出现任意次数

在XSD 1.1:

  • 可以使用XS :全部并指定每个元素的最小/最大基数(这是你要求的)

XSD 1.1目前在Xerces(测试版)和撒克逊(当前版本Saxon-EE 9.5)。

+0

XSD1.1中的“最小/最大基数”是什么意思?他们是“minOccurs = 0 maxOccurs =无界”?你可以给元素属性名称吗? –

+0

是的,我指的是minOccurs和maxOccurs。 –