mbauer: Element im Schema abhängig von anderen Elementen definieren

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

  1. 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

    1. 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>

    2. 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

      1. 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