ID/IDREF im Vergleich mit xs:key/xs:keyref

(Auszug aus "XML Schema" von Eric van der Vlist)

Wir haben die Vorzüge aufgezählt, die Schlüssel und Schlüsselverweise gegenüber ID und IDREF aufweisen: keine Beschränkung für Datentypen, Tests werden auf den Werten statt auf der lexikalischen Darstellung ausgeführt, und es gibt voneinander unabhängige Wertemengen für jeden Schlüssel. Um ein vollständiges Bild zu gewinnen, müssen wir prüfen, ob man ID und IDREF mit Schlüsseln und Schlüsselverweisen simulieren kann; mit anderen Worten, wir müssen bestimmen, welche Möglichkeiten von ID und IDREF bei Schlüsseln und Schlüsselverweisen fehlen.

Zunächst einmal muß der Ort der Definitionen für Schlüssel und Schlüsselverweise das Wurzelelement des Dokuments sein, um ID und IDREF zu simulieren, denn diese sind für das Dokument global, in welchem Dokumentelement sie auch stehen mögen. Die beste Strategie für W3C XML Schema, das den Wurzelknoten nicht unmittelbar festlegt, besteht darin, unsere Deklaration in demjenigen globalen Element unterzubringen, das wahrscheinlich als Dokumentenelement verwendet werden wird.

Um dann den xs:selector zu definieren, müssen wir innerhalb eines einzigen XPath-Ausdrucks die Liste aller Elemente angeben, die ID-Attribute enthalten.

Der letzte Unterschied besteht darin, daß ID die Definition einer durch Whitespace getrennten Liste von ID-Referenzen (mit Hilfe des Datentyps IDREFS) erlaubt, während es keine ähnliche Möglichkeit für xs:key gibt. (Es gibt kein xs:keyrefs!)

Um xs:key und xs:keyref zu verwenden, müssen wir daher das Instanzdokument, das wir auf der Seite über ID und IDREF verwendet haben, so abändern, daß die Liste der IDs, die auf die Buchfiguren verweist, zu einer Folge von Verweisen wird und daß dieselbe Konvention für IDs und Verweise in all unseren Elementen verwendet wird:

<library xsi:noNamespaceSchemaLocation="library-keys-id-key.xsd"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <book id="b3810518883">
        <isbn>
            3810518883
        </isbn>
        <title>
            Auf den Hund gekommen
        </title>
        <author-ref ref="au-Charles_M._Schulz"/>
        <character-ref ref="ch-Peppermint_Patty"/>
        <character-ref ref="ch-Snoopy"/>
        <character-ref ref="ch-Schroeder"/>
        <character-ref ref="ch-Lucy"/>
    </book>
    .../...
    <author id="au-Charles-M.-Schulz">
        <name>
            Charles M. Schulz
        </name>
        <nickName>
            SPARKY
        </nickName>
        <born>
            1922-11-26
        </born>
        <dead>
            2000-02-12
        </dead>
    </author>
    <cha
        <name>
            Peppermint Patty
        </name>
        <since>
            1966-08-22
        </since>
        <qualification>
            kühn, dreist und draufgängerisch
        </qualification>
    </character>
    ...
</library>

Die Definition folgt:

<xs:element name="library">
    <xs:complexType>
        .../...
    </xs:complexType>
    <xs:key name="ID">
        <xs:selector xpath="book|author|character"/>
        <xs:field xpath="@id"/>
    </xs:key>
    <xs:keyref name="IDREF" refer="ID">
        <xs:selector xpath="book/author-ref|book/character-ref"/>
        <xs:field xpath="@ref"/>
    </xs:keyref>
</xs:element>

Dieses Beispiel veranschaulicht den Hauptunterschied zwischen den beiden Mechanismen: ID-/IDREF-Deklarationen stehen auf der Ebene, auf der sie verwendet werden, und sind daher voll in die pseudo-objektorientierten Eigenschaften von W3C XML Schema integriert, während key-/keyref-Definitionen auf der Ebene eines gemeinsamen Vorfahren stehen und sich auf die tatsächliche Struktur der Instanzdokumente statt auf sein objektorientiertes Schema verlassen.

Da key/keyref sich auf die tatsächliche Struktur der Instanzdokumente verlassen, ignorieren sie Möglichkeiten wie beispielsweise Substitutionsgruppen. Ihre XPath-Ausdrücke müssen ausdrücklich jeden der möglichen Elementnamen festlegen (außer wenn sie ein »*« verwenden, um ein »beliebiges Element« auf einer bestimmten Ebene anzugeben).

   

<< zurück vor >>

 

 

 

Tipp der data2type-Redaktion:
Zum Thema XML Schema bieten wir auch folgende Schulungen zur Vertiefung und professionellen Fortbildung an:

Copyright © 2003 O'Reilly Verlag GmbH & Co. KG
Für Ihren privaten Gebrauch dürfen Sie die Online-Version ausdrucken.
Ansonsten unterliegt dieses Kapitel aus dem Buch "XML Schema" denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.

O’Reilly Verlag GmbH & Co. KG, Balthasarstraße 81, 50670 Köln, kommentar(at)oreilly.de