Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

XML Schema beliebige Reihenfolge von choice

35 views
Skip to first unread message

lars

unread,
Feb 9, 2008, 6:21:01 AM2/9/08
to
Hallo,
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:

<?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

Martin Honnen

unread,
Feb 9, 2008, 1:15:23 PM2/9/08
to
lars wrote:

> 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/

Christoph Schneegans

unread,
Feb 9, 2008, 6:22:05 PM2/9/08
to
"lars" schrieb:

> 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

lars

unread,
Feb 11, 2008, 2:26:24 PM2/11/08
to
On 10 Feb., 00:22, "Christoph Schneegans" <Christ...@Schneegans.de>
wrote:

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.

Christoph Schneegans

unread,
Feb 12, 2008, 3:41:38 AM2/12/08
to
"lars" schrieb:

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

lars

unread,
Feb 13, 2008, 2:16:07 PM2/13/08
to
On 12 Feb., 09:41, "Christoph Schneegans" <Christ...@Schneegans.de>
wrote:

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.

Simon Krahnke

unread,
Feb 13, 2008, 3:46:59 PM2/13/08
to
* lars <derlarss...@googlemail.com> (20:16) schrieb:

> 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

0 new messages