Element im Schema abhängig von anderen Elementen definieren
mbauer
- xml
Hallo,
ich möchte folgende Restriktion in ein Schema einbauen:
element A darf nicht leer sein, wenn element B nicht leer ist
Beide Elemente hängen in dem selben type.
So etwas muss es doch geben. Meine Suche war bislang erfolglos. Mir fehlt da vermutlich das richtige Passwort.
Gruß,
mbauer
Hi,
So etwas muss es doch geben. Meine Suche war bislang erfolglos. Mir fehlt da vermutlich das richtige Passwort.
Du hast nicht gesagt was genau dein Problem ist, falls du nicht weißt wie du prüfst ob ein Element leer ist hilt dir vielleicht das hier aus dem Archiv?
Ansonsten hab ich dich falsch verstanden :)
grüße
Du hast nicht gesagt was genau dein Problem ist, »»
Ok. 2. Anlauf :-)
element A darf nicht leer sein, wenn element B nicht leer ist
Mein Problem ist die Abhängigkein zwischen diesen beiden Elementen. Was muss ich in xs:restriction des element B eintragen, damit die Validierung nur die XMLs für gültig erklärt, bei denen die o.g. Bedingung erfüllt ist.
Beispiel: Wer A sagt, muss auch B sagen!
Die Restriktion in element B muss irgendwie erweitert werden. Wie?
<xs:element name="AAA">
xs:annotation
<xs:documentation xml:lang="DE">
Wer A sagt...
</xs:documentation>
</xs:annotation>
xs:simpleType
<xs:restriction base="xs:string">
<xs:minLength value="1"/>
<xs:maxLength value="40"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="BBB">
xs:annotation
<xs:documentation xml:lang="DE">
...muss auch B sagen!
</xs:documentation>
</xs:annotation>
xs:simpleType
<xs:restriction base="xs:string">
<xs:minLength value="0"/>
<xs:maxLength value="40"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
Noch etwas zum Hintergrund:
Ich prüfe XMLs gegen mein Schema. Eine XML soll nur dann gültig sein, wenn entweder beide Elemente dieser XML nicht leer oder beide leer sind.
Eine gültige XML wäre demnach:
<?xml version="1.0" encoding="iso-8859-1" ?>
<ROOTY>
<AAA>nicht_leer</AAA>
<BBB>auch_nicht_leer</BBB>
</ROOTY>
Das soll auch gehen:
<?xml version="1.0" encoding="iso-8859-1" ?>
<ROOTY>
<AAA></AAA>
<BBB></BBB>
</ROOTY>
Das darf nicht akzeptiert werden!
<?xml version="1.0" encoding="iso-8859-1" ?>
<ROOTY>
<AAA>nicht_leer</AAA>
<BBB></BBB>
</ROOTY>
Das auch nicht!
<?xml version="1.0" encoding="iso-8859-1" ?>
<ROOTY>
<AAA>nicht_leer</AAA>
</ROOTY>
Gruß,
mbauer
Noch ein Nachtrag :-)
Das sollte aber möglich sein:
<?xml version="1.0" encoding="iso-8859-1" ?>
<ROOTY>
<AAA></AAA>
<BBB>nicht_leer</BBB>
</ROOTY>
Wie auch immer. Geht so etwas überhaupt?
Kann ich sagen: Schau im Element xy UND im Element yz nach und entscheide!
Ich will das Ganze dem Schema übelassen und nicht im Code irgendeines Programms validieren. Ausserdem muss die Partei, die die XML generiert übeprüfen können, ob die XML valide ist.
Gruß
mbauer