Reputation: 11
How to make that each <record>
has equal count of <value>
child elements? Right now each <record>
can have a different count of the <value>
child elements.
Here's my schema:
<?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>
For this schema this XML is valid (as expected):
<?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>
And this will be valid too. BUT: I want it to be INVALID!
<?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>
How to change schema so that second xml file was not valid?
Upvotes: 0
Views: 2502
Reputation: 1271
It's seems that the only possible solution for XSD 1.0 is to define multiple record elements:
<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" />
But XML will be different:
<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>
Upvotes: 1