Gegenüberstellung: Keys vs. ID
(Auszug aus "XSLT 2.0 & XPath 2.0" von Frank Bongers, Kapitel 3.)
Wo die potenziellen Ziele von id() in der DTD deklarierte Identifier sein müssen – mit entsprechenden Limitationen – unterliegt key() diesen Einschränkungen nicht. Sie können sich einen Key als eine verallgemeinerte, aber erst zur Laufzeit des Stylesheets generierte Form eines ID vorstellen. Ein Vergleich zwischen beiden Konzepten:
- ID – Deklaration in der DTD
Ein Attribut vom Typ ID muss als solches in der DTD deklariert werden. Falls der XSLT-Prozessor eine externe DTD nicht verarbeitet (zur Erinnerung: Er ist dazu nicht verpflichtet!), kann ein Attribut nicht als ID-Attribut erkannt werden. Ist ein Dokument als standalone="yes" deklariert, so kann dies ebenfalls passieren (eine externe DTD sollte dann aber nicht vorhanden sein). Das Auslesen mit id() ist also nicht immer problemlos.
- Keys – Deklaration im Stylesheet
Ein Key wird im Stylesheet mit xsl:key definiert und mit key() ausgelesen, ist also unabhängig von der DTD und ihrer Aufgabe der Dokumentvalidierung.
- ID – ein Satz Identifier – ein ID pro Element
Ein XML-Dokument kann nur einen Satz von Identifiern haben – nicht mehrere voneinander unabhängige. Dies liegt zum einen daran, dass ein Element höchstens einen Identifier besitzen kann, zum anderen daran, dass kein anderes Element für seinen (einen) Identifier den selben Wert beanspruchen kann, den ein anderer Identifier schon verwendet. Der Attributname des ID-Attributs spielt dabei keine Rolle.
- Keys – mehrere parallele Sätze
Es kann eine Vielzahl gleichartiger Keywerte im Dokument geben, die dennoch unterschiedliche Nodes bezeichenen. Da ein Key sowohl einen Namen wie auch einen Wert besitzt, können sich Keywerte (unter einem anderen Namen) wiederholen und dann andere Elemente bezeichnen. Bei ID-Attributen dürfen sich Werte nicht wiederholen, obwohl sie verschieden benannten Attributen zugehören können (entscheidend ist Typ ID).
- ID – ein Identifier steht stets in einem Attribut
Wollen Sie einen Identifier zur Identifikation eines Elements verwenden, so muss der identifizierende Wert in einem Attribut stehen (vom Typ ID), die Information darf nicht im Stringinhalt des Elements oder in einem Child-Element etc. stehen.
- Keys – der Identifier setzt sich beliebig zusammen
Der Wert eines benannten Schlüssels darf an jedem geeigneten Ort stehen – in einem Attribut genauso wie im Element selbst – oder in einem Child-Element usw. Er kann sogar auf mehrere Orte verteilt sein. Wo der Wert gesucht werden soll, wird mittels eines XPath-Ausdrucks festgelegt.
- ID – der Identifierwert muss ein QName sein
Eine Beschränkung eines möglichen Identifierwerts besteht darin, dass er ein qualifizierter Name sein muss, er darf also keine Leerzeichen enthalten.
- Keys – beliebiger Wert
Der Wert eines Keys ist nicht reglementiert. Er kann ein beliebiger Stringwert sein und unterliegt nicht den QName-Einschränkungen. Er darf also auch Leerzeichen enthalten, also aus mehreren Worten bestehen.
Der besondere Reiz besteht darin, dass sich ein Schlüssel bei der Generierung auch aus mehreren Quellen gleichzeitig zusammensetzen lässt. Sie können z. B. auf zwei oder mehr Attribute oder Child-Elementinhalte eines Elements zugreifen, es muss nur der entsprechende XPath-Ausdruck geschrieben werden. Dies macht xsl:key und key() zu einem äußerst mächtigen Werkzeug.
<< zurück | vor >> |
Tipp der data2type-Redaktion: Zum Thema XSLT bieten wir auch folgende Schulungen zur Vertiefung und professionellen Fortbildung an: |
Copyright © Galileo Press, Bonn 2008
Für Ihren privaten Gebrauch dürfen Sie die Online-Version ausdrucken.
Ansonsten unterliegt dieses Kapitel aus dem Buch "XSLT 2.0 & XPath 2.0 ― Das umfassende Handbuch" 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.
Galileo Press, Rheinwerkallee 4, 53227 Bonn