XML Schema
Julius Becker
- xml-derivat
0 Rouven0 Thomas J.S.
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
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
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
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