Ich versuche ein Schema zu entwickeln, das einige vorhandene XML-Dateien validiert, die ich geerbt habe. Ich möchte, dass das Schema so viel wie möglich von der Validierungsarbeit ausführt. Die Herausforderung besteht darin, dass Attribute und Elemente von den Werten anderer Attribute abhängig sind.Erstellen eines XML-Schemas mit Attributen und Elementen, die von anderen Attributen abhängig sind
Die echten Daten sind ziemlich abstrakt, also habe ich ein paar einfache Beispiele erstellt. Lassen Sie uns sagen, dass ich die folgenden XML-Dateien haben:
<?xml version="1.0" encoding="UTF-8"?>
<Creature type="human" nationality="British">
<Address>London</Address>
</Creature>
<?xml version="1.0" encoding="UTF-8"?>
<Creature type="animal" species="Tiger">
<Habitat>Jungle</Habitat>
</Creature>
Wenn die „Art“ der Kreatur ist „menschlich“, ich werde eine „Nationalität“ Attribut haben und eine „Adresse“ untergeordnetes Element. Wenn der "Typ" der Kreatur "Tier" ist, habe ich ein "Spezies" -Attribut und ein "Habitat" -Kindelement. Für die Zwecke dieses Beispiels wäre ein "Mensch" mit einer "Art" oder einem "Habitat" ungültig - ebenso wie ein "Tier" mit einer "Nationalität" oder "Adresse".
Wenn "Kreatur" nicht das Wurzelelement ist, könnte ich wahrscheinlich zwei verschiedene "Kreatur" -Wahlen unterhalb des Wurzelelements haben, aber ich sehe nicht, wie ich das schaffen kann, wenn "Kreatur" das Wurzelelement ist .
Gibt es überhaupt ein Schema für diese Dateien, die nur gültigen Dokumenten entsprechen würden? Wenn ja, wie würde ich darüber gehen?
Vielen Dank für die sehr präzise Antwort und das hervorragende Beispiel in Ihrer Lösung. Sie haben mir gerade Stunden der Internetsuche erspart –
Großartiges Beispiel! Könnten Sie bitte erklären, warum 'xsi: type' funktioniert, während 'type' nicht in den XML-Dateien enthalten ist? – Praetorian
Ausgezeichnetes Paradigma! Aber in meiner XML-Level-Spezifikation * möchte ich die Spezifikation angeben, und nicht XML-Schema (ich bevorzuge "Typ" und nicht "xsi: type"). Also, ist das eine XML-Schema-Schwäche? – Chameleon