[XML Schema] Hilfe bei komplizierter Definition
Heizer
- xml
Liebes Forum
Ich würde gerne eine etwas kompliziertere Definition mit XML Schema beschreiben:
Ich habe ein Element <Beschreibung>, das innerhalb eines Elements <Info> vorkommt. Nun soll es entweder einmal vorkommen oder mehrmal. Kommt es mehrmals vor, so muß es das Attribut xml:lang tragen. Kommt es einmal vor, darf es dieses Attribut nicht tragen.
<Info>
<Beschreibung/>
</Info>
oder
<Info>
<Beschreibung xml:lang="de"/>
<Beschreibung xml:lang="en"/>
</Info>
Angeblich soll man mit XML Schema doch alles definieren können, aber ich komm nicht darauf.
Danke und Grüße
Heizer
Hello out there!
Ich habe ein Element <Beschreibung>, das innerhalb eines Elements <Info> vorkommt. Nun soll es entweder einmal vorkommen oder mehrmal. Kommt es mehrmals vor, so muß es das Attribut xml:lang tragen. Kommt es einmal vor, darf es dieses Attribut nicht tragen.
Das halte ich für nicht sinnvoll. 'xml:lang' ist dafür gedacht, die Sprache des Inhalts anzugeben. Auch wenn die Beschreibung nur in einer Sprache vorliegt, sollte diese damit angegeben werden können.
Du brauchst ein Attribut für eine Fallunterscheidung? Dann nimm ein eigenes: 'version' o.ä., nicht aber 'xml:lang' missbrauchen.
Ich denke aber, du brauchst das vielleicht gar nicht. Die Auswertung der Daten ist Sache der auswertenden Software; warum also Programmlogik in die Daten (XML) stecken?
See ya up the road,
Gunnar
PS: Mit dem Schema kann ich dir leider nicht dienen.
Hallo,
Ich würde gerne eine etwas kompliziertere Definition mit XML Schema beschreiben:
Ich habe ein Element <Beschreibung>, das innerhalb eines Elements <Info> vorkommt. Nun soll es entweder einmal vorkommen oder mehrmal. Kommt es mehrmals vor, so muß es das Attribut xml:lang tragen. Kommt es einmal vor, darf es dieses Attribut nicht tragen.
<Info>
<Beschreibung/>
</Info>oder
<Info>
<Beschreibung xml:lang="de"/>
<Beschreibung xml:lang="en"/>
</Info>Angeblich soll man mit XML Schema doch alles definieren können, aber ich komm nicht darauf.
Angeblich.
Was du möchtest geht nicht, denn hier kommen dir gleich zwe Regel in die Quere.
Ersten die Regel der konsinstenten Deklaration (was die Auswahl zwischen Elementen gleichen Names aber verschiedenen Typs verbietet) und zweitens die UPA-Regel, was die eindeutige Partikelzuornung verlangt (d.h. keine mehrdeutige (nicht deterministische) Inhaltsmodelle)
Warum?
Du möchtest so etwas:
<xs:element name="Info">
xs:complexType
xs:choice
<xs:element name="Beschreibung" />
xs:sequence
<xs:element name="Beschreibung" maxOccurs="unbounded" />
</xs:sequence>
</xs:choice>
</xs:complexType>
</xs:element>
(ich lasse hier das zweite Beschr.-Element unausformuliert)
Hier kann der Schema-Prozessor nicht wissen (ohne vorauszuschauen) in welchem Zweig er sich befindet, wenn er auf dem Element mit dem Namen "Beschreibung" trifft.
Damit verbunden ist auch gleich das Problem mit der ersten Regel: du willst zwei Beschreibung-Elemente mit verschiedenen Inhalstmodellen (was an sich noch nicht gänzlich unmöglich ist, da die Regel unter Umständen umgegangen werden kann (trotzdem bleibt in deinem Fall noch die UPA-Regel)).
Was ich dir vorschlagen kann ist, dass du das Attribut als required definierst und als default-Wert "de" einträgst.
Grüße
Thomas
Hi
Was du möchtest geht nicht, denn hier kommen dir gleich zwe Regel in die Quere.
Ok, das verstehe ich. Danke.
Was ich mich jetzt frage ist:
In XML Schema kann ich ja einfach eine etwas allgemeinere Beschreibung schreiben. Aber ließe sich eine solche Regel (rein interessehalber) den mit z.B. Schematron verwirklichen? Ich habe mich damit noch nicht beschäftigt. Lohnt sich das?
Grüße
Heizer
Hallo,
Was ich mich jetzt frage ist:
In XML Schema kann ich ja einfach eine etwas allgemeinere Beschreibung schreiben. Aber ließe sich eine solche Regel (rein interessehalber) den mit z.B. Schematron verwirklichen? Ich habe mich damit noch nicht beschäftigt. Lohnt sich das?
Ja, Schema-Sprachen wie RELAX NG oder Schematron lassen auch nicht-deterministische Inhaltsmodelle zu.
In RELAX NG würde das so aussehen:
<element name="Info">
<choice>
<element name="Beschreibung">
<text />
</element>
<oneOrMore>
<element name="Beschreibung">
<attribute name="xml:lang" />
<text />
</element>
</oneOrMore>
</choice>
</element>
Grüße
Thomas