Ich habe 3 Arten von XML-Blöcken, die keinen "Filter" -Block enthalten, oder "Filter" mit "Ungültigkeitserklärung", deren erster Wert entweder "fixed1" oder "fixed2" ist; wenn "fixed1": nichts anderes, wenn "fixed2", diese Sequenz A1, A2, A3 (siehe unten):XSD: Wie validiere ich dieses XML, wobei die Folgen vom Wert des ersten abhängen?
<filter>
<invalidation>fixed1</invalidation>
</filter>
<filter>
<invalidation>fixed2</invalidation>
<A1>string...</A1>
<A2>string...</A2>
<A2>string...</A3>
</filter>
Wie dies bestätigen? Ich habe das Gefühl, dass es eine Lösung mit xs: choice gibt, aber ich konnte sie nicht finden.
Die einzige (schlecht) Lösung, die ich gefunden ist:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
...
<xs:simpleType name="invalidation">
<xs:restriction base="xs:string">
<xs:pattern value="fixed1|fixed2"/>
</xs:restriction>
</xs:simpleType>
...
<xs:element name="filter" minOccurs="0">
<xs:complexType>
<xs:all>
<xs:element name="invalidation" type="invalidation"/>
<xs:element name="A1" type="xs:string" minOccurs="0"/>
<xs:element name="A2" type="xs:string" minOccurs="0"/>
<xs:element name="A3" type="xs:string" minOccurs="0"/>
</xs:all>
</xs:complexType>
</xs:element>
versuchen Sie es mit einem ' 'siehe: http://stackoverflow.com/questions/24774554/xsd-1-1-xsalternative-xssert –
@ Jérôme, xs: Alternative funktioniert nur, wenn die Auswahl von Ein Typ basiert auf Attributwerten und kann nicht auf dem Wert des ersten Elements basieren. –