Antworten zu den Testfragen aus XSLT und XPath - Runde drei

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

Frage 1: Bei mit xsl:import importierten Stylesheet-Modulen ...

a) ... hat das zuerst importierte Stylesheet-Modul Vorrang.

b) .. hat das zuletzt importierte Stylesheet-Modul Vorrang.

c) ... sind beide Stylesheet-Module gleichrangig.

Richtig ist b). Das zuletzt importierte Stylesheet-Modul hat Vorrang. Es besitzt, zusammen mit seinem ganzen Importzweig (alle von ihm unmittelbar oder mittelbar importierten weiteren Module) eine höhere Importpräzedenz, also durch vorhergehende Importinstruktionen importierte Module. Da kein gleichzeitiger Import möglich ist, kann der Fall von identischen Regeln gleicher Importpräzedenz eigentlich nicht vorkommen, es sei denn, es ist zusätzlich die Inklusion von Modulen im Spiel.

Frage 2: Bei mit xsl:include inkludierten Stylesheet-Modulen ...

a) ... gilt bei Konflikten die zuerst stehende Regel.

b) ... gilt bei Konflikten die zuletzt stehende Regel.

c) ... gelten beide Regeln, da hier keine Importpräzedenz greift.

Richtig ist b). Die zuletzt stehende Regel gilt. Dies ist Konvention bei XSLT-Pro­zessoren. Ob es sich bei der zuletzt stehenden Regel um eine lokale Regel oder um eine inkludierte Regel handelt, hängt wiederum völlig von der Position der Inklusionsanweisung ab. Obwohl für Inklusion keine Importpräzedenz gilt, kann es dennoch keine zwei identische, gleichzeitig gültige Regeln geben. Vor einer importierten Regel hat eine inkludierte, gleich einer lokalen Regel, jeder­zeit Vorrang.

Frage 3: Was ist bei benannten Templates wichtig?

a) Es muss ein Template mit dem aufgerufenen Namen existieren.

b) Das mode-Attribut kann beim Aufruf nicht verwendet werden.

c) Das benannte Template darf kein select-Attribut besitzen.

d) Es kann ein Parameter übergeben werden.

Richtig sind a) und d). Wird mittels xsl:call-template ein benanntes Temp­late aufgerufen, so ist es ein Fehler, wenn kein Template dieses Namens exis­tiert. Kein Fehler ist es allerdings, wenn dieses Template gleichzeitig ein select- oder mode-Attribut besitzt, weil es parallel als Template-Regel genutzt werden soll. Beim Aufruf darf ein Parameter übergeben werden, für den, falls es sich nicht um einen Tunnelparameter handelt, auch eine, diesen auffan­gende, xsl:param-Deklaration vorhanden sein sollte.

Frage 4: Ein globaler Parameter …

a) ... wird immer in einer Template-Regel deklariert.

b) ... besitzt einen Defaultwert.

c) ... kann während der Stylesheetlaufzeit einen neuen Wert erhalten.

d) ... behält seinen Wert während der gesamten Stylesheetlaufzeit.

Richtig ist d). Korrekt in Bezug auf einen globalen Parameter ist die Aussage, dass sein Wert über die gesamte Laufzeit des Stylesheets unverändert bleibt. Einen expliziten Defaultwert muss er zwar nicht besitzen – in der Regel wird er von außen mit einem Wert belegt –, ist jedoch kein Defaultwert bestimmt, weil weder select-Attribut noch Sequenzkonstruktor vorhanden sind, wird der Parameterwert auf den leeren String gesetzt. Parmeter in Templateregeln hinge­gen sind stets nur lokal gültig.

Frage 5: Bei zwei gleich benannten Variablen …

a) ... verdeckt die lokale die globale Variable.

b) ... ist immer die globale Variable sichtbar.

c) ... gilt die zuletzt deklarierte.

d) ... gibt es bei zwei lokalen Variablen einen Fehler.

Richtig ist a). Eine lokale Variable verdeckt bei Namensgleichheit generell die globale für die Laufzeit ihrer Template-Regel. Zwei gleich benannte globale Vari­ablen mit gleicher Importpräzedenz stellen immer einen Fehler dar. Für lokale Variablen ist dies zwar nicht unbedingt der Fall, dennoch sollten Sie von dem Versuch absehen, innerhalb einer Template-Regel eine Variable doppelt zu deklarieren.

Frage 6: Welche dieser Aussagen zu id() und generate-id() sind richtig?

a) id() kann in der DTD deklarierte Identifier finden.

b) id() kann durch generate-id() generierte Identifier finden.

c) generate-id() kann mehrere Identifier pro Element erzeugen.

d) generate-id() erzeugt je Knoten immer den gleichen Wert.

Richtig sind a) und d). Obwohl id() und generate-id() einander ähnliche Namen besitzen, ist ihre Ausfgabe unterschiedlich. Die Funktion id() sucht Knoten anhand des Werts ihres deklarierten Identifiers. Sowohl die Deklara­tion als auch der Wert sind explizit und real. Die Funktion generate-id() erzeugt einen Laufzeitidentifier, der in Zusammenhang mit einem Knoten stets denselben Wert annimmt. Weder kann generate-id() auf reale Identifier zugreifen (die Funktion kann einem Knoten mit ID durchaus einen zusätzlichen Laufzeitidentifier geben!) noch kann man mit id() sinnvoll auf die rein virtu­ellen generate-id()-Werte zugreifen.

Frage 7: Welche dieser Aussagen zu Schlüsseln sind richtig?

a) Es kann mehrere gleich benannte key-Listen geben.

b) Einem Knoten können mehrere Schlüsselwerte zugeordnet sein.

c) Ein Schlüssel muss in der DTD deklariert werden.

d) Ein Schlüssel muss im Hauptstylesheet stehen.

Richtig ist b). Schlüssel sind in XSLT durch den XSLT-Prozessor erstellte Tabel­len, die Zeiger auf Knoten beinhalten, wobei ein Knoten mehrmals repräsen­tiert sein kann. Sie werden also während bzw. zu Beginn der Verarbeitung generiert und haben nichts mit einer DTD zu tun. Mehrere gleich benannte Schlüssellisten kann es in der Tat nicht geben, jedoch nicht, weil dies eine Kon­flikt erzeugt, sondern, weil diese stets zu einer Liste verschmolzen werden. Hierfür spielt es keine Rolle, ob der Schlüssel im Hauptmodul oder anderswo deklariert wurde.

   

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