XPath
XPointer
XSL
XSL Transformations
XSL Formatting Objects
Stand und Ausblick
Verweise auf Teile/Parts von XML Dokumenten (als Baum von Knoten betrachtet). Identifikation von Parts durch Vergleich von Zeichenketten.
Wird in XSLT und XPointer zur Spezifikation von Fragmenten verwendet. Diese definieren auch den Kontext in dem die XPath Ausdrücke ausgewertet werden.
Aufbau eines Pfadbestandteils
achse::knotentest[prädikat]
Beispiel
child::para[position()=7] http:://host/pfad/resource#xpointer(child::para[position()=7])
Komposition von Pfaden durch Pfadbestandteile, die durch
/
getrennt werden.
Achsen (axis): definieren Folgen von Kandidaten zur Auswahl
Prädikate (predicates): Boolesche Bedingungen zur Einschränkung der Auswahl
Funktionen: generieren von (neuen) Kandidaten zur Auswahl
child
Kindknoten des aktuellen Knotens
descendent
Nachfahren
parent
Elternknoten
ancestor
Vorfahren
preceding
Vorgänger Knoten
following
Nachfolger Knoten
preceding-sibling
Vorgänger Geschwister-Knoten
following-sibling
Nachfolger Geschwister-Knoten
attribute
Attributknoten
namespace
Namensraum-Knoten
self
der Knoten selbst
descendant-or-self
ancestor-or-self
ancestor
, descendant
,
following
, preceding
und self
Partitionieren die Menge aller Knoten eines Dokuments.
achse::*
zur Selektion aller Knoten
achse::name
zur Selektion bestimmter Elemente
oder Attribute
achse::funktion()
zur Selektion von Knoten mit
bestimmten Eigenschaften.
Beispiel: alle para
Element-Knoten
child::para
Beispiel: das href
Attribut des Knotens
attribute::href
Beispiel: alle Textknoten
child::text()
[ test-ausdruck ]
Selektiert Knoten, für die die Auswertung des Test-Ausdrucks
"wahr" ergibt
Ausdrucksbedeutung von axis::node[test]
ist (axis::node)[test]
und nicht axis::(node[test])
der Test-Ausdruck darf arithmetische (+, -, *, div, mod)
und boolesche (or, and, !, <, >, <=, >=, =, !=)
Operatoren enthalten.
Schreibweise: <
für <
Beispiel: der 7. Knoten
[ position() = 7 ]
last()
Position des letzten Elements
position()
aktuelle Position des Elements
count(node-set)
Anzahl der Elemente
id(object)
Element, das durch Objekt Identifiziert wird
name(node-set)
Name der Selektion
string(object)
Konvertiert das Objekt in Zeichenkette
concat(string1, string2 ,...)
Zeichenketten Verbindung
starts-with(string1, string2)
contains(string1, string2)
substring(string, position, length)
string-length(string)
translate(string1, string2, string3)
boolean(object)
not(boolean)
number(object)
round(number)
Zur Vereinfachung gibt es eine ganze Reihe von kompakteren Bezeichungen der Pfadbestandteile.
para
für child::para
*
für child::*
text()
für child::text()
@href
für attribute::href
@*
für attribute::*
[ 7 ]
für *::*[position()=7]
chapter//para
für child::chapter/descendant::para
chapter/section
für child::chapter/child::section
//
für /descendant-or-self::node()/
Verweise auf Teile/Fragmente von XML Dokumenten. Fragmente sind einzelne Punkte/Objekte/Knoten und zusammenhängende Bereiche von Punkten. Identifikation von Fragmenten durch Vergleich von Zeichenketten.
Steht in enger Beziehung zu DOM. Baut auf XPath auf. Wird zusammen mit XLink zur Definition von XML Links benötigt.
URL Aufbau mit XPointer
service:://host/pfad/resource#xpointer-expr
service:://host/pfad/resource|xpointer-expr
dabei ist xpointer-expr
:
html-name
oder xpointer( xpath-expr )
oder xpointer( xpath-expr to xpath-expr )
Beispiele
#intro #xpointer(id("intro")) #xpointer(//*[@id="intro"])
neue Typen
point
(ein Knoten oder ein Zeichen einer Zeichenkette)
und range
( begin-expr to
end-expr )
und einige dazu gehörige Funktionen,
z.B. point()
und range(...)
.
Beispiele
xpointer( id("sec2.1")/descendant::P[last()] to id("sec2.2")/descendant::P[first()] )
Am Anfang XSL, jetzt aufgeteilt in XSL Transformations (XSLT) und XSL Formating (FO).
wesentlich mächtiger als CSS, z.B. Inhaltsverzeichnisse
DSSSL in XML Syntax
Document Type ist xsl:stylesheet
kann zusammen mit CSS verwendet werden
Formating Objects (FO) bezeichnen die
elementaren formatierbaren Objekte
bei DSSSL flow objects
XSL - Formating Spezifikation definiert FO Vokabular
Bearbeitung erzeugt Baum von FO
XSL - Transformations Spezifikation definiert Transformationskonstrukte
xsl:template
wählt Element
aus und beschreibt seine Formatierung
xsl:apply-templates
stößt
Bearbeitung des Inhalts an
EM { font-family: roman }XSLT to HTML:
<xsl:template match="em"> <I> <xsl:apply-templates/> </I> </xsl:template>(XSLT to CSS: )
<xsl:template match="em"> <css:chunk font-family="roman"> <xsl:apply-templates/> </css:chunk> </xsl:template>CSS mit XML:
<?xml-stylesheet href="url" type="text/css" media="screen" ... ?>XSLT to LaTeX:
<xsl:template match="em"> <xsl:text>{\em </xsl:text> <xsl:apply-templates/> <xsl:text>}</xsl:text> </xsl:template>
Beispiel eines XML Dokuments
Konversion nach HTML und LaTeX mit Xalan/Xerces
Struktur und Aufbau von XSLT Style Sheets
xsl:import
Einfügen von externen Definitionen (überschreibend)
xsl:include
Einfügen von externen Definitionen (kombinierend)
xsl:id
Definition von eindeutigen Bezeichnern
xsl:strip-space elements="..."
,
xsl:preserve-space elements="..."
Entfernen oder Einfügen von Leerraum im Inhalt
für bestimmter Elemente
xsl:variable
, xsl:param
Definition von Variablen und Parametern
xsl:key
Definition von Schlüsseln
xsl:decimal-format
,
xsl:namespace-alias
Definition von Zahlenformaten und Aliasen
xsl:attribute-set
definiert Liste von Attributen
xsl:output
Definition der Charakteristika der Ausgabe
xsl:template
Definition von Ersetzungsmustern
<xsl:template match="pattern">
Definition eines Erkennungsmusters
alles in (fast) beliebiger Reihenfolge im Top-Level
Aus Knoten (nodes) eines Dokuments werden Ergebnisknoten gebildet.
Knoten sind: Elemente, Attribute, etc.
match
und select
jetzt Spezifikation in XPath mit Erweiterungen durch XSLT eigene Funktionen
Erkennung erfolgt relativ zum aktuellen (current) Knoten
p1 | p2
mehrere Patterns als Alternativen
n1/n2
Kontextangabe, n2 als Subknoten von n1, eine Ebene
/
Root Knoten
n1//n2
Kontextangabe, n2 als Subknoten von n1, beliebig tiefere Ebene
*/p
Wildcard, p als Subknoten irgendwas
.
aktueller (current) Knoten
..
Elternknoten
@attname
selektiert ein bestimmtes Attribut
[ test ]
selektiert Knoten, für die "test" zu trifft
list[@type="ordered"]
selektiert Listen vom Typ "geordnet"
weitere Tests:
first-of-any()
,
last-of-any()
first-of-type()
,
last-of-type()
id(n)
, ancestor()
weitere Funktionen:
document(obj,ns)
,
key(string,obj)
,
format-number(num,string,string?)
,
Beispiel
section/list[@type="ordered" and last-of-type()]
Templates erzeugen Stil-Ausgabe und stossen die Verarbeitung von (Sub-) Knoten an.
Literale, die XSL nicht kennt, werden in den (Ausgabe-) Knoten kopiert
xsl:text
oder unbekannte Literale
erzeugen einen Text-Knoten
xsl:element name=".."
erzeugt einen extra Element-Knoten mit angegebenem Namen
xsl:attribute name=".."
erzeugt einen extra Attribut-Knoten mit angegebenem Namen
xsl:processing-instruction
erzeugt einen Processing-Instruktion-Knoten
<xsl:processing-instruction name="php">echo "Hallo"; </xsl:pi>erzeugt
<?php echo "Hallo"; ?>
xsl:comment
erzeugt einen Kommentar-Knoten
xsl:message terminate="yes"|"no"
erzeugt eine Nachricht und wartet ggf. auf Eingabe vom Anwender
xsl:apply-templates select="pattern"
allgemeiner Aufruf der Template-Verarbeitung
select="pattern"
ist (bei allen Verarbeitungstemplates)
optional, falls vorhanden werden nur Knoten des pattern-Typs
ausgewählt, sonst alle
xsl:for-each select="..."
Verarbeitung für alle (angegebenen) Subknoten
mode="bezeichnung"
wählt nur Templates mit dem gleichen mode-Attribut
xsl:sort order=(ascending|descending)
data-type=(text|number)
lang=language
case-order=(upper-first|lower-first)
Sortiert entsprechend den Kriterien in
xsl:apply-templates
und
xsl:for-each
xsl:number level=(single|multi|any)
count="bezeichner"
from="start-wert"
format="beispiel"
erzeugt Nummern-Knoten entsprechend den Vorgaben
format="beispiel"
erzeugt Nummernknoten entsprechend dem Format-Beispiel
beispiel=(1|A|a|i|I|001)
digit-group-sep=","
n-digits-per-group="3"
Einfügen von Werten in Ausgabetexte mit
{ }
z.B. src="{@attribut}"
oder
src="{$variable}"
xsl:if test="bedingung"
Verarbeitung nur falls die Bedingung wahr ist
xsl:choose
mit
xsl:when test="bedingung"
Verarbeitung wie in "switch" nur falls die Bedingung wahr ist
xsl:copy
Kopiert den aktuellen Knoten
xsl:value-of select="pattern"
berechnet den Wert des angegebenen Musters,
z.B. eines Attributs
xsl:constant name=".." value=".."
definiert (Literal-) Konstanten
Beispiele aus dem Camena Projekt.
Zunächst für Online und Druck-Dokumente.
Spezifikation der grundlegenden Elemente, ohne die Details einer Implementierung festzulegen.
Formatierung durch areas (wie box in CSS) und spaces (Zwischenräume).
fo:block
Formatierung eines Blocks mit diversen Attributen
fo:character
Formatierung eines Zeichens mit diversen Attributen
fo:display-graphic
Formatierung einer Grafik (z.B. GIF-Image) mit diversen Attributen
fo:list-block
Formatierung einer Liste von Blocks mit diversen Attributen
fo:list-item
Formatierung eines Listenelements mit diversen Attributen
background-color
Attribut für Hintergrundfarbe
font-style
Attribut für Schriftstil
© Universität Mannheim, Rechenzentrum, 1998-2002.
Heinz Kredel Last modified: Wed Dec 26 12:20:32 MET 2001