<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="localhorst" xmlns:local="localhorst">
<xsd:element name="Personen">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Person" maxOccurs="unbounded">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Name" type="xsd:string"/>
<xsd:choice>
<xsd:element name="Vorname" type="xsd:string"/>
<xsd:element name="Vornamen">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Vorname" type="xsd:string"
maxOccurs="unbounded" minOccurs="1"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:choice>
<xsd:element name="Geburtstag" type="xsd:date"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
Vielen Dank
lars
> wie stelle ich es an, dass eine Mischung aus "<xsd:element ...>...</
> xsd:element>" und "<xsd:choice ...>...</xsd:choice>" in beliebiger
> Reihenfolge möglich sein soll.
> Konkret soll in folgendem Schema die Reihenfolge der Kindelemente
> (Name, (Vorname | Vornamen), Geburtstag) von Person beliebig sein:
Mit xsd:all ginge
<xsd:element name="Person" maxOccurs="unbounded">
<xsd:complexType>
<xsd:all>
<xsd:element name="Name" type="xsd:string"/>
<xsd:element name="Vornamen">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Vorname" type="xsd:string"
maxOccurs="unbounded" minOccurs="1"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="Geburtstag" type="xsd:date"/>
</xsd:all>
</xsd:complexType>
</xsd:element>
aber choice als Kind von all ist nicht erlaubt.
--
Martin Honnen
http://JavaScript.FAQTs.com/
> wie stelle ich es an, dass eine Mischung aus "<xsd:element ...>...</
> xsd:element>" und "<xsd:choice ...>...</xsd:choice>" in beliebiger
> Reihenfolge möglich sein soll.
Schau dir doch mal das Inhaltsmodell von "head" in
<http://www.w3.org/2002/08/xhtml/xhtml1-strict.xsd>; ich glaube, das
Problem liegt dort ganz ähnlich.
--
<http://schneegans.de/sv/> · Schema-Validator für XML
Das hilft mir in diesem Fall nicht weiter, da bei HEAD nur 2 Kinder
zur Wahl stehen (BASE und TITLE). Und zwei Elemente in eine beliebige
Reihenfolge zu bringen würde mir auch nicht schwer fallen ;)
zu Martins Vorschlag: Diese Lösung hatte ich vorher. Aber dann fand
ich es wenig intuitiv bei nur einem Vornamen den Tag VornameN zu
benutzen. Dadurch bin ich auf dieses Problem gestoßen.
>> Schau dir doch mal das Inhaltsmodell von "head" in
>> <http://www.w3.org/2002/08/xhtml/xhtml1-strict.xsd>; ich glaube, das
>> Problem liegt dort ganz ähnlich.
>
> Das hilft mir in diesem Fall nicht weiter, da bei HEAD nur 2 Kinder
> zur Wahl stehen (BASE und TITLE).
offenbar Du hast "head.misc" nicht expandiert. Natürlich gibt es dort
wesentlich mehr Kinder.
Hab ich schon, aber das Problem ist folgendes:
base und title können in beliebiger reihenfolge auftreten (jeweils
einmal) und dazwischen kann es beliebige head.misc Teile geben.
Allerdings nicht VOR base und title.
Ich denke, dass man XSD auf reguläre Ausdrücke abbilden kann und
andersrum (bijektiv). Und dann muss man jede erdenkliche Reihenfolge
explizit angeben. all stellt in diesem Kontext nur eine Vereinfachung/
Abkürzung dar.
> base und title können in beliebiger reihenfolge auftreten (jeweils
> einmal) und dazwischen kann es beliebige head.misc Teile geben.
> Allerdings nicht VOR base und title.
Natürlich auch vor base und title.
,----
| <xs:complexType>
| <xs:sequence>
| <xs:group ref="head.misc"/>
Davor
| <xs:choice>
| <xs:sequence>
| <xs:element ref="title"/>
| <xs:group ref="head.misc"/>
Dazwischen
| <xs:sequence minOccurs="0">
| <xs:element ref="base"/>
| <xs:group ref="head.misc"/>
Dahinter
| </xs:sequence>
| </xs:sequence>
| <xs:sequence>
| <xs:element ref="base"/>
| <xs:group ref="head.misc"/>
Dazwischen
| <xs:element ref="title"/>
| <xs:group ref="head.misc"/>
Dahinter
| </xs:sequence>
| </xs:choice>
| </xs:sequence>
| <xs:attributeGroup ref="i18n"/>
| <xs:attribute name="id" type="xs:ID"/>
| <xs:attribute name="profile" type="URI"/>
| </xs:complexType>
`----
mfg, simon .... hth