verenice: XML / Schema

Hallo,
ich würde gern wissen, ob man bei einem XML-File eine Struktur so bauen kann, dass das folgende möglich ist:

XML-File-Beispiel:
<Struktur>
 <Kapitel id="4" />
 <Text id="5" />
 <Bild id="34" />

<Kapitel id="7" />
 <Bild id="37" />
 <Bild id="22" />
 <Text id="30" />
</Struktur>

Wenn man im XML-Schema unter dem Knoten Struktur die Elemente Kapitel, Text und Bild alle auf die gleiche Ebene legt, dann ist die Reihenfolge der Elemente festgelegt.
Daher wird dann im XML-File erwartet, dass erst der Tag Kapitel, dann der Tag Text und dann der Tag Bild unter dem Knoten Struktur folgt.
Allerdings würde ich gern die Tags flexibel im XML-File benutzen, also, auch an einer anderen Stelle, z.B.: erst Kapitel, dann Bild und dann Text.
Geht das?

Vielen lieben Dank im voraus.

Viele Grüße
verenice

  1. Hi,

    also das Ding bringt mich ans Grübeln. Auf gut Deutsch: Da ist _keine_ Struktur dahinter, oder?
    Es wird lediglich gefordert, dass die Elemente Kapitel, Text oder Bild sind, aber keinelei Reihenfolge, Auftrittshäufigkeit, alle vorhanden oder sonstwas?
    In dem Fall wäre glaube ich ein WildCard-Element angebracht:
    <xs:any namespace="##targetNamespace" maxOccurs="unbounded"/>
    --> Erfordert ein Element aus dem aktuellen Namensraum in beliebiger Häufigkeit.
    Was man damit allerdings noch nicht schafft ist die Festlegung auf eines der 3 Elemente Kapitel, Bild und Text, vielleicht hat da noch jemand eine andere Idee...

    MfG
    Rouven

    --
    -------------------
    ss:) zu:) ls:& fo:) de:< va:{ ch:? sh:) n4:( rl:? br:$ js:| ie:) fl:(
    1. Hallo ihr beiden,
      erstmal vielen vielen Dank für eure Posts!!!:o)
      Ich werde das jetzt erstmal so versuchen umzusetzten.
      Schönes WE.

      Viele Grüße
      verenice

      1. Hallo,
        es hat jetzt so funktioniet, wie ich es haben wollte.
        Ich habe allerdings sequence anstatt choice genommen.
        <xs:sequence minOccurs="0" maxOccurs="unbounded">

        Viele Grüße
        verenice

  2. Hallo,

    ich würde gern wissen, ob man bei einem XML-File eine Struktur so bauen kann, dass das folgende möglich ist:

    XML-File-Beispiel:
    <Struktur>
    <Kapitel id="4" />
    <Text id="5" />
    <Bild id="34" />

    <Kapitel id="7" />
    <Bild id="37" />
    <Bild id="22" />
    <Text id="30" />
    </Struktur>

    Ja.

    Wenn man im XML-Schema unter dem Knoten Struktur die Elemente Kapitel, Text und Bild alle auf die gleiche Ebene legt, dann ist die Reihenfolge der Elemente festgelegt.
    Daher wird dann im XML-File erwartet, dass erst der Tag Kapitel, dann der Tag Text und dann der Tag Bild unter dem Knoten Struktur folgt.
    Allerdings würde ich gern die Tags flexibel im XML-File benutzen, also, auch an einer anderen Stelle, z.B.: erst Kapitel, dann Bild und dann Text.
    Geht das?

    Ja, es geht, aber von Struktur kann man hier nicht sprechen. Wenn du vorhast das in XML wirklich so umzusetzen, bist du definitiv auf dem falschen Weg, der dir bei einer späteren Transformation nur Probleme bereiten wird.

    Umsetzen kannst du es z.B. so (beim Code gehe ich davon aus, dass du die referenzierten Elemente, an einer anderen Stelle im Schema definierst (definierst hast)):

    <xs:element name="Struktur">
     xs:complexType
      <xs:sequence maxOccurs="unbounded">
       <xs:element ref="kapitel" />
       <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element ref="text" />
        <xs:element ref="bild" />
       </xs:choice>
      </xs:sequence>
     </xs:complexType>
    </xs:element>

    Grüße
    Thomas

    1. Hi,

      <xs:element name="Struktur">
      xs:complexType
        <xs:sequence maxOccurs="unbounded">
         <xs:element ref="kapitel" />
         <xs:choice minOccurs="0" maxOccurs="unbounded">
          <xs:element ref="text" />
          <xs:element ref="bild" />
         </xs:choice>
        </xs:sequence>
      </xs:complexType>
      </xs:element>

      Das setzt aber voraus, dass <kapitel> immer vor den beiden anderen kommt, hoffe das ist vom OP so gewollt.

      MfG
      Rouven

      --
      -------------------
      ss:) zu:) ls:& fo:) de:< va:{ ch:? sh:) n4:( rl:? br:$ js:| ie:) fl:(
      1. Hallo,

        <xs:element name="Struktur">
        xs:complexType
          <xs:sequence maxOccurs="unbounded">
           <xs:element ref="kapitel" />
           <xs:choice minOccurs="0" maxOccurs="unbounded">
            <xs:element ref="text" />
            <xs:element ref="bild" />
           </xs:choice>
          </xs:sequence>
        </xs:complexType>
        </xs:element>
        Das setzt aber voraus, dass <kapitel> immer vor den beiden anderen kommt,

        Ja, das ist korrekt und davon ging ich aus. Falls nicht, kann sie <xs:sequence maxOccurs="unbounded"> rauslöschen und <xs:element ref="kapitel" /> in die xs:choice verfrachten

        Grüße
        Thomas

        1. Oh Mist, gerade merke ich, dass mir ein Fehler unterlaufen ist. Ich dachte, maxOccurs von choice wäre 1, stimmt nicht, das war bei all...
          Dann ist choice tatsächlich die beste Lösung.

          MfG
          Rouven

          --
          -------------------
          ss:) zu:) ls:& fo:) de:< va:{ ch:? sh:) n4:( rl:? br:$ js:| ie:) fl:(