2013-11-06 1 views
0

Как сделать так, чтобы каждая запись имела равное количество значений? Теперь каждая запись может иметь разные значения.XML-схема, как ограничить количество элементов

<?xml version="1.0" encoding="UTF-8"?> 
<schema xmlns="http://www.w3.org/2001/XMLSchema"> 
<element name="list"> 
    <complexType> 
    <sequence> 
    <element name="record" minOccurs="0" maxOccurs="unbounded"> 
    <complexType> 
     <sequence> 
     <element name="value" type="string" minOccurs="0" maxOccurs="unbounded"/> 
     </sequence> 
    </complexType> 
    </element> 
    </sequence> 
    </complexType> 
</element> 
</schema> 

Для этой схемы это XML будет действовать:

<?xml version="1.0" encoding="UTF-8"?> 
<list> 
    <record> 
     <value>value 11</value> 
     <value>value 12</value> 
     <value>value 13</value>    
    </record> 
    <record> 
     <value>value 21</value> 
     <value>value 22</value> 
     <value>value 23</value>    
    </record> 
</list> 

И это будет справедливо также:

<?xml version="1.0" encoding="UTF-8"?> 
    <list> 
     <record> 
      <value>value 11</value> 
      <value>value 12</value> 
      <value>value 13</value>    
     </record> 
     <record> 
      <value>value 21</value> 
      <value>value 22</value> 
      <value>value 23</value> 
      <value>value 24</value> 
      <value>value 25</value> 
     </record> 
    </list> 

Как изменить схему таким образом, чтобы второй файл XML не был действителен?

+0

Я не уверен, что версия схемы 1,0 язык может это сделать. С 1.1 вы можете написать утверждение http://www.w3.org/TR/xmlschema11-1/#cAssertions ''. –

+0

изменить атрибут 'maxOccurs = n' для элемента' value', где 'n' - это число максимального количества раз, когда вы этого хотите. – Joshi

ответ

0

Это кажется, что единственно возможным решением для XSD 1.0 является определение нескольких записей элементов:

<xs:element name="list"> 
    <xs:complexType> 
    <xs:choice> 
     <xs:element name="record1" minOccurs="0" maxOccurs="unbounded"> 
     <xs:complexType> 
      <xs:sequence> 
      <xs:element ref="value" minOccurs="1" maxOccurs="1" /> 
      </xs:sequence> 
     </xs:complexType> 
     </xs:element> 
     <xs:element name="record2" minOccurs="0" maxOccurs="unbounded"> 
     <xs:complexType> 
      <xs:sequence> 
      <xs:element ref="value" minOccurs="2" maxOccurs="2" /> 
      </xs:sequence> 
     </xs:complexType> 
     </xs:element> 
     <xs:element name="record3" minOccurs="0" maxOccurs="unbounded"> 
     <xs:complexType> 
      <xs:sequence> 
      <xs:element ref="value" minOccurs="3" maxOccurs="3" /> 
      </xs:sequence> 
     </xs:complexType> 
     </xs:element> 
     <!-- and so on... --> 
    </xs:choice> 
    </xs:complexType> 
</xs:element> 

<xs:element name="value" type="xs:string" /> 

Но XML будет отличаться:

<list> 
    <record3> 
    <value>value 11</value> 
    <value>value 12</value> 
    <value>value 13</value> 
    </record3> 
    <record3> 
    <value>value 21</value> 
    <value>value 22</value> 
    <value>value 23</value> 
    </record3> 
</list>