Baumstrukturen in XML validieren

  • Ich versuche schon den ganzen Nachmittag ein XML Schema zu schreiben, dass mir folgende Datei validiert:

     <keyelement id=3 />
     <keyelement id=4 />

    <or>
    <and>
    <value>
    <keyelement><id>4</id></keyelement>
      </value>
    <not>
    <value>
    <keyelement><id>3</id></keyelement>
    </value>
    </and>
    <value>
    <keyelement><id>33333333</id></keyelement>
      </value>
    </or>

     zur zeit sieht das schema etwa so aus:

    <xs:schema>
    <xs:element name="root">
    <xs:complexType>
    <xs:sequence>
    <xs:element name="keyelement" type="keyelement" maxOccurs="unbounded" />
    <xs:group ref="LogicNode" />
    </xs:sequence>
    </xs:complexType>
    <xs:key name="keyelementId">
    <xs:selector xpath=".//tns:keyelement" />
    <xs:field xpath="@id" />
    </xs:key>
    <xs:keyref name="keyelementref" refer="keyelementId">
    <xs:selector xpath=".//tns:Value" />
    <xs:field xpath="tns:id" />
    </xs:keyref>
    </xs:element>

    <xs:complexType name="ValueNode">
    <xs:sequence>
    <xs:element name="id" type="xs:integer" />
    </xs:sequence>
    </xs:complexType>
    <xs:complexType name="AndNode">
    <xs:sequence>
    <xs:group ref="LogicNode" />
    <xs:group ref="LogicNode" />
    </xs:sequence>
    </xs:complexType>
    <xs:complexType name="OrNode">
    <xs:sequence>
    <xs:group ref="LogicNode" />
    <xs:group ref="LogicNode" />
    </xs:sequence>
    </xs:complexType>
    <xs:complexType name="NotNode">
    <xs:sequence>
    <xs:group ref="LogicNode" />
    <xs:group ref="LogicNode" />
    </xs:sequence>
    </xs:complexType>

    <xs:group name="LogicNode">
    <xs:choice>
    <xs:element name="And" type="tns:AndNode" />
    <xs:element name="Or" type="tns:OrNode" />
    <xs:element name="Not" type="tns:NotNode" />
    <xs:element name="Value" type="ValueNode"/>
    </xs:choice>
    </xs:group>
    </xs:schema>

     Das Problem ist, dass der key und keyref Elemente auf der selben ebene sein müssen. In dem Fall auf root ebene. Das schema ist schaft es nicht Fehler im xml-file zu erkennen.

    Ich hab mich schon im Netz darüber schlau gmemacht, dass key bzw. keyrefs in Hierarchischen (rekursiven) Strukturen probleme machen, hab aber nicht entdecken können wie man eine solche Beziehung am besten modelliert.




Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!