1

现在我正在验证XML这样的:

<?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 标签可以定义可以多次出现的无序元素。

4

1 回答 1

0

在 XSD 1.0 中:

  • 您可以使用 xs:all 代替 xs:sequence,但是每个元素只能出现(0 或 1)次。

  • 您可以将 xs:choice 与 minOccurs=0 maxOccurs=unbounded 一起使用,但是每个元素可以出现任意次数

在 XSD 1.1 中:

  • 您可以使用 xs:all 并为每个元素指定最小/最大基数(这是您所要求的)

XSD 1.1 目前在 Xerces(测试版)和 Saxon(当前版本 Saxon-EE 9.5)中可用。

于 2013-05-15T08:04:38.040 回答