XSLT, XSL-FO, SAX und DOM Flashcards

1
Q

Was ist XSLT?

A

XSLT (XSL Transformations) ist eine XML-Sprache zur Transformation von XML-Dokumenten in andere (XML-)Dokumente. Sie gehört neben XPath (XML Path Language) und XSL-FO (XSL Formatting Objects) zur Sprachfamilie XSL (Extensible Stylesheet Language).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Wie wird eine XSLT Transofmation durchgeführt?

A

Zur Durchführung eines Transformationsprozesses ist ein XSLT-Prozessor notwendig. Dieser liest ein XML-Dokument und ein XSLT-Stylesheet ein, führt die Anweisungen des XSLT-Stylesheets aus und erzeugt ein oder auch mehrere Ergebnisdokumente.
XSLT-Prozessoren sind sowohl als Open-Source als auch kommerziell erhältlich. Auch in modernen Webbrowsern sind XSLTProzessoren integriert.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Wie kann eine XSLT-Transformation in einer Webumgebung durchgeführt werden?

A

Die XSLT-Transformation in einer Webanwendung kann entweder auf der Serverseite oder auf der Clientseite geschehen.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Wie funktioniert die Serverseitige XSLT-Transformation?

A

Bei der serverseitigen Transformation wird die Transformation auf dem Webserver ausgeführt und eine fertige HTML-Seite an den Browser gesendet. Alle serverseitigen Techniken, wie z. B. Microsoft .NET, J2EE, oder Open-Source-Techniken, wie PHP, enthalten mittlerweile XSLT-Prozessoren.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Wie funktioniert die clientseitige XSLT-Transformation?

A

Bei der clientseitigen Transformation wird die XSLT-Transformation auf dem Client, also vom Browser des Clientrechners durchgeführt. Die meisten modernen Browser haben dazu XSLT-Prozessoren integriert.
Im XML-Quelldokument muss eine Referenz auf das XSLT-Stylesheet eingefügt werden. Dazu dient folgende Verarbeitungsanweisung (processing instruction):
<?xml-stylesheet type="text/xsl" href="XSLT_Stylesheet.xsl"?>

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Wo liegen die Nachteile einer clientseitigen XSLT-Transformation? (3)

A
  • Selbst neuere Browser unterstützen nicht den vollen XSLTSprachumfang.
  • Die zu übertragende Datenmenge ist größer als bei einer serverseitigen Transformation, da auf jeden Fall zwei Dateien, das XML-Dokument und das XSLT-Stylesheet, dem Client übermittelt werden müssen.
  • Der Verweis auf das XSLT-Stylesheet ist fest in der XML-Datei kodiert. Soll das XML-Dokument mit einem anderen XSLTStylesheet transformiert werden, muss die XML-Datei editiert werden.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Wie ist ein XSLT-Stylesheed aufgebaut?

A

XSLT ist eine deklarative Sprache. Ein XSLT-Stylesheet beschreibt, wie ein Quellbaum in einen Ergebnisbaum transformiert wird. Das folgende Codesegment zeigt das Grundgerüst eines XSLTStylesheets:
~~~
<?xml version=”1.0” encoding=”UTF-8”?>

<xsl:stylesheet>
<-- Top-Level-Elemente -->
<-- z. B. xsl:template -->
</xsl:stylesheet>

~~~
Ein XSLT-Stylesheet ist ein XML-Dokument und beginnt daher mit der XML-Deklaration. Das Wurzelelement eines XSLT-Stylesheets ist <xsl:stylesheet>. Alternativ kann auch <xsl:transform> angegeben werden, was jedoch nicht üblich ist.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Welche Namensräume müssen in Zusammenhang mit XSLT verwendet werden?

A

Alle XSLT-Elemente und -Attribute müssen dem Namensraum Namensraum http://w3.org/1999/XSL/Transform angehören, damit der XSLTProzessor sie als solche erkennt. Es ist üblich, das Kürzel xsl als Namensraum-Präfix zu notieren. Weitere Namensraumangaben sind z. B. notwendig, wenn die Elemente des Ergebnisdokumentes einem speziellen Namensraum angehören sollen. Soll beispielsweise ein XSL-FO-Dokument erzeugen werden, muss die Namensraumdeklaration xmlns:fo="http://www.w3.org/1999/XSL/Format” hinzufügen werden.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Was sind Top-Level-Elemente in XSLT? Fünf Beispiele

A

Die XSLT-Elemente, die direkte Kindelemente von <xsl:stylesheet> sein dürfen, heißen Top-Level-Elemente.
Es sind 19 Top-Level-Elemente definiert. Die Elemente dürfen im XSLT-Stylesheet in beliebiger Reihenfolge auftreten.
* <xsl:attribute-set>: Definition einer Attributmenge, die Elementen hinzugefügt werden kann.
* <xsl:character-map>: Deklaration benannter Character-Mappings.
* <xsl:function>: Deklaration einer Funktion (»Stylesheet-Funktion«).
* <xsl:import>: Importiert ein anderes Stylesheet.
* <xsl:include>: Inkludiert ein anderes Stylesheet.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Wie wird ein XSLT-Transformations-Prozess ausgeführt?

A
  • Der XML-Parser liest das XML-Dokument und das XSLT-Stylesheet und interpretiert beide als Baum.
  • Der XSLT-Prozessor liest nun die beiden Bäume und wandelt den Baum des XML-Dokumentes (Quellbaum, source tree) auf der Grundlage der Regeln im XSLT-Stylesheet in einen neuen Baum (Ergebnisbaum, result tree) um.
  • Der Ergebnisbaum wird in eine serielle Form gebracht: das neue XML-Dokument.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Was sind XSLT Template-Regeln?

A

Für die Baumtransformation wird kein prozeduraler Algorithmus formuliert, stattdessen werden Regeln angegeben, wie der Quellbaum in den Ergebnisbaum umgewandelt wird. Die Regeln zur Transformation, sogenannte Template-Regeln, oft auch kurz nur Templates genannt, werden durch <xsl:template>-Elemente beschrieben. Jede Template-Regel »matched« eine Sequenz von Elementen oder Attributen im Quellbaum. Dazu wird im match-Attribut ein Muster in Form eines XPath-Ausdrucks angegeben, der die Quellknoten identifiziert, auf welche die Regel angewandt werden kann.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Was ist der Template Rump in XSLT?

A

Im Rumpf einer Template-Regel werden Ausgaben erzeugt und Templatedie weitere Abarbeitung des Baumes gesteuert.
Rumpf Ausgaben können erzeugt werden durch einfachen Text, dem Notieren von Elementen der Zielsprache oder von Textknoten bzw. Attributwerten des Quelldokuments.
Die notierten Elemente der Zielsprache werden mit ihren Attributen unverändert in das Ergebnisdokument übernommen und daher auch literale Ergebniselemente (literal result elements) (vom lateinischen litera = Buchstabe) genannt.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Wie können in XSLT Textknoten bzw. Attributwerte des Quelldokuments ausgegeben werden?

A

Zur Ausgabe von Textknoten bzw. Attributwerten des Quelldokuments kann die Anweisung <xsl:value-of select="XPath-Ausdruck"/> verwendet werden. Der durch den XPath-Ausdruck adressierte Wert wird als String in das Ausgabedokument eingefügt.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Wie wird in XSLT der Dokumentbaum abgearbeitet?

A

Die Anweisung <xsl:apply-templates/> steuert die weitere Abarbeitung des Baumes. Wird sie in dieser Form – als leeres Element und ohne Attribute – notiert, bedeutet dies, dass die Kindknoten des aktuellen Knotens ausgewählt werden. Für jeden Kindknoten wird nun nach einer Template-Regel gesucht, die auf diesen Knoten passt, und diese Regel wird angewendet.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Wie kann eine einfache Transformation mit XSLT durchgeführt werden?

A

Eine einfache Transformation kann wie folgt durchgeführt werden: Ausgehend vom Dokumentknoten bewegt man sich mit <xsl:apply-templates/>, d. h. der Aufforderung an den XSLT-Prozessor nach Template-Regeln für alle Kindelemente des Kontextknotens zu suchen und diese anzuwenden, bis zur untersten Ebene der Elementknoten.
Für diese Elemente wird nun jeweils eine Template-Regel notiert mit der Anweisung <xsl:value-of select="."/>, gib den Inhalt des aktuellen Elementes aus. Dem Element <xsl:apply-templates> kann das Attribut
select="XPath-Ausdruck" hinzugefügt werden. In diesem Fall werden
Template-Regeln nur für die durch den XPath-Ausdruck adressierten Knoten gesucht.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Wofür wird die Anweisung <xsl:apply-templates/> verwendet, was bewirkt das Attribut select?

A

Die Anweisung <xsl:apply-templates/> weist den Prozessor an, für alle Kindknoten nach passenden Template-Regeln zu suchen und diese anzuwenden. Es werden daher alle Kindknoten in der Reihenfolge, in der sie im Dokument vorkommen, betrachtet. Dem Element <xsl:apply-templates/> kann das Attribut select hinzugefügt werden.
Attributwert von select ist ein XPath-Ausdruck:
<xsl:apply-templates select="XPath-Ausdruck"/>
Durch dieses select-Attribut wird bei der Baumabarbeitung die durch den XPath-Ausdruck adressierte Sequenz von Knoten ausgewählt und für diese Knoten wird nach Template-Regeln gesucht.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
17
Q

Was ist das Default-Verhalten von Template Regeln?

A

Für jeden Knotentyp existiert eine eingebaute Template-Regel. Sie wird angewandt, wenn im Stylesheet für einen Knoten keine passende Regel definiert wurde. Mixed Content lässt sich unter Ausnutzung der eingebauten Template-Regeln einfach verarbeiten. Bei Konflikten – zwei Template-Regeln passen zu einem Element – gibt es klare Regeln zur Konfliktlösung.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
18
Q

Was bewirken die default Template-Regeln?

A

Die eingebaute Regel für Elementknoten und den Dokumentknoten sorgt dafür, dass die Verarbeitung mit den Kindknoten fortgesetzt wird.
Die eingebaute Regel für Text- und Attributknoten sorgt dafür, dass der Wert dieser Knoten dem Ausgabedokument hinzugefügt wird. Diese Regel wird aber nur dann ausgeführt, wenn die Knoten ausgewählt wurden.
Die eingebaute Regel für Kommentare und Verarbeitungsanweisungen
ist leer, d. h. trifft der Prozessor auf einen dieser Knotentypen,
tut er gar nichts.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
19
Q

Wie können unerwünschte Ausgaben durch default Template Regeln vermieden werden? (2 Möglichkeiten)

A

Um unerwünschte Ausgaben zu vermeiden, können für Elemente leere Template-Regeln geschrieben werden, um die default Regeln zu überschreiben und die Unerwünschten Elemente so keine Ausgabe erzeugen.
Alternativ dazu gibt es auch die Möglichkeit, die Baumabarbeitung »besser« zu steuern. Im konkreten Falle bedeutet dies, dem Element <xsl:apply-templates> das Attribut select hinzuzufügen. Als Attributwert von select wird ein XPath-Ausdruck angeben, wodurch bei der Baumabarbeitung lediglich die durch den XPath-Ausdruck angegebene Teilsequenz von Knoten ausgewählt und nur für diese Knoten nach Template-Regeln gesucht wird. Die Anweisung <xsl:apply-templates> hat dann also folgende Form:
<xsl:apply-templates select="XPath-Ausdruck"/>

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
20
Q

Wie können durch Template-Regeln konflikte entstehen und wie können sie aufgelöst werden? (4 Regeln)

A

Bei der Baumabarbeitung sucht der Prozessor nach einer Regel, die auf den aktuellen Kontextknoten passt. Hierbei kann es passieren, dass die Anwendung mehrerer Template-Regeln möglich wäre. Da jedoch immer nur eine Regel auf einen Knoten angewendet werden darf, muss es klare Regeln geben, wie solche
Konflikte aufgelöst werden. Es gelten:
* Eine Regel für spezifischere Information hat Vorrang vor einer Regel für eine allgemeinere Information.
* Suchmuster mit Wildcards wie »*« oder »@*« sind allgemeiner als Suchmuster ohne Wildcards. Daher haben die eingebauten Template-Regeln immer eine niedrigere Priorität als explizit formulierte Regeln.
* Falls durch die vorangegangenen Regeln keine eindeutige Auswahl möglich ist, wird die zuletzt im Stylesheet notierte Regel gewählt.
* Die Priorität kann auch über das Attribut priority festgelegt werden. Eine höhere Zahl liefert eine höhere Priorität.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
21
Q

Wie kann ein eigenes Default-Verhalten für Template-Regelen definiert werden?

A

Das in einem Anwendungsfall gewünschte Verhalten wird durch das Top-Level-Element <xsl:mode> festgelegt. Es verfügt über die Attribute on-nomatch und warning-on-no-match zur Festlegung des Verhaltens bei fehlenden Regeln und die Attribute on-multiple-match und warning-on-multiple-match zur Festlegung des Verhaltens bei mehreren passenden Template-Regeln.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
22
Q

Was bewirkt das Attribut on-no-match, welche 6 Werte kann es annehmen?

A

Mit dem Attribut on-no-match wird das Verhalten bei fehlenden Template-Regeln festgelegt. Es kann folgende Werte annehmen:
* deep-copy
* shallow-copy
* deep-skip
* shallow-skip
* text-only-copy
* fail

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
23
Q

Was bewirkt der Attribut-Wert deep-copy bei on-no-match?

A

Ist der Attributwert gleich deep-copy, wird ein Element mit fehlender Template-Regel zusammen mit dem Teilbaum seiner Nachfolger-Elemente unverändert in die Ausgabe übernommen. Es wird nicht versucht, Template-Regeln für Elemente des Teilbaums zu finden.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
24
Q

Was bewirkt der Attribut-Wert shallow-copy bei on-no-match?

A

Ist der Attributwert gleich shallow-copy, wird ein Element mit fehlender Template-Regel mit seinen Nachfolger-Elementen unverändert in die Ausgabe kopiert, mit Ausnahme der Knoten für die eine explizite Template-Regel existiert.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
25
Q

Was bewirkt der Attribut-Wert shallow-skip bei on-no-match?

A

Ist der Attributwert shallow-skip, wird für ein Element mit fehlender Template-Regel weder der textuelle Inhalt noch das Markup ausgegeben, es sei denn, es gibt eine explizite Template-Regel.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
26
Q

Was bewirkt der Attribut-Wert text-only-copy bei on-no-match?

A

Ist der Attributwert text-only-copy, wird der textuelle Inhalt ohne das Markup in die Ausgabe übernommen, es sei denn, es existiert eine explizite Template-Regel. Dies ist das Default-Verhalten, wenn kein Element <xsl:mode> vorhanden ist.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
27
Q

Was bewirkt der Attribut-Wert fail bei on-no-match?

A

Ist der Attributwert gleich fail, wird verlangt, dass für jedes Item, das durch <xsl:apply-templates> selektiert wird, eine explizite Template-Regel existieren muss. Ist dies nicht der Fall, bricht die Transformation mit einer Fehlermeldung ab.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
28
Q

Wie kann das Verhalten beim Vorliegen von mehr als einer passenden Template-Regel festgelegt werden?

A

Das Verhalten beim Vorliegen von mehr als einer passenden Template-Regel für einen Knoten wird über das Attribut on-multiplematch festgelegt. Folgende Werte sind erlaubt:
* use-last: Die letzte passende Regel wird angewandt.
* fail: Die Transformation wird mit einer Fehlermeldung abgebrochen.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
29
Q

Welches Problem besteht bei der Ausgabe von Textinhalten, welche beiden Möglichkeiten gibt es das zu umgehen?

A

Häufig bleiben Weißraumzeichen (Leerzeichen, Zeilenumbrüche, …) nicht erhalten.
Eine Möglichkeit, die Ausgabe dieser Zeichen zu erzwingen, ist die Verwendung von nummerischen Zeichen-Entities. Ein geschütztes Leerzeichen (non breaking space) kann mit &#160; kodiert werden, ein Zeilenumbruch (line feed) mit &#10;.
XSLT bietet zudem das Element <xsl:text> an. Alle Zeichen im Elementinhalt von <xsl:text>, also auch Leerzeichen, Zeilenumbrüche und Tabulatorzeichen, werden als Textknoten in den Ausgabebaum übernommen.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
30
Q

Wie kann mit einem XPatch-Ausdruck eine Knotensequenz adressiert werden?

A

Standardmässig adressiert der XPath-Ausdruck in <xsl:value-of select="XPath-Ausseparator druck"/> lediglich einen einzigen Knoten. Es ist aber möglich, dass der XPath-Ausdruck auch eine Knotensequenz adressiert, die aus mehr als einem Knoten besteht. Wird dem Element <xsl:value-of> nun das Attribut separator hinzugefügt:
<xsl:value-of select="XPath-Ausdruck" separator="Zeichenkette"/>
werden die verketteten Stringwerte aller durch den XPath-Ausdruck adressierten Items, jeweils getrennt durch die als Attributwert von separator notierte Zeichenkette ausgegeben. Default-Wert von separator ist ein Leerzeichen.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
31
Q

Welche Alternative zu <xsl:value-of select="XPath-Ausdruck"/> gibt es zur Ausgabe von Textknoten?

A

Als Alternative stehen seit Version 3.0 die Text-Value-Templates zur verfügung. Bei einem Text-Value-Template wird eine Zeichenkette, die innerhalb geschweifter Klammern steht, als XPath-Ausdruck ausgewertet.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
32
Q

Was ist bei Text-Value-Templates zu beachten und wo darf es eingesetzt werden?

A

Die Zeichenkete in geschweiften Klammern wird aber nur dann als XPath-Ausdruck ausgewertet, wenn beim Elternelement des Textknotens, das Attribut
expand-text den Wert true hat. Das Attribut expand-text darf bei jedem Element im Stylesheet, also auch beim Wurzelelement <xsl:stylesheet>, vorkommen. Ist sein Wert true, werden die Text-Knoten aller Nachfahrenelemente als Text-Value-Templates behandelt.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
33
Q

Was ist der Default-Wert von expand-text und wieso? (2 Gründe)

A

Der Default-Wert des Attributes ist false, d. h. dieses Feature ist standardmäßig deaktiviert. Ein Grund dafür ist die Sicherstellung der Abwärtskompatibilität. Weiterhin sollen Schwierigkeiten vermieden erden, wenn Inhalte erzeugt werden, die viele geschweifte Klammern enthalten, wie z. B. JavaScript-Code oder CSS-Stylesheets. In diesen Fällen müsste die geschweifte Klammer durch eine geschweifte Klammer maskiert werden. Dies ist schlecht lesbar und fehleranfällig.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
34
Q

Wie können während der Transformation dynamische Attributwerte erstellt werden? (2 Möglichkeiten)

A
  • Verwendung eines Attributwert-Templates (attribute value template)
    der XPath-Ausdruck, der den gewünschten Attributwert liefert, in geschweifte Klammern gesetzt. So erkennt der Prozessor, dass dieser Ausdruck ausgewertet werden muss. Die Syntax lautet:
    <element attribut="{XPath-Ausdruck}"> ... </element>
  • Verwendung des Elementes <xsl:attribute>
    <xsl:attribute> wird als Kindelement des Elementes, zu dem das Attribut gehören soll, notiert. Der Attributname wird als Wert dem Attribut name hinzugefügt. Der Ausdruck, der den Attributwert liefert, wird als Inhalt von <xsl:attribute> angegeben.
    Dies wird verwendet, wenn zur Ermittlung des Attributwertes komplexere Auswertungen, z. B. Fallunterscheidungen, erforderlich sind
    Die Syntax lautet also:
    ~~~

<element>
<xsl:attribute>
<!-- Ausdruck -->
</xsl:attribute>
</element>

~~~

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
35
Q

Wie kann in XSLT eine Gruppe von Attributen in mehreren Elementen verwendet werden und wie wird es verwendet?

A

Die Attribute können in einer sogenannten Attributmenge gesammelt werden. In XSLT ist dazu das Top-Level-Element <xsl:attribute-set> vorgesehen. Die Syntax zur Definition einer Attributmenge lautet:
~~~

<xsl:attribute-set>
<xsl:attribute>...</xsl:attribute>
<xsl:attribute>...</xsl:attribute>
...
</xsl:attribute-set>

~~~
Die Attributmenge wird einem Element hinzugefügt, indem das Element das Attribut xsl:use-attribute-sets erhält. Als Attributwert können die Namen mehrerer Attributmengen, jeweils getrennt durch ein Leerzeichen, angegeben werden:
<element xsl:use-attribute-sets="SetName1 SetName2">...</element>

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
36
Q

Wie kann das Ausgabeformat des Ergebnisdokuments festgelegt werden?

A

Mit <xsl:output> wird das Ausgabeformat des Ergebnisdokumentes festgelegt. Es dient dazu, genauere Festlegungen über das Format des Ergebnisdokumentes zu treffen.
Es ist möglich, mehrere <xsl:output>-Deklarationen zu notieren und auch zu benennen.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
37
Q

Wo wird <xsl:output> notiert, was passiert wenn das Element fehlt, wie ist es aufgebaut und welche 7 Attribute kann es besitzen?</xsl:output>

A

<xsl:output> ist ein Top-Level-Element, d. h. es darf als direktes Kindelement von <xsl:stylesheet> notiert werden.
Fehlt das Element, versucht der Prozessor die Ausgabemethode am Wurzelelement des Ergebnisdokumentes zu erkennen.
<xsl:output> ist stets ein leeres Element und verfügt über entsprechende Attribute zur Festlegung des Ausgabeformates.
Attribute:
* method
* html-version
* doctype-public
* doctype-system
* encoding
* indent
* name

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
38
Q

Was bewirkt das Attribut method bei <xsl:output>, was sind die Attributwerte?

A

Das Attribut method legt den Dokumenttyp des Ergebnisdokumentes fest. Mögliche Attributwerte sind:
* xml : Erzeugt wohlgeformtes XML. Dies ist das Default-Format, wenn das Wurzelelement des Ergebnisdokumentes nicht html ist.
* html : Erzeugt HTML.
* xhtml: Erzeugt XHTML (ab XSLT 2.0).
* text : Erzeugt ein einfaches Textdokument.
* json : Erzeugt JSON-Format (ab XSLT 3.0).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
39
Q

Was bewirkt das Attribut html-version bei <xsl:output>, was sind die Attributwerte?

A

Hat das Attribut method den Wert html oder xhtml, kann mit dem Attribut html-version die genaue HTML- oder XHTMLVersion des Ergebnisdokumentes festgelegt werden.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
40
Q

Was bewirken die Attribute doctype-system und doctype-publicbei <xsl:output>, was sind die Attributwerte?

A

Soll das Ergebnisdokument valide zu einer bestimmten DTD sein, muss das XSLT-Stylesheet passend entwickeln werden. Mit den Attributen doctype-public und doctype-system können DOCTYPE-Deklarationen eingefügt werden, um eine anschließende Validierung zu ermöglichen. Wird doctype-public verwendet, muss auch das Attribut doctype-system notiert werden.
Bei doctype-system wird der URI einer privaten DTD, bei doctype-public die einer öffentlichen DTD angegeben.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
41
Q

Was bewirkt das Attribut encoding bei <xsl:output>, was ist der default Wert?

A

Mit dem Attribut encoding können Angaben über den Zeichensatz des Ergebnisdokumentes gemacht werden. Ist das Ausgabeformat xml, wird der angegebene Wert in die XML-Deklaration übernommen. Ist das Ausgabeformat html, bekommt das Attribut charset im meta-Element des Ausgabedokumentes diesen Wert.
Default-Wert von encoding ist UTF-8.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
42
Q

Was bewirkt das Attribut indent bei <xsl:output>, was ist der default Wert?

A

Ist der Attributwert von indent auf yes gesetzt, wird der Quelltext des Ergebnisdokumentes mit Einrückungen und Zeilenumbrüchen formatiert, um eine bessere Lesbarkeit zu erreichen.
Der Default-Wert dieses Attributes ist no.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
43
Q

Was bewirkt das Attribut name bei <xsl:output>?

A

Mit dem Attribut name kann eine <xsl:output>-Deklaration benannt werden. Werden durch <xsl:result-document> mehrere Ausgabedokumente erzeugt, kann ein benanntes Ausgabeformat jedem erzeugten Dokument zugewiesen werden.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
44
Q

Wie kann mit XSLT eine einfache Fallunterscheidung formulieren?

A

Eine einfache Fallunterscheidung lässt sich mit <xsl:if> realisieren. Die Syntax lautet:
~~~

<xsl:if>
...
</xsl:if>

~~~
Als Attributwert von test wird ein XPath-Ausdruck formuliert, der einen booleschen Wert liefert. Ist der Ausdruck true, wird der Inhalt des <xsl:if>-Containers ausgeführt, im anderen Fall wird er übersprungen.
Innerhalb des logischen Ausdruck können insbesondere auch XPath-Funktionen genutzt werden

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
45
Q

Was ist eine komplexe Fallunterscheidung und wie wird sie formuliert?

A

Die <xsl:if>-Anweisung hat keinen else-Teil. Ein »if-else« kann jedoch mit Hilfe der komplexen Fallunterscheidung <xsl:choose> realisiert werden.
Komplexe Fallunterscheidungen (Mehrfachverzweigungen) sind dem Element <xsl:choose> möglich. Innerhalb dieses Elementes können mit <xsl:when test="XPath-Ausdruck"> mehrere Bedingungen formuliert werden. Mit <xsl:otherwise> kann der Default-Fall angegeben werden, falls keine der Bedingungen zutrifft.
Die Syntax lautet:
~~~

<xsl:choose>
<xsl:when>
...
</xsl:when>
<xsl:when>
...
</xsl:when>
...
<xsl:otherwise>
...
</xsl:otherwise>
</xsl:choose>

~~~

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
46
Q

Wie werden in XSLT schleifen (Iteration/Loop) programmiert?

A

Mit <xsl:for-each select="XPath-Ausdruck"> kann eine Iteration programmiert werden. Es wird über alle Knoten iteriert, die der XPath-Ausdruck im select-Attribut auswählt, und die Anweisungen innerhalb von <xsl:for-each> werden ausgeführt.
Syntax:
~~~

<xsl:for-each>
...
</xsl:for-each>

~~~
Der XPath-Ausdruck im select-Attribut wählt eine Knotensequenz aus. Für jeden Knoten dieser Knotensequenz führt der Prozessor nun alle Anweisungen aus, die innerhalb des <xsl:foreach>-Elementes stehen.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
47
Q

Was ist der Unterschied zwischen for-each und apply-templates, wo wird welches eingesetzt?

A
  • <xsl:for-each>: wird auch Pull Processing genannt. Die zu verarbeitenden Knoten weren vom Prozessor aus der Eingabe in die Template-Regel »gezogen«.
    Das Stylesheet kann aus nur einer einzigen Template-Regel bestehen, wobei die Struktur der gewünschten Ausgabe den Ablauf bestimmt.
  • <xsl:apply-templates>: wird auch Push Processing genannt. Die Behandlung der Kindknoten wird durch <xsl:apply-templates> an passende Template-Regeln delegiert.
    Im Stylesheet sind viele kleine Template-Regeln vorhanden, die Abarbeitung wird durch die Baumstruktur des Eingabedokumentes bestimmt.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
48
Q

Wie kann ein Element erstellt werden, dessen Name erst zur Laufzeit berechnet wird?

A

Mit der Anweisung <xsl:element> ist es möglich, Elemente, deren Name erst zur Laufzeit berechnet wird, dem Ergebnisdokument hinzuzufügen.
Die Syntax lautet:
~~~

<xsl:element>
Elementinhalt
</xsl:element>

Berechnet werden kann der Elementname, wenn als Wert des `name`-Attributes ein Attributwert-Template notiert wird:

<xsl:element>
Elementinhalt
</xsl:element>

~~~
Ebenso ist auch die Verwendung des Elementes <xsl:attribute> möglich.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
49
Q

Wann sollen Elemente kopiert werden können, wleche Elemente stehen dazu zur verfügung?

A

Wenn Elemente im Ergebnisdokument identisch zu Elementen im XML-Quelldokument sein sollen, was z. B. bei einer XML-zu-XML-Transformation oder, wenn im XML-Dokument bereits HTML-Elemente verwendet werden, der Fall ist. Es bietet sich an, diese Elemente des Quelldokuments in das Ergebnisdokument zu kopieren. XSLT stellt hierzu die beiden Elemente <xsl:copy> und <xsl:copy-of> zur Verfügung.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
50
Q

Wofür wird <xsl:copy> verwendet?

A

Mit <xsl:copy> wird eine sogenannte »flache Kopie« (shallow copy) erzeugt, nur der gegenwärtige Knoten wird kopiert. Ist dieser ein Element, werden weder seine Attribute noch seine Kindelemente – also auch nicht die enthaltenen Textinhalte – kopiert.
Seit XSLT 3.0 kann dem Element <xsl:copy> auch das Attribut select hinzugefügt werden. Als Wert von select ist ein XPath-Ausdruck erlaubt, der nur ein einziges Item selektieren darf.

51
Q

Wofür wird <xsl:copy-of> verwendet?

A

Mit der Anweisung <xsl:copy-of> ist es möglich, komplette Teilbäume zu kopieren. Es wird eine sogenannte »tiefe Kopie« (deep copy) erzeugt.
Die Syntax lautet:
<xsl:copy-of select="XPath-Ausdruck"/>
Alle Knoten, die der XPath-Ausdruck selektiert und alle ihre Nachfahren und auch alle Text-, Attribut-, Kommentar- und Processing-Instruction-Knoten werden in das Ergebnisdokument kopiert.

52
Q

Wie können Knotensequenzen sortiert werden, wie ist die Standardreihenfolge?

A

Der XSLT-Prozessor verarbeitet eine ausgewählte Knotensequenz normalerweise in der Dokumentreihenfolge. Mit dem Element <xsl:sort> kann jedoch eine davon abweichende Reihenfolge festgelegt werden. <xsl:sort> ist immer ein leeres Element und darf nur als erstes Kindelement von <xsl:apply-templates>, <xsl:for-each> oder von <xsl:for-each-group> vorkommen. Mit den Attributen order, data-type und case-order kann die Sortierreihenfolge beeinflusst werden.

53
Q

Welcher Wert hat das select-Attribut von <xsl:sort>?

A

Als Attributwert von select wird ein XPath-Ausdruck angegeben, der einen Stringwert liefern muss. Dieser dient dann als Sortierschlüssel. Wird das Attribut select weggelassen, wird nach dem aktuellen Kontextknoten sortiert.

54
Q

Welcher Wert hat das order-Attribut von <xsl:sort>?

A

Mit dem Attribut order wird die Sortierreihenfolge festgelegt. Erlaubte Attributwerte sind ascending und descending. Der Default-Wert ist ascending.

55
Q

Welcher Wert hat das data-type-Attribut von <xsl:sort>?

A

Hat das Attribut data-type den Wert text wird alphabetisch, beim Wert number nummerisch sortiert.

56
Q

Welcher Wert hat das case-order-Attribut von <xsl:sort>?

A

Hat das Attribut case-order den Wert upper-first, dann werden Großbuchstaben vor den Kleinbuchstaben einsortiert, beim Wert lower-first ist dies umgekehrt. Der Default-Wert ist upper-first.

57
Q

Wie kann in XSLT über Gruppen iteriert werden?

A

Mit <xsl:for-each-group> werden Items einer Sequenz anhand eines Gruppierungsschlüssels zu Gruppen zusammengefasst. Es wird über diese Gruppen iteriert, so dass Auswertungen für jede Gruppe möglich sind. Die Art und Weise wie die Gruppenbildung erfolgt, wird durch das Gruppierungsattribut bestimmt. Als Gruppierungattribut kann entweder group-by oder group-adjacent oder group-starting-with oder group-ending-with verwendet werden.

58
Q

Wie können in XSLT Elemente in Gruppen zusammengefasst werden?

A

In XSLT werden Items aus einer Eingabesequenz anhand eines Gruppierungsschlüssels in Gruppen zusammengefasst. Es wird über diese Gruppen iteriert und Auswertungen für die einzelnen Gruppen sind möglich.
Die Syntax lautet:
~~~

<xsl:for-each-group>
...
</xsl:for-each-group>

~~~
Als Wert des Attributes select wird ein XPath-Ausdruck angegeben, der die Eingabesequenz der Gruppierung adressiert. Mit dem Gruppierungsattribut wird der Gruppierungsschlüssel und die Art und Weise, wie die Gruppenbildung erfolgt, festgelegt. Als Gruppierungsattribut ist genau eines der Attribute groupby, group-adjacent, group-starting-with oder group-ending-with erlaubt.

59
Q

Wie kann in XSLT innerhalb der aktuell verarbeiteten Gruppe auf die Informationen zugregriffen werden?

A

Zum Zugriff auf Informationen der aktuell verarbeiteten Gruppe können innerhalb von <xsl:for-each-group> folgende XSLT-Funktionen verwendet werden:
* fn:current-grouping-key() as xs:anyAtomicType*: Gibt den Wert des Gruppierungsschlüssels der aktuell verarbeiteten Gruppe zurück.
* fn:current-group() as item()*: Gibt die Sequenz der Items der aktuell verarbeitenden Gruppe zurück.

60
Q

Was bewirkt das Attribut group-by in Gruppierung in XSLT?

A

Wird als Gruppierungsattribut group-by="XPath-Ausdruck" verwendet, erfolgt die Gruppenbildung in der Reihenfolge des ersten Erscheinens eines Wertes des Gruppierungsschlüssels (first order appearence). Die Anzahl der gebildeten Gruppen ist immer gleich der Anzahl der verschiedenen Werte des Gruppierungsschlüssels. Sollen die Gruppen anhand ihres Gruppierungsschlüssels sortiert werden, wird <xsl:sort> als direktes Kindelement von <xsl:for-each-group> notiert.

61
Q

Was bewirkt das Attribut group-adjacent in Gruppierung in XSLT?

A

Wird als Gruppierungsattribut group-adjacent="XPath-Ausdruck" verwendet, wird die durch select adressierte Sequenz in der vorliegenden Reihenfolge (population order) betrachtet. Aufeinanderfolgende Items, bei denen das Gruppierungskriterium den gleichen Wert hat, werden zu einer Gruppe zusammengefasst, d. h. jedes Mal, wenn der Gruppierungsschlüssel bei einem Item einen anderen Wert aufweist als beim Vorgängeritem, wird eine neue Gruppe begonnen. Daraus folgt, dass die Anzahl der Gruppen größer als die Anzahl der verschiedenen Werte des Gruppierungsschlüssels sein kann

62
Q

Was bewirkt das Attribut group-starting-with="Pattern" in Gruppierung in XSLT?

A

Wird als Gruppierungsattribut group-starting-with="Pattern" verwendet, werden die Items der durch select adressierten Sequenz nacheinander prozessiert. Jedes Mal, wenn ein Item zum notierten Pattern passt, wird eine neue Gruppe begonnen. Die erste Gruppe beginnt immer mit dem ersten Knoten der Sequenz, unabhängig von dessen Wert.

63
Q

Was bewirkt das Attribut group-ending-with="Pattern" in Gruppierung in XSLT?

A

Wird als Gruppierungsattribut group-ending-with="Pattern" verwendet, werden die Items der durch select adressierten Sequenz nacheinander prozessiert und eine Gruppe wird geschlossen, wenn ein Item zum notierten Pattern passt. Das Pattern bestimmt also das letzte Mitglied einer Gruppe.

64
Q

Wie können während einer XSLT-Transformation Daten von externen XML-Dateien eingebunden werden?

A

Mit der XSLT-Funktion fn:document() ist es möglich, während einer XSLT-Transformation auf XML-Daten, die in externen XML-Dateien gespeichert sind, zuzugreifen und ihre Inhalte in eine Stylesheet-Transformation einzuziehen.
Ihre Signatur ist:
fn:document($uri-sequence as item()*) as node()*
Übergabeparameter der Funktion ist eine Sequenz von URI-Referenzen, Rückgabewert eine Sequenz von Knoten.

65
Q

Wie können mit XSLT in einem Transformationsvorgang mehrere Ergebnisdokumente erzeugt werden?

A

Mit der Anweisung <xsl:result-document> können während einer Transformation zusätzlich zur »primären Ergebnissequenz« eine beliebige Zahl weiterer, sogenannter »sekundärer Ergebnissequenzen« erzeugt werden. Die Anweisung hat folgende Syntax:
~~~

<xsl:result-document>
<!-- Inhalte für diese Datei -->
</xsl:result-document>

~~~
Als Wert des Attributes href wird ein absoluter oder relativer URI angegeben. Ebenso ist es möglich, einen Ausdruck anzugeben, der einen URI berechnet. Alle innerhalb von <xsl:result-document> erzeugten Ausgaben werden in die angegebene Datei geleitet. Achten Sie darauf, dass die innerhalb eines Stylesheets notierten oder berechneten Namen eindeutig sind, ansonsten bricht der Transformationsvorgang mit einer Fehlermeldung ab.

66
Q

Welche Eigenschaften haben Variablen in XSLT? (4)

A
  • Wird einer XSLT-Variablen ein Wert zugewiesen, kann dieser innerhalb des Stylesheets nicht mehr verändert werden
  • Enthält die Variable als Wert einen XPath-Ausdruck, wird dieser im jeweiligen Kontext ausgewertet.
  • Variablen, die als Top-Level-Elemente deklariert werden sind globale, alle übrigen lokale Variablen.
  • Wird eine Variable jedoch z. B. innerhalb einer <xsl:for-each>-Anweisung deklariert und hat als Wert einen XPath-Ausdruck, wird der XPath-Ausdruck bei jedem Item, über das iteriert wird, erneut ausgewertet, der Wert der Variablen kann also bei jedem Item ein anderer sein.
67
Q

Wie wird eine XSLT-Variable deklariert, welche Attribute und welchen Inhalt kann sie haben?

A

Zur Deklaration einer Variablen dient das Element <xsl:variable>.
Das Element hat stets das Attribut name, das als Wert den Variablennamen enthält.
Soll die Variable einen XPath-Ausdruck speichern, wird dieser als Wert des select-Attributes angegeben. In diesem Fall ist <xsl:variable> ein leeres Element und der Ausdruck hat folgende Form:
<xsl:variable name="varname" select="XPath-Ausdruck"/>
Alternativ kann der Wert der Variablen als Elementinhalt von <xsl:variable> notiert werden:
<xsl:variable name="varname">Zuweisungswert</xsl:variable>

68
Q

Wann ist eine XSLT-Variable global, wann lokal gültig?

A

Variablen, die als Kindelement von <xsl:stylesheet> angegeben werden, sind globale Variable. Ihr Gültigkeitsbereich erstreckt sich auf das komplette Stylesheet.
Variablen, die innerhalb eines Elementes, z. B. <xsl:template> oder <xsl:for-each>, deklariert werden, sind lokale Variablen, also nur innerhalb dieses Elementes gültig.

69
Q

Wie werden benannte Templates verwendet?

A

Alternativ zur Angabe eines match-Attributes, das die Knoten angibt, für die eine Template-Regel gültig ist, kann ein Template auch benannt werden. Über diesen Namen wird das Template dann explizit aufgerufen.
Ein Template wird benannt, indem ihm ein name-Attribut hinzugefügt wird:
~~~

<xsl:template>
...
</xsl:template>

~~~

70
Q

Wie wird ein benanntes Template aufgerufen, was ist zu beachten?

A

Zum Aufruf eines benannten Templates dient das Element <xsl:call-template>, das immer innerhalb eines <xsl:template>-Elementes verwendet werden muss:
<xsl:call-template name="TemplateName"/>
Benannte Templates können – unabhängig vom Kontextknoten – für beliebige Knoten und beliebig oft aufgerufen werden. Der Aufruf von <xsl:call-template> ändert den Kontextknoten nicht.
Es ist nicht möglich benannte Templates, innerhalb eines XPath-Ausdrucks zu verwenden.

71
Q

Wie können Werte an ein Template übergeben werden?

A

Mit Hilfe von Parametern können Werte an ein Template über geben werden. Dies ist sowohl für benannte Templates als auch für Templates, die über ein match-Attribut verfügen, möglich.

72
Q

Wie werden Template Parameter deklariert?

A

Die Parameter müssen als erste Kindelemente in das Template eingefügt werden. Es sind lokale Parameter, die daher nur innerhalb dieses Templates gültig sind. Die Parameter werden bei jedem Aufruf der Template-Regel neu initialisiert.
Zur Deklaration eines Parameters dient das Element <xsl:param>. Das Element hat stets das Attribut name, das als Wert den Parameternamen enthält:
<xsl:param name="ParaName"/>

73
Q

Wie kann ein Default wert für Template Parameter definiert werden? (2 Möglichkeiten”

A
  • Der Default-Wert wird als Inhalt von <xsl:param> notiert:
    <xsl:param name="ParaName">Default-Wert</xsl:param>
  • Der Default-Wert wird als Wert des select-Attributes angegeben. Als Wert kann in diesem Fall auch ein XPath-Ausdruck notiert werden. Ist der Wert ein String, muss dieser noch in weitere Hochkommata gesetzt werden.
    <xsl:param name="ParaName" select="XPath-Ausdruck"/>
    <xsl:param name="ParaName" select="’Default-Wert’"/>
74
Q

Wie kann auf Template Parameter zugegriffen werden?

A

Zum Zugriff auf einen Parameter wird dem Parameternamen ein »$«-Zeichen vorangestellt.

75
Q

Wie wird ein Parameter an eine Template-Regel übergeben?

A

Parameter werden an eine Template-Regel übergeben, indem <xsl:with-param> als Kindelement von <xsl:apply-templates> oder von <xsl:call-template> notiert wird. Im Element <xsl:with-param> wird der Name des Parameters als Wert des name-Attributes angegeben. Soll der Parameter als Wert einen XPath-Ausdruck erhalten, wird dieser als Wert des select-Attributes angegeben. In diesem Fall ist <xsl:with-param> ein leeres Element.

76
Q

Was ist ein globaler Parameter?

A

Ein Parameter ist ein globaler Parameter, wenn er als Top-Level-Element, d. h. als direktes Kindelement von <xsl:stylesheet> definiert wird. Mit Hilfe von globalen Parametern kann eine Wertübergabe von »außen« an ein XSLT-Stylesheet realisiert werden. Der Wert eines globalen Parameters ist während des gesamten Transformationsprozesses gültig und kann nicht verändert werden.

77
Q

Welche Funktionen stehen in XSLT zur Verfügung und wo können Sie eingesetzt werden?

A

In XSLT kann die XPath/XQuery-Funktionsbibliothek verwendet werden. Zudem gibt es in XSLT einige wenige zusätzliche Funktionen.
In einem XSLT-Stylesheet können an allen Stellen, an denen XPath-Ausdrücke erlaubt sind, Funktionen verwendet werden.

78
Q

Was sind Stylesheet-Funktionen, was muss bei der deklaration berücksichtigt werden?

A

Funktionen die selbst definiert wurden, werden Stylesheet-Funktionen genannt.
Alle Stylesheet-Funktionen müssen in einem eigenen Namensraum liegen, daher muss im Wurzelelement <xsl:stylesheet> ein zusätzlicher Namensraum notiert und ein Präfix an den Namensraum gebunden werden. Eine unerwünschte Ausgabe des Namensraums im Ergebnisdokument wird verhindert, wenn das Attribut exclude-result-prefixes gesetzt wird, das als Wert das Namensraum-Präfix erhält.

79
Q

Wie wird eine Stylesheet-Funktion definiert?

A

Zur Definition einer Funktion wird das Top-Level-Element <xsl:function> verwendet. Als Wert des Attributes name wird der Funktionsname notiert, ihm muss stets das festgelegte Namensraum-Präfix vorangestellt werden.
Zur Angabe der formalen Parameter dient das Element <xsl:param>.
Für die Parameter können keine Default-Werte angegeben werden. Das Element <xsl:param> ist daher stets ein leeres Element und hat niemals ein select-Attribut.
~~~

<xsl:function>
<xsl:param></xsl:param>
<xsl:param></xsl:param>
<!-- Anweisungen -->
</xsl:function>

~~~

80
Q

Wie wird ein berechneter Wert einer Stylesheet-Funktion zurückgegeben?

A

Zur Rückgabe des berechneten Wertes kann jede Anweisung, die ein Ergebnis ausgibt, also z. B. <xsl:value-of> oder ein Text-Value-Template, verwendet werden.

81
Q

Wo kann eine Stylesheet-Funktion aufgerufen werden?

A

Ein Funktionsaufruf ist an allen Stellen möglich, an denen ein XPath-Ausdruck erlaubt ist. Beim Funktionsaufruf müssen alle Parameter übergeben werden. Die Reihenfolge entspricht der Reihenfolge der <xsl:param>-Elemente. Ein Überladen von Funktionen, d. h. die Definition zweier Funktionen mit gleichem Namen aber unterschiedlicher Parameterliste, ist möglich.

82
Q

Können mit Stylesheet-Funktionen Datentypen berücksichtigt werden?

A

Ist eine typsichere Programmierung gewünscht, können sowohl für die Übergabeparameter als auch für den Rückgabewert Datentypen festgelegt werden. Hierzu wird das Attribut as verwendet, das als Wert einen Sequenztyp erhält. Ist der Wert eines Übergabeparameters nicht vom deklarierten Typ, versucht der Prozessor den Wert umzuwandeln.
~~~

<xsl:function>
<xsl:param></xsl:param>
<xsl:param></xsl:param>
<!-- Anweisungen -->
</xsl:function>

~~~

83
Q

Wann sollte ein Template und wann eine Funktion verwendet werden?

A

Viele Probleme lassen sich sowohl mit benannten Templates als auch mit Funktionen lösen. Es empfiehlt sich Funktionen den benannten Templates vorzuziehen, wenn die Aufgabe darin besteht, ein Ergebnis zu berechnen, anstatt serialisierten Inhalt zu erzeugen.

84
Q

Wie können XSLT-Stylesheets modularisiert werden?

A

Mit den XSLT-Elementen <xsl:include> und <xsl:import> können Stylesheet-Module in ein (Haupt-)Stylesheet inkludiert bzw. importiert werden. Module können wiederum andere Module inkludieren bzw. importieren.</xsl:import></xsl:include>

85
Q

Wie kann <xsl:include> verwendet werden?

A

Mit Hilfe des Elementes <xsl:include> werden externe Regeln und Deklarationen in ein Stylesheet inkludiert.
Die Syntax lautet:
<xsl:include href="URI"/>
Das Element <xsl:include> ist ein Top-Level-Element und kann an beliebiger Stelle auf der obersten Ebene eingefügt werden. Die inkludierten Stylesheet-Anweisungen gelten quasi als am Ort der inkludierenden Instrunktion geschrieben.
Bei konkurrierenden Stylesheet-Regeln, also Regeln mit gleichem Präzedenz match-Attribut, wird die an letzter Position stehende Regel verwendet.

86
Q

Wie kann <xsl:import verwendet werden?

A

Mit Hilfe des Elementes <xsl:import> werden externe Regeln und Deklarationen importiert.
Die Syntax lautet:
<xsl:import href="URI"/>
Das Element <xsl:import> ist ein Top-Level-Element.
Die importierten Regeln haben eine niedrigere Präzedenz als lokale Template-Regeln, weshalb die lokalen Regeln mit gleichem match-Attribut, Vorrang haben. Es ist also möglich, allgemeine Regeln in Module auszulagern, diese Module zu importieren und bei Bedarf mit lokalen Regeln zu überschreiben.
Soll eine importierte Regel zusätzlich zu der lokalen Regel
auf einen Kontextknoten angewendet werden, ist dies mit <xsl:applyimports/>
möglich. Es wird genau die Regel mit der nächst niedrigeren
Präzedenz angewandt.

87
Q

Was ist XSL-FO?

A

XSL-FO ist eine XML-Anwendung für die seitenorientierte Präsentation
von XML-Dokumenten. Das Kürzel »FO« steht für Formatting Objects.
Ein XSL-FO-Dokument beinhaltet Informationen zum Layout, der Seitenaufteilung und dem darzustellenden Inhalt. FO-Dokumente können zum jetzigen Zeitpunkt noch nicht direkt dargestellt werden, stattdessen werden sie mit Hilfe eines XSL-FO-Prozessors meistens zu PDF gerendert. Bei diesem Prozess werden die im FO-Dokument referenzierten Dateien, meist Grafiken, vom Prozessor in das Dokument eingebettet. Alternativ zu PDF ist je nach Prozessor auch ein Rendering zu Text oder Postscript möglich.

88
Q

Wozu werden XSL-FO Dokumente verwendet?

A

Typischerweise wird XSL-FO als »Zwischensprache« verwendet, um aus XML-Dokumenten PDF-Dokumente zu erzeugen. Mit Hilfe eines XSLT-Stylesheets wird das XML-Dokument zu einem FO-Dokument transformiert, dieses FO-Dokument wird anschließend zu PDF gerendert.

89
Q

Aus welchen drei Teilen besteht ein FO-Dokument?

A
  • einem <fo:layout-master-set> zur Definition der Seitenvorlagen,
  • ggf. einem <fo:page-sequence-master> zur Definition von Seitenfolgenvorlagen, d. h. mehrere Seitenvorlagen werden zu einer Folge zusammengefasst,
  • einem oder mehreren <fo:page-sequence>-Elementen zur Festlegung,
    wie die Seitenfolge(n) innerhalb eines Dokuments
    verwendet
90
Q

Weshalb müssen in einem FO-Dokument verschiedene Seitenvorlagen definiert werden?

A

Im Gegensatz zur HTML-Darstellung im Browser, wo eine Seite quasi beliebig lang und breit sein kann, ist ein FO-Dokument für den Ausdruck auf Papier vorgesehen. Dies bedeutet, dass in einem FO-Dokument die Blattgröße, die Ränder, sowie Bereiche für Kopf- bzw. Fußzeilen oder auch Marginalien vordefiniert werden müssen. Zudem besteht ein Dokument häufig nicht aus gleichen Seiten, sondern aus verschiedenen Seitentypen, wie z. B. einem Deckblatt, Seiten, die für das Inhaltverzeichnis vorgesehen sind, Seiten für den eigentlichen Inhalt, Literaturverzeichnis usw. Diese verschiedenen Seitentypen können sich bzgl. der Ränder, Kopf- und Fußzeilenbereiche, Seitennummerierung usw. unterscheiden.
Zu jedem im Dokument vorkommenden Seitentyp muss im FO-Dokument eine sogenannte Seitenvorlage definiert werden.

91
Q

Wie sieht die Grundstruktur eines FO-Dokuments aus?

A

Die Grundstruktur eines FO-Dokumentes ist wie folgt:
~~~
<?xml version=”1.0”?>
<fo:root>
...
</fo:root>
~~~
Das Wurzelelement eines FO-Dokumentes ist das Element root. Es enthält die Namensraumdeklaration. Alle FO-Elemente und Attribute gehören dem Namensraum http://www.w3.org/1999/XSL/Format an. Dieser Namensraum wird üblicherweise an das Präfix »fo« gebunden.

92
Q

Was wird im layout-Master-Set definiert?

A

Im Layout-Master-Set werden die Seitenvorlagen für alle gewünschten Seitentypen definiert. Für jede Seitenvorlage wird ein Set <fo:simple-page-master>-Element notiert, dem über das Attribut master-name ein Name zugewiesen wird.

93
Q

Welche Attribute kann das Element <fo:simple-page-master> haben?

A

Die weiteren Attribute im Element <fo:simple-page-master> definieren die Seitengröße (page-height und page-width) und die Ränder. Ränder sind Bereiche, die nicht bedruckt werden. Sie werden durch die Angaben margin-bottom, margin-left, margin-right und margin-top festgelegt.
Sowie name zum Zueisen eines Element-Namens.

94
Q

Was sind Regionen in <fo:simple-page-master>, welche 4 gibt es und was ist zu beachten?

A

Als Kindelemente von <fo:simple-page-master> werden sogenannte Regionen (regions) notiert. Regionen sind die Seitenbereiche, die bedruckt werden können. XSL-FO sieht folgende Regionen vor:
* region-before: Kopfbereich, z. B. für fortlaufende Kopfzeilen,
* region-after: Fußbereich, z. B. für fortlaufende Fußzeilen,
* region-start, region-end: linker bzw. rechter Bereich, z. B. als Platz für Randbemerkungen, Marginalien,
* region-body: beinhaltet den eigentlichen Inhalt der Seite.

Die region-body muss auf jeden Fall angegeben werden, die übrigen
Regionen sind optional.
Die Elemente region-before, region-after, region-start und region-end besitzen das Attribut extent, dessen Wert die Ausdehnung (Höhe bzw. Breite) des entsprechenden Bereiches angibt. Der Ausgabebereich der region-body umfasst die übrigen Regionen. Für die region-body sind die Ränder (Attribut margin) auf mindestens die gleichen Werte zu setzen, wie die Ausdehnungsbereiche der übrigen Regionen, da sich sonst die Bereiche überlappen.

95
Q

Wie sieht ein einfaches FO-Dokument aus?

A

Das einfachste FO-Dokument besteht lediglich aus einem Seitentyp. In diesem Fall enthält das <fo:layout-masterset> nur einen <fo:simple-page-master> zur Definition der Seitenvorlage für diesen Seitentyp.
Die Seitenvorlage lässt sich der Seitenfolge <fo:page-sequence> direkt zuordnen, indem das Attribut master-reference als Wert den Wert des Attributes master-name des Elementes <fo:simple-page-master> erhält. Benötigt der Inhalt mehr als eine Seite, werden Folgeseiten vom FO-Prozessor angelegt.

-<fo:root>
<fo:layout-master-set>
<fo:simple-page-master master-name="name">
—-<fo:region-body>
—-<fo:region-after>
—-<fo:region-start>
—-<fo:region-end>
—-<fo:region-before>
<fo:page-sequence master-refernece="name">
<fo:title>
<fo:static-content flow-name=" ">
...
<fo:flow flow-name=" ">

96
Q

Wie wird in einem FO-Dokument eine Seite befüllt?

A

Innerhalb von <fo:page-sequence> wird die Seite mit Inhalt gefüllt. Ein <fo:static-content>-Element enthält alle Inhalte, die auf jeder Seite wiederholt werden. Das Attribut flow-name gibt die Region an, in der die Inhalte platziert werden. Für die Regionen können die vordefinierten Namen xsl-region-before, xsl-region-after, xsl-region-start und xsl-region-end verwendet werden. Nach den <fo:static>-Elementen folgt ein einziges(!) <fo:flow>-Element. Es ist für die Aufnahme des Fließtextes vorgesehen.

97
Q

Was ist ein Block in einem FO-Dokument?

A

Ein Block ist ein rechteckiger Bereich, getrennt durch einen Zeilenumbruch und evtl. Whitespace vom vorangehenden und folgenden Inhalt. Blöcke können normalen Fließtext, Inline-Objekte und andere Blöcke enthalten. Zur Darstellung eines Blocks dient in XSL-FO das Element <fo:block>.
Ein Block hat ein Inhaltsrechteck. Optional wird das Inhaltsrechteck von einem Auffüllungsrechteck und einem Rahmen umgeben.

98
Q

Welche Attribute zur Angabe von Eigenschaften kann ein Block in einem FO-Dokument haben?

A
  • space-before, space-after: Abstand vor bzw. nach dem Block.
  • start-indent, end-indent: Einzug des Inhaltsrechtecks vom linken bzw. rechten Seitenrand.
  • ` padding: Innenabstand, (Abstand zwischen Inhaltsrechteck und Rahmenrechteck). Die Seiten können einzeln festgelegt werden, mit: padding-top, padding-bottom, padding-left, padding-right` verwendet.
  • margin: leerer Bereich außerhalb des Blocks. Die Seiten können einzeln festgelegt werden, mit: margin-top, margin-bottom, margin-left, margin-right.
99
Q

Welche Attribute zur Formatierung kann ein Block in einem FO-Dokument haben? (7 Beispiele)

A

Mit Hilfe weiterer Attribute wird der Inhalt eines Blocks formatiert. Die meisten dieser Attribute werden an die Elemente innerhalb des Blocks vererbt. Einige wichtige Attribute sind:
* font-family: Schriftart
* font-size: Schriftgröße
* line-height: Zeilenhöhe
* color, background-color: Textfarbe, Hintergrundfarbe
* text-align: Textausrichtung, Werte: left, right, justify
* text-indent: Erstzeileneinzug
* border: Rahmen.

100
Q

Was ist bei den Formatierungs-Attributen eines Blocks in einem FO-Dokument zu beachten?

A

Nach der Spezifikation von XSL-FO darf die region-body keinen Innenabstand und keinen Rahmen besitzen. Entsprechende Attribute werden von Apache FOP nicht unterstützt und erzeugen eine Fehlermeldung.

100
Q

Wozu wird das <fo:inline> Element in einem FO-Dokument verwendet? (4 Beispiele)

A

Das Element <fo:inline> dient der inzeiligen Formatierung. <fo:inline>-Elemente können ineinander verschachtelt werden. Typische Formatierungsattribute sind:
* font-weight: Schriftgewichtung, z. B. bold für Fettdruck,
* font-style: Schriftstil, z. B. italic für kursiv,
* text-decoration: Textdekoration, z. B. underline für unterstrichen.
* color: Schriftfarbe.

101
Q

Wie könen Grafiken in ein FO-Dokument eingebunden werden?

A

Zur Darstellung von Grafiken dient das Element <fo:external-graphic>. Im Attribut src wird die Referenz auf die Grafik-Datei angegeben. Unterstützt werden die Grafikformate gif und jpeg, je nach FO-Prozessor auch noch weitere.

102
Q

Welche Attribute kann ein Grafik Element in einem FO-Dokument besitzen? (7 Beispiele)

A

Standardmäßig wird eine Grafik in der abgespeicherten Größe dargestellt. Mit dem Attribut content-height bzw. content-width kann die Höhe bzw. Breite der Grafik angegeben werden. Wird nur eine Angabe notiert, wird die zweite vom Prozessor passend skaliert. Weitere Attribute zur Formatierung von Grafiken sind z. B. background, padding, border, space-before, space-after.

103
Q

Wie können Hyperlinks in einem FO-Dokment definiert werden?

A

Das Element <fo:basic-link> dient zur Definition von Hyperlinks. Es ist möglich externe Links, wie auch interne Links, zu definieren.
* Bei einem externen Link wird das Sprungziel als Wert des Attributes external-destination angegeben.
* Bei einem internen Link wird als Wert des Attributs internal-destination den Wert des Attributes id eines anderen Elements im selben Dokument notiert.

104
Q

Wie kann in einem FO-Dokument eine Liste definiert werden?

A

Eine Liste in XSL-FO beginnt mit einem <fo:listblock>-Element. Für jeden Listeneintrag wird dann ein <fo:listitem>-Element angegeben. Jedes <fo:list-item>-Element hat zwei Kindelemente:
* <fo:list-item-label> für das Listenaufzählungszeichen
* <fo:list-item-body> für den Inhalt des Listeneintrag.

105
Q

Welche Attribute kann das Element <fo:listblock> in einem FO-Dokument besitzen?

A
  • provisional-distance-between-starts: Abstand zwischen dem linken Rand des Aufzählungszeichens und dem linken Rand des Listeneintrags.
  • provisional-label-separation: Abstand zwischen dem rechten Rand des Aufzählungszeichens und dem linken Rand des Listeneintrags.
  • start-indent: Abstand des Listenblocks vom linken Rand der region-body.
  • end-indent: Abstand des Listenblocks vom rechten Rand der region-body.
106
Q

Welche Attribute kann das Element <fo:list-itemlabel> in einem FO-Dokument besitzen?

A
  • start-indent: Abstand des linken Rands des Aufzählungszeichens von linken Rand der region-body, überschreibt die start-indent-Werte von <fo:list-block>.
  • end-indent: Abstand zwischen dem rechten Rand des Aufzählungszeichens und dem rechten Rand der region-body. Kann berechnet werden mit: end-indent="label-end()"
107
Q

Welche Attribute kann das Element <fo:list-itembody> in einem FO-Dokument besitzen?

A
  • start-indent: Abstand zwischen linkem Rand der region-body und rechtem Rand des Listeneintrags. Kann berechnet werden mit: start-indent="body-start()" gesetzt.
  • end-indent: Abstand des linken Rands des Listeneintrags vom
    rechten Rand, überschreibt die end-indent-Werte von <fo:listblock>.
108
Q

Wie kann in einem FO-Dokument eine Tabelle definiert werden?

A

Für Tabellen stehen die Elemente <fo:table>, <fo:table-row> und
<fo:table-cell> zur Verfügung. Soll eine Tabelle mit einer Tabellenbeschriftung versehen werden, beginnt sie mit dem Element <fo:table-and-caption>. Als Kindelement wird dann das Element <fo:table-caption> notiert,welches die Überschrift enthält. Danach folgt <fo:table>. Eine Tabelle ohne Tabellenbeschriftung beginnt mit dem Element <fo:table>.

109
Q

Wie kann für eine Tabelle in einem FO-Dokument eine Kopf- und/oder Fusszeile festgelegt werden

A

Mit <fo:table-header> bzw. <fo:table-footer> können eigene Tabellenkopf- bzw. Tabellenfußzeilen festgelegt werden. Für jede Zeile wird ein <fo:table-row>-Element notiert. Innerhalb der Zeilen werden für die Tabellenzellen <fo:table-cell>-Elemente angegeben. Textinhalte können nicht direkt in die Tabellenzelle eingefügt werden, sondern müssen innerhalb eines <fo:block>-Elementes stehen. Die Tabellenkopf- bzw. Tabellenfußzeilen werden im Falle einer mehrseitigen Tabelle auf jeder Seite wiederholt, es sei denn, Sie setzen im Element <fo:table> das Attribut tableomit-header-at-break bzw. table-omit-footer-at-break auf den Wert true.

110
Q

Wie wir der Inhalt einer Tabelle in einem FO-Dokument definiert?

A

Die Tabelle selbst wird innerhalb des Elementes <fo:table-body> beschrieben. Für Zeilen und Zellen gibt es die Elemente <fo:table-row> und <fo:table-cell>.

111
Q

Wie kann die Spaltenbreite einer Tabelle in einem FO-Dokument beeinflusst werden?

A

Standardmäßig hat im Element <fo:table> das Attribut table-layout den Wert auto. Die Breite der Tabellenspalten wird utomatisch berechnet und ergibt sich aus dem benötigten Platz der Zelleninhalte.
Eine feste Spaltenbreite kann durch die Angabe von <table-column> für jede Spalte festgelegt werden. In jedem <tablecolumn>-Element wird das Attribut column-width notiert. Als Wert dieses Attributes ist eine feste Breitenangabe oder ein Prozentwert erlaubt. Ergibt die Summe der Prozentwerte aller Spalten 100 %, nimmt die Tabelle die Breite des Satzspiegels ein.

112
Q

Welche Weitern Attribute können Tabellen in einem FO-Dokument besitzen? (3)

A

Rahmenlinien erhalten die Tabellenzellen, wenn ihnen das Attribut border hinzugefügt wird. Über das Attribut padding wird ein Innenabstand zwischen Zellenrahmen und Zelleninhalt angegeben. Die vertikale Ausrichtung in einer Tabellenzelle kann mit Hilfe des Attributes display-align beeinflusst werden. Mögliche Werte sind before, center, after.

113
Q

Wie können in einem FO-Dokument Zellen einer Tabelle verbunden werden?

A

Tabellenzellen können miteinander verbunden werden, so dass eine Zelle mehrere Zeilen oder Spalten oder sogar beides überspannt. Dazu wird das Element <fo:table-cell> um das Attribut number-columns-spanned bzw. number-rows-spanned ergänzt, das als Wert dann die entsprechende Zeilen- bzw. Spaltenzahl erhält.

114
Q

Wie können in einem FO-Dokument ein Seitenunbruch in einer Tabelle verhindert werden?

A

Einen Seitenumbruch in einer Tabelle kann vermieden werden, wenn dem Element <table> das Attribut keep-together="always" hinzufügt wird.

115
Q

Wie kann eine Anwendung ein XML-Dokument verarbeiten?

A

Zur Verarbeitung eines XML-Dokumentes muss eine Anwendung Zugriff auf den Inhalt des XML-Dokumentes haben. Genauer gesagt, benötigt die Anwendung Zugriff auf den Inhalt von Elementen, auf Attributwerte, Kommentare usw.
Diese Aufgabe wird von einem Parser übernommen, indem er einer Applikation eine einfache API zum Zugriff auf ein XML-Dokument zur Verfügung stellt.
Es werden zwei Grundtypen von APIs unterschieden:
* ereignis-basierte API
* baum-basierte API.

116
Q

Wie arbeitet eine ereignis-basierte API?

A

Eine ereignis-basierte API (SAX -> Simple API for XML) liest ein Dokument sequenziell vom Beginn bis zum Ende und meldet während des Lesens jedes Ereignis durch sogenannte Callbacks an das aufrufende Programm zurück.
Ein Ereignis ist ein Signal, das eine Änderung im Markup-Status anzeigt. Ein Ereignis tritt also bei Element-Tags, Zeichendaten, Kommentaren, Verarbeitungsanweisungen und den Grenzen des Dokumentes selber auf.
Der Parser sendet dem aufrufenden Programm durch die Callbacks eine Mitteilung, welches Ereignis eingetreten ist. Das Programm, das den Parser aufgerufen hat, muss nun das Ereignis interpretieren und entsprechend reagieren.

117
Q

Wie können Ereignisse des SAX-Parsers verarbeitet werden?

A

Um die Ereignisse des SAX-Parsers verarbeiten zu können, werden Handler-Klassen benötigt. Es gibt vier wichtige Handler-Interfaces. Diese Handler-Interfaces definieren Callback-Methoden, die der Parser aufruft, wenn ein entsprechendes Ereignis eingetreten ist.
* ContentHandler
* DTDHandler
* EntityResolver
* ErrorHandler

118
Q

Welche vier wichtigen Handler-Interfaces gibt es bei SAX?

A
  • ContentHandler: empfängt Meldungen, die sich auf den logischen Inhalt beziehen, bietet Methoden zur Reaktion auf Dokumentereignisse.
  • DTDHandler: empfängt Meldungen, die sich auf die DTD beziehen.
  • EntityResolver: werden in der Anwendung externe Entities verwendet, kann dieses Interface verwenden werden, um diese auszuwerten.
  • ErrorHandler: Basis-Interface für SAX-Fehlerhandler für die detaillierte Auswertung der im XML-Dokument auftretenden Fehler (warning, error, fatalError).
119
Q

Was ist der Vorteil der ereignis-basierten API?

A

Der Vorteil der ereignis-basierten API ist ihr geringer Speicherbedarf.

120
Q

Was ist bei einer ereignis-basierten API zu beachten?(Zugriff auf Inhalt)

A

Eine ereignis-basierte API bietet nur Zugriff auf den Inhalt während des Parsens. Ist das Parsen beendet, hat die Anwendung über diese API keine Möglichkeit mehr, an die Inhalte eines XML-Dokumentes zu gelangen. Dies bedeutet auch, dass ein XML-Dokument nicht verändert werden kann.

121
Q

Wie arbeitet eine Baum-basierte API?

A

Eine Baum-basierte API (DOM) fasst ein XML-Dokument als Baum von Knoten auf. Entsprechend den im XML-Dokument vorkommenden Informationseinheiten werden verschiedene Knotentypen unterschieden.
Der XML-Parser liest das XML-Dokument ein, parst es und erzeugt das DOM-Modell im Arbeitsspeicher. Das generierte Modell dient der Anwendung für die weitere anwendungsspezifische Verarbeitung.

122
Q

Was wird durch DOM ermöglicht?

A
  • XML-Dokumente können eingelesen und der Applikation als DOM-Baum zur navigierenden Verarbeitung mit Lese- und Schreiboperationen zur Verfügung gestellt werden.
  • DOM-Bäume können durch die Applikation erzeugt und in XML-Dokumente überführt werden.
  • DOM-Bäume können in neue DOM-Bäume überführt werden.
  • DOM-Bäume können über komfortable Event-Mechanismen mit ereignisbehandelnden Softwarekomponenten verknüpft werden.