XSD: Attribut darf nur bei einem Element in einer Sequenz gesetzt sein

22/06/2008 - 13:10 von Jens Duttke | Report spam
Hallo,

ich baue mir gerade ein XML Schema zur Validierung meiner XML-Dateien, und
habe dabei ein Problem, zudem ich nirgends eine Losung finden kann.

Zuerst einmal ein vereinfachtes XML-Beispiel, um das Problem nachvollziehen
zu konnen:

<translations>
<languages>
<language id="de" name="Deutsch" />
<language id="en" name="Englisch" default="true" />
<language id="es" name="Spanish" />
</languages>

<texts>
<text id="Erster_Text">
<translation>Englische Ubersetzung</translation>
<translation lang="de">Deutsche Ubersetzung</translation>
<translation lang="es">Spanische Ubersetzung</translation>
</text>
<text id="Fehlerhafter_Text">
<translation>Englische Ubersetzung</translation>
<translation lang="en">Noch eine Englische Ubersetzung</translation>
<translation lang="de">Deutsche Ubersetzung</translation>
<translation lang="es">Spanische Ubersetzung</translation>
</text>
</texts>
</translation>

Dabei gilt:
- pro translations/languages, darf jede Sprache (id-Attribut) nur 1x
vorkommen.
- pro translations/texts/text, darf jede Sprache (lang-Attribut) nur 1x
vorkommen.
- im lang-Attribut in translations/texts/text/translation sind nur Werte
gultig, die auch in translations/languages festgelegt sind

Soweit die Regeln, die ich bisher schon implementiert habe.
Nun mochte ich aber noch folgende Festlegungen treffen, finde aber einfach
keine Losung dafur:

1. in translations/languages/language darf nur ein Element das Attribut
default mit dem Wert "true" haben.

2. wenn bei translations/languages/texts/text/translation kein lang-Attribut
angegeben wurde, wird davon ausgegangen, dass es sich bei der Ubersetzung um
die Sprache handelt, bei der das default-Attribut auf "true" gesetzt wurde.
Dadurch ware der Text mit der id "Fehlerhafter_Text" ungultig, weil 2
englische Ubersetzungen nicht moglich sind, und demzufolge musste beim
validieren ein Fehler ausgelost werden.

Wei? zufallig jemand eine Losung fur beide oder zumindest fur eines der
beiden Probleme?
Ist das mit XSD machbar?

Viele Gru?e,
Jens
 

Lesen sie die antworten

#1 Martin Honnen
22/06/2008 - 14:11 | Warnen spam
Jens Duttke wrote:

Soweit die Regeln, die ich bisher schon implementiert habe.
Nun mochte ich aber noch folgende Festlegungen treffen, finde aber einfach
keine Losung dafur:

1. in translations/languages/language darf nur ein Element das Attribut
default mit dem Wert "true" haben.

2. wenn bei translations/languages/texts/text/translation kein lang-Attribut
angegeben wurde, wird davon ausgegangen, dass es sich bei der Ubersetzung um
die Sprache handelt, bei der das default-Attribut auf "true" gesetzt wurde.
Dadurch ware der Text mit der id "Fehlerhafter_Text" ungultig, weil 2
englische Ubersetzungen nicht moglich sind, und demzufolge musste beim
validieren ein Fehler ausgelost werden.

Wei? zufallig jemand eine Losung fur beide oder zumindest fur eines der
beiden Probleme?
Ist das mit XSD machbar?



Meines Wissens nicht. Eventuell kann man das mit Schematron lösen.



Martin Honnen MVP XML
http://JavaScript.FAQTs.com/

Ähnliche fragen