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üs­sen – mit entsprechenden Limitationen – unterliegt key() diesen Einschrän­kungen 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 standa­lone="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() ausge­lesen, 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än­gige. 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 Key­werte im Dokument geben, die dennoch unterschiedliche Nodes bezeiche­nen. 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 wiederho­len, obwohl sie verschieden benannten Attributen zugehören können (ent­scheidend ist Typ ID).
  • ID – ein Identifier steht stets in einem Attribut
    Wollen Sie einen Iden­tifier zur Identifikation eines Elements verwenden, so muss der identifizie­rende 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 Attri­but 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-Ein­schrä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 zugrei­fen, 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