Einschränkung von Elementen basierend auf einem anderen Attribut mit XSD 1.1

Ich versuche zum erstellen einer schema-definition mittels XSD 1.1, in denen die Anzahl der Elemente ist abhängig von dem Attribut eines anderen Elementes.
E. g. Die Anzahl der BaPath Elemente BaPath hängt vom Wert des Attributs "service" von "Conn" - element.
Die xsd ich geschrieben habe, ist

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">

    <xsd:element name="Mapping">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element ref="Link" minOccurs="0" maxOccurs="unbounded" />
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>

    <xsd:element name="Env">
        <xsd:complexType>
            <xsd:attribute name="name" use="required">
                <xsd:simpleType>
                    <xsd:restriction base="xsd:string">
                        <xsd:enumeration value="UTEST" />
                        <xsd:enumeration value="TEST" />
                    </xsd:restriction>
                </xsd:simpleType>
            </xsd:attribute>
        </xsd:complexType>
    </xsd:element>

    <xsd:element name="Link">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element ref="Conn" maxOccurs="unbounded" />
            </xsd:sequence>
            <xsd:attribute name="service" use="required">
                <xsd:simpleType>
                    <xsd:restriction base="xsd:string">
                        <xsd:enumeration value="FILESNF" />
                        <xsd:enumeration value="MSGSNF" />
                        <xsd:enumeration value="MSGRT" />
                        <xsd:enumeration value="FILERT" />
                    </xsd:restriction>
                </xsd:simpleType>
            </xsd:attribute>
        </xsd:complexType>
    </xsd:element>

    <xsd:element name="Conn">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element ref="BaPath" maxOccurs="unbounded" />
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>

    <xsd:element name="BaPath">
        <xsd:complexType>
            <xsd:attribute name="flow" use="required">
                <xsd:simpleType>
                    <xsd:restriction base="xsd:string">
                        <xsd:assertion test="@service eq 'MSGRT'">
                            <xsd:enumeration value="TRS" />
                            <xsd:enumeration value="ZTRS" />
                        </xsd:assertion>
                    </xsd:restriction>
                </xsd:simpleType>
            </xsd:attribute>
        </xsd:complexType>
    </xsd:element>

    <xsd:element name="Dep">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element ref="Env" maxOccurs="unbounded" />
                <xsd:element ref="Mapping" />
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>

    <xsd:complexType name="CfgType">
        <xsd:sequence>
            <xsd:element ref="Dep" />
        </xsd:sequence>
    </xsd:complexType>

    <xsd:element name="Cfg" type="CfgType"></xsd:element>

</xsd:schema>
</Cfg>

zum Beispiel, wenn Conn-element hat ein Attribut service eq 'MSGRT' es muss 2 BaPath Elemente mit Attributen Klinken-und ZTRS

<Cfg xmlns="http://www.alpha.com/beta">
  <Dep>
    <Env name="UTEST"/>
    <Mapping>
      <Link t2s_service="MSGRT">
        <Conn>
          <BaPath flow="ZTRS"/>
          <BaPath flow="TRS"/>
        </Conn>
      </Link>
    </Mapping>
  </Dep>

wenn service eq 'FILESNF' von Conn es müssen 3 BaPath Elemente mit Attributen FTS, ZFTS und MSSDN

Ich versuchte verschiedene Lösungen, aber keine scheint zu funktionieren. Ist es möglich, dieses problem zu lösen, die mit der Geltendmachung von xsd 1.1?

InformationsquelleAutor maraz | 2014-08-01
Schreibe einen Kommentar