2010-11-24 5 views
4

Ich bin ein XSD-Schema für die Validierung von einigen Erstellen von XMLXML-Schema, dass die Restriktion Enumerationswerts überprüfen occrus nur einmal

Ich möchte die xml beschränken, so dass es das gleiche Element zur Eingabe nicht posible ist doppelt:

<branches> 
    <branche>Bank</branche> 
    <branche>Bank</branche> 
</branches> 

Aber es muss sein posible 2 verschiedene Produkte zu verwenden:

<branches> 
    <branche>Bank</branche> 
    <branche>Insurance</branche> 
</branches> 

So habe ich den folgenden Code:

<!-- definition of simple elements --> 
    <xs:simpleType name="branche"> 
     <xs:restriction base="xs:string"> 
      <xs:enumeration value="Bank" maxOccurs="1"/> 
      <xs:enumeration value="Insurance" maxOccurs="1"/> 
     </xs:restriction> 
    </xs:simpleType> 

    <xs:element name="branches" minOccurs="0"> <!-- minOccurs becouse i want it to be posible to leave out the whole <branches> tag --> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element name="branche" type="branche" minOccurs="0" maxOccurs="2" /> 
      </xs:sequence> 
     </xs:complexType> 
    </xs:element> 

Die Verwendung der maxOccurs="1" beschränkt es nicht auf nur einen Wert, da das 'branche' -Tag zweimal vorkommen kann.

Ich möchte den Wert (<branche>value</branche>) eindeutig sein.

thnx!

Antwort

4

Siehe Beispiele zu Identitätsbeschränkungen here. Etwas wie:

<xs:element name="branches" ...> 
    <xs:unique name="..."> 
    <xs:selector xpath="branche"/> 
    <xs:field xpath="."/> 
    </xs:key> 
</xs:element> 

Nicht ganz sicher über die Syntax, aber Sie bekommen die Idee.

+0

ich die Grundidee, aber es funktioniert nicht. Ich denke, 'Selektor' ist falsch, und Zweige müssen ein komplexes sein, weil es untergeordnete Elemente hat. Ich versuche immer noch, das zu beheben. Sie auf dem Laufenden halten – FLY

3

es behoben, durch den folgenden Code:

<xs:element name="branches" minOccurs="0"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element name="branche" type="branche" minOccurs="0" maxOccurs="2" /> 
     </xs:sequence> 
    </xs:complexType> 
    <xs:unique name="brancheUnique"> 
     <xs:selector xpath="branche"/> 
     <xs:field xpath="."/> 
    </xs:unique> 
</xs:element> 

thnx lexicore für mich in die richtige Richtung