Julius Becker: XML Schema

Hallo miteinander,

wie überrede ich XML Schema dazu, dass im Element s neben den Elementen alt.gr, w und tilde auch normaler Text mehrmals enthalten sein kann, ohne dass dabei eine spezielle Reihenfolge beachtet werden muss?

In DTD hätte ich das so formuliert:
<!ELEMENT s (#PCDATA | alt.gr | w | tilde)+>
Es wäre somit auch die Reihenfolge #PCDATA-tilde-w-#PCDATA möglich.

Doch wie mache ich das bei XML Schema? Mein Ansatz sieht so aus:

<xsd:element name="s">
   xsd:complexType
      xsd:sequence
         <xsd:element ref="w" minOccurs="0" maxOccurs="unbounded"/>
         <xsd:element ref="alt.gr" minOccurs="0" maxOccurs="unbounded"/>
         <xsd:element ref="tilde" minOccurs="0" maxOccurs="unbounded"/>
      </xsd:sequence>
   </xsd:complexType>
</xsd:element>

Hier fehlt allerdings noch die Legitimierung für den normalen Text. Zudem müsste laut http://www.edition-w3c.de/TR/2001/REC-xmlschema-0-20010502/ die Reihenfolge der Elemente in xsd:sequences exakt eingehalten werden.

Komischerweise gelang es mir mit meinem Ansatz und einem Validator (http://tools.decisionsoft.com/schemaValidate.html), eine Datei, in der das Element s neben normalen Text auch die Elemente in nicht oben vorgegebener Reihenfolge nutzt, erfolgreich zu validieren.

Das verwirrt mich jetzt alles...
Es freute mich, wenn mir einer von euch auf die Sprünge helfen könnte.

Grüße
Julius

  1. Hi

    <xsd:element name="s">
       xsd:complexType
          xsd:sequence
             <xsd:element ref="w" minOccurs="0" maxOccurs="unbounded"/>
             <xsd:element ref="alt.gr" minOccurs="0" maxOccurs="unbounded"/>
             <xsd:element ref="tilde" minOccurs="0" maxOccurs="unbounded"/>
          </xsd:sequence>
       </xsd:complexType>
    </xsd:element>

    Siehe http://www.w3schools.com/schema/schema_complex_mixed.asp.
    Zunächst erlaubst du dem complexType aus gemischtem Inhalt zu bestehen
    <xsd:complexType mixed="true">

    Bei der anderen Sache bin ich nicht ganz sicher, ich würde sequence austauschen durch all zusammen mit max/minOccurs. http://www.w3schools.com/schema/el_all.asp

    Good luck!

    MfG
    Rouven

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

      vielen Dank für deine Antwort!

      Bei der anderen Sache bin ich nicht ganz sicher, ich würde sequence austauschen durch all zusammen mit max/minOccurs. http://www.w3schools.com/schema/el_all.asp

      Wenn ich die Seite richtig verstanden habe, kann man zwar erreichen, dass w, alt.gr und tilde zwar gemischt vorkommen können, aber dennoch nur ein Mal. Das ist momentan noch der Knackpunkt

      Grüße
      Julius

  2. Hallo,

    wie überrede ich XML Schema dazu, dass im Element s neben den Elementen alt.gr, w und tilde auch normaler Text mehrmals enthalten sein kann, ohne dass dabei eine spezielle Reihenfolge beachtet werden muss?

    In DTD hätte ich das so formuliert:
    <!ELEMENT s (#PCDATA | alt.gr | w | tilde)+>
    Es wäre somit auch die Reihenfolge #PCDATA-tilde-w-#PCDATA möglich.

    Eine Abfolge in der PCDATA vorkommt ist in einer DTD nicht möglich.
    Du hättest es nur so formulieren können:
    <!ELEMENT s (#PCDATA | alt.gr | w | tilde)*>

    Doch wie mache ich das bei XML Schema?

    <xsd:element name="s">
       <xsd:complexType mixed="true">
          <xsd:choice minOccurs="0" maxOccurs="unbounded">
             <xsd:element ref="w" />
             <xsd:element ref="alt.gr" />
             <xsd:element ref="tilde" />
          </xsd:choice>
       </xsd:complexType>
    </xsd:element>

    Hier fehlt allerdings noch die Legitimierung für den normalen Text. Zudem müsste laut http://www.edition-w3c.de/TR/2001/REC-xmlschema-0-20010502/ die Reihenfolge der Elemente in xsd:sequences exakt eingehalten werden.

    Deshalb kannst du xs:choice nehmen.

    Grüße
    Thomas

    --
    Surftip: kennen Sie schon Pipolino's Clowntheater?
    http://www.clowntheater-pipolino.net/