2010-11-08 4 views
9

Ich glaube, das hat mit keyref zu tun, aber ich bin mir nicht sicher, und ich bin wirklich nicht sicher, dass es überhaupt getan werden kann.Einschränken von XML-Elementen basierend auf einem anderen Element über XSD

Zum Beispiel sagen, ich habe myElement1 und myElement2. Wenn in der XML-Datei kein myElement2 vorhanden ist, muss myElement1 vorhanden sein, andernfalls ist es optional.

Gibt es eine Möglichkeit, diese Art der Validierung in meiner XSD-Datei zu erzwingen?

(a:

+1

Ich bin ziemlich sicher, dass die Antwort nicht wegen Mehrdeutigkeit ist: Das Schema für den Container solcher Elemente würde zwei verschiedene Definitionen haben. Die einzige Lösung besteht darin, das Element "optional/erforderlich" als optional zu deklarieren und eine zweite Phasenvalidierung zu verwenden. –

Antwort

23

Ähnliche Fragen wurden bereits mehrfach .. in Stackoverflow oder jede Tech-Blogs ..

aber die Antwort ist immer nicht möglich,


Fällen wie gefragt) Validierendes Element abhängig vom Wert oder Vorhandensein eines anderen Elements/Attributs
(b) Validierungswert eines Elements abhängig vom Wert oder Vorhandensein eines anderen Elements/Attributs
(c) Attribut abhängig von dem Wert oder in Gegenwart eines anderen Elements/attribute Validieren
(d) Elemente/Attribute gleichen Namens
verschiedenen Typen/Datatypes unter den gleichen Umfang aufweist definieren (e) auf der Basis untergeordneten Elemente Validieren der Wert oder Vorhandensein anderer Elemente/Attribute

alle oben genannten Fälle nicht möglich zu erreichen ..

aber wenn Sie etwas Transformation Sache umsetzen können .. dann können Sie Hilfe bekommen. was ich meine zu sagen ist "zuerst durch Transformation und ändern Sie die XML nach Ihrer Anforderung,

Beispiel :: Wenn das bestimmte Feld mit einem gewissen Wert erwartet .. übergeben Sie das XML, wie es ist, wenn die Bedingung erfüllt ist und nicht übergeben, wenn es nicht .. im nächsten Block XSD wird validieren und offensichtlich Fehler aus :) können Sie herausfinden, dass es Ihre benutzerdefinierte Validierung fehlt ..

sowieso die Absicht ist es Block oder Pass die Xml nach den Daten .. und das ist, was Sie tun ..

Hinweis: Schematron wurde kürzlich in die Praxis umgesetzt! Hier ist das Tutorial: http://zvon.org/xxl/SchematronTutorial/General/contents.html

+0

Danke für die Info! Ich habe vor dem Posten gesucht, konnte aber keine Antwort finden. Im Grunde habe ich festgestellt, dass es unmöglich ist, nur mit Validierung und Schema zu tun. – hmcclungiii

+0

@hmcclungiii, yup das ist der Punkt :) –

+1

Dies ist eine einigermaßen, aber nicht völlig genaue Umschreibung der Situation in XSD 1.0: Fälle (a), (b), (e) und (f) sind manchmal möglich, abhängig von die Details der gewünschten Einschränkung. Und in XSD 1.1 machen die Conditional-Type- und Assertion-Features einen etwas größeren Bereich von Constraints ausdrucksbar. –

1

Was würde ich vorschlagen, ist XSD für jede Fälle erstellen wie unten definiert:

Fälle wie:

  1. Validieren Element je nach Wert oder das Vorhandensein eines anderen Elements/Attribut.
  2. Validieren eines Wertes eines Elements abhängig vom Wert oder Vorhandensein eines anderen Elements/Attributs.
  3. Validierungsattribut in Abhängigkeit vom Wert oder Vorhandensein eines anderen Elements/Attributs.
  4. Das Ignorieren (zufälliger) Elemente/Attribute aus der Validierung ist nicht erlaubt. (Ich meine zu sagen ist die Verwendung von hat Einschränkungen.)
  5. Elemente/Attribute desselben Namens mit unterschiedlichen DataTypes.
  6. Validieren von untergeordneten Elementen auf der Grundlage von Wert oder Vorhandensein anderer Elemente/Attribute.

Und erstellen Sie dort eigene XML dafür.

Verwandte Themen