unparsed-entity-uri

(Auszug aus "XSLT 2.0 & XPath 2.0" von Frank Bongers, Kapitel 5.)

A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z

   

Kategorie: Assoziation und Auffindung von Nodes und Ressourcen

Herkunft: XSLT 1.0

Rückgabewert: Ein URI vom Typ xs:anyURI; der URI-String einerexternen, nicht geparsten Entität. Hier­bei werden die Basis-URIs der beteiligten Resourcen berücksichtigt (DTD/Schema, Stylesheet, Quell- und Ergebnisdokument), um die anschlie­ßende korrekte Einbindung der Entität zu gewährleisten.

Aufruf/Argumente:

unparsed-entity-uri($entity-bezeichner)

$entity-bezeichner:
Das übergebene Argument muss der Bezeichner einer ungeparsten Entität sein. Existiert keine ENTITY-Deklaration für diesen Bezeichner, so gibt die Funktion einen leeren String zurück.

Verwendungszweck:

Die Funktion gibt den gegenüber dem Basis-URI aufgelösten URI derjenigen nicht geparsten Entität zurück, deren Entity­name ihr übergeben wurde. Die Funktion bezieht sich dabei stets auf des Doku­ment, in dem sich der zum Zeitpunkt des Funktionsaufrufs gültige Kontextkno­ten befindet.

Es ist ein Fehler, wenn die Funktion aufgerufen wird, falls das Kontextitem kein Knoten ist bzw. der Baum, in dem sich der Kontextknoten befindet, kei­nen Dokumentknoten besitzt (ERR XTDE1370).

Die XSLT-Funktion unparsed-entity-uri() dient dazu, die Pfade zwischen erzeugtem Dokument und einer externen Resource so abzugleichen, dass die URI-Beziehung zwischen beiden erhalten bleibt. Im einfachen Fall einer inter­nen DTD entspricht der Rückgabewert der Funktion dem Pfad zwischen der Referenz und der Resource. Der XSLT-Prozessor kann den Pfad zu einem abso­luten Pfad ergänzen, der die Lage des erzeugten XML-Dokuments berücksich­tigt – für WWW-Dateien ergibt sich ein absoluter URL.

Im einfachen Fall einer internen DTD und, falls Quell- und Ergebnisdokument im selben Verzeichnis liegen, gibt die Funktion die absolute Adresse des Ergeb­nisdokuments aus und hängt an diese den relativen Pfad zum Entity an.

Komplexer wird es, wenn eine externe DTD vorliegt. In diesem Fall wird zusätzlich zum Pfad zwischen DTD und Entity auch jener zwischen Quelldoku­ment und DTD einbezogen. Liegt das Ergebnisdokument zusätzlich in einem anderen Verzeichnis, wird auch dieses in den Pfad einbezogen.

Beispiel – Auflösung der URI eines nicht geparsten Entitys:

Enthält die DTD eine Deklaration in folgender Form:

<!ENTITY bild SYSTEM "bilder/mein_bild.jpg" NDATA JPEG>

so gibt der Ausdruck

<img href="{unparsed-entity-uri('bild')}">

einen HTML-<img>-Tag zurück, dessen href-Attribut die (absolute) URI des Bil­des enthält. Die Funktion löst automatisch Pfade auf, die sich aus den Pfadrela­tionen von Quell- und Ergebnisdokument und DTD ergeben (die ja z.B. in ver­schiedenen Verzeichnissen liegen könnten).

Funktionsdefinition:

XSLT 1.0:

unparsed-entity-uri(string) => string

XSLT 2.0:

unparsed-entity-uri($entity-name as xs:string) as xs:anyURI

Mögliche Kompatibilitätsprobleme XSLT 2.0 zu XSLT 1.0:
 In XSLT 2.0 besteht theoretisch die Möglichkeit, die Funktion aufzurufen, ohne dass ein gültiger Current Node vorliegt – dies erzeugt einen Laufzeitfehler (dynamic error).

   

<< 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