2012-06-20 1 views
5

Ich definiere eine simpleType, die eine restriction hat, um entweder ein Wert von enumeration oder ein Wert zu sein, der mit pattern übereinstimmt. Ich merke, dass ich alles von der pattern tun kann, aber ich möchte die Auswahlliste, die die enumeration bietet.Wie definieren Sie eine Schemaeinschränkung, die einen Aufzählungswert oder eine Musterübereinstimmung zulässt?

Dies ist, was ich zu tun, um in der Lage zu erwarten:

<xs:simpleType name="both"> 
    <xs:restriction base="xs:string"> 
    <xs:enumeration value="one" /> 
    <xs:enumeration value="two" /> 
    <xs:pattern value="[0..9]+" /> 
    </xs:restriction> 
<xs:simpleType> 

Aber das fehlschlägt, da ein Wert nicht beiden Einschränkungen mithalten kann. Wenn ich das Muster modifiziere, um irgendeinen aufgezählten Wert zu erlauben, wird es scheitern, wenn es nur dem Muster entspricht.

Antwort

8

Stellt sich heraus, ich brauche eine union. Definieren Sie den Aufzählungstyp als separater Typ:

<xs:simpleType name="enumeration"> 
    <xs:restriction base="xs:string"> 
    <xs:enumeration value="one" /> 
    <xs:enumeration value="two" /> 

    </xs:restriction> 
<xs:simpleType> 

dann den Zieltyp als eine Aufzählung erstellen:

<xs:simpleType name="both"> 
    <xs:union memberTypes="enumeration"> 
    <xs:simpleType> 
     <xs:restriction base="xs:string"> 
     <xs:pattern value="[0..9]+" /> 
     </xs:restriction> 
    </xs:simpleType> 
    </xs:union> 
</xs:simpleType> 

So jetzt habe ich auf die Auswahlliste zu bekommen, oder mit dem Muster übereinstimmen. Genau das, was ich wollte!

Update: Kann eigentlich beide einfache Typen als Kinder der union oder über die memberTypes Attribut definieren.

+0

Danke für den Tipp! Ich würde erwähnen, dass es auch mit beiden '' Elementen funktioniert, die in der '' aufgelistet sind. Übrigens sollten Sie die Antwort (auch Ihre eigene) als akzeptiert markieren, um klarzustellen, dass es die richtige Lösung ist. – Melebius

Verwandte Themen