Lastige zaak. Eigenlijk zou je dit willen doen:
XML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
| <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="bar">
<xsd:complexType>
<xsd:choice>
<xsd:sequence>
<xsd:element name="foo" type="false"/>
</xsd:sequence>
<xsd:sequence>
<xsd:element name="foo" type="true"/>
<xsd:element name="fred" type="xsd:string"/>
</xsd:sequence>
</xsd:choice>
</xsd:complexType>
</xsd:element>
<xsd:simpleType name="true">
<xsd:restriction base="xsd:boolean">
<xsd:enumeration value="true"/>
<xsd:enumeration value="1"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="false">
<xsd:restriction base="xsd:boolean">
<xsd:enumeration value="false"/>
<xsd:enumeration value="0"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:schema> |
Dit is alleen niet toegestaan om dat dit niet deterministisch is. Prut dus. In RELAX NG kan je dit uiteraard wel gewoon opschrijven.
Dit mag dan weer wel:
XML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="bar">
<xsd:complexType>
<xsd:choice>
<xsd:sequence>
<xsd:element name="false"/>
</xsd:sequence>
<xsd:sequence>
<xsd:element name="true"/>
<xsd:element name="fred" type="xsd:string"/>
</xsd:sequence>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema> |
Ook kan je aan aan simpleContent nog attributen verbinden, maar ik denk dat dat je probleem niet oplost.
Er zijn dus drie oplossingen:
• Je taal aanpassen aan de beperkingen van de schema taal
• Een betere schema taal gebruiken (RELAX NG)
• Deze constraint niet vastleggen in een schema