XML Kurs - Programmiersprachen · XML Kurs Markus Degen / Prof. Peter Thiemann 12. Oktober 2005...

55

Transcript of XML Kurs - Programmiersprachen · XML Kurs Markus Degen / Prof. Peter Thiemann 12. Oktober 2005...

Page 1: XML Kurs - Programmiersprachen · XML Kurs Markus Degen / Prof. Peter Thiemann 12. Oktober 2005 Markus Degen / Prof. Peter Thiemann XML Kurs 12. Oktober 2005 1 / 75

XML Kurs

Markus Degen / Prof. Peter Thiemann

12. Oktober 2005

Markus Degen / Prof. Peter Thiemann () XML Kurs 12. Oktober 2005 1 / 75

Page 2: XML Kurs - Programmiersprachen · XML Kurs Markus Degen / Prof. Peter Thiemann 12. Oktober 2005 Markus Degen / Prof. Peter Thiemann XML Kurs 12. Oktober 2005 1 / 75

1 XML

2 DTD

3 XPath

4 XSL

Markus Degen / Prof. Peter Thiemann () XML Kurs 12. Oktober 2005 2 / 75

Page 3: XML Kurs - Programmiersprachen · XML Kurs Markus Degen / Prof. Peter Thiemann 12. Oktober 2005 Markus Degen / Prof. Peter Thiemann XML Kurs 12. Oktober 2005 1 / 75

Was ist XML?

eXtensible Markup Language

beschreibt Daten

Ähnlichkeit mit HTMLde�nierbare logische Struktur:

I markierte, sortierte BäumeI keine Vorde�nirten Tags

mächtige Hyperlinkmöglichkeiten (XLink)

Transformationssprachen (XPath, XSL)

Markus Degen / Prof. Peter Thiemann () XML Kurs 12. Oktober 2005 3 / 75

Page 4: XML Kurs - Programmiersprachen · XML Kurs Markus Degen / Prof. Peter Thiemann 12. Oktober 2005 Markus Degen / Prof. Peter Thiemann XML Kurs 12. Oktober 2005 1 / 75

Unterschied zu HTML

XML beschreibt Daten/Inhalte

HTML stellt Daten/Inhalte dar

Markus Degen / Prof. Peter Thiemann () XML Kurs 12. Oktober 2005 4 / 75

Page 5: XML Kurs - Programmiersprachen · XML Kurs Markus Degen / Prof. Peter Thiemann 12. Oktober 2005 Markus Degen / Prof. Peter Thiemann XML Kurs 12. Oktober 2005 1 / 75

Beispiel: Wohlgeformtes XML Dokument

<?xml version="1.0"?><Eltern><Kind>Hier kommt der Inhalt.

</Kind><Leer warum="darum" />

</Eltern>

XML Deklaration: <?xml version="1.0"?>Elemente: Eltern, Kind, LeerÖ�nende Tags: <Eltern>, <Kind>Schlieÿende Tags: </Kind>, </Eltern>Leeres Element: <Leer />Attribut: warum="darum"

(im ö�nenden Tag, bzw. im Tag des leeren Elements)

Markus Degen / Prof. Peter Thiemann () XML Kurs 12. Oktober 2005 6 / 75

Page 6: XML Kurs - Programmiersprachen · XML Kurs Markus Degen / Prof. Peter Thiemann 12. Oktober 2005 Markus Degen / Prof. Peter Thiemann XML Kurs 12. Oktober 2005 1 / 75

Wohlgeformtheit (well-formedness)

Wohlgeformt heiÿt

XML Deklaration vorhanden

sämtliche Elemente haben ö�nendes und schlieÿendes Tag(oder <Leer />, falls kein Inhalt)

korrekte Schachtelung der Tags!

genau ein Wurzelelement vorhanden

jeder Attributname höchstens einmal pro Element

⇒ Dokument ist durch einen Baum repräsentierbar

Markus Degen / Prof. Peter Thiemann () XML Kurs 12. Oktober 2005 7 / 75

Page 7: XML Kurs - Programmiersprachen · XML Kurs Markus Degen / Prof. Peter Thiemann 12. Oktober 2005 Markus Degen / Prof. Peter Thiemann XML Kurs 12. Oktober 2005 1 / 75

Element Groÿ-/Kleinschreibung beachten!

Attribute müssen immer in Anführungsstrichen stehen!

falsch <note date=12/11/2002>

richtig <note date="12/11/2002">

Attributnamen müssen in einem Element eindeutig sein

Leerzeichen werden nicht entfernt!

Kommentare <!-- Kommentar -->

Markus Degen / Prof. Peter Thiemann () XML Kurs 12. Oktober 2005 8 / 75

Page 8: XML Kurs - Programmiersprachen · XML Kurs Markus Degen / Prof. Peter Thiemann 12. Oktober 2005 Markus Degen / Prof. Peter Thiemann XML Kurs 12. Oktober 2005 1 / 75

Baumdarstellung des Dokuments

Document

Element

Element

Eltern

Kind Leer

warum=...Hier ist ...Text Attribute

Element

Markus Degen / Prof. Peter Thiemann () XML Kurs 12. Oktober 2005 9 / 75

Page 9: XML Kurs - Programmiersprachen · XML Kurs Markus Degen / Prof. Peter Thiemann 12. Oktober 2005 Markus Degen / Prof. Peter Thiemann XML Kurs 12. Oktober 2005 1 / 75

Knotentypen in XML Dokumenten

(XPath Terminologie)

Node übergeordneter Knotentyp

Text enthält Text, keine Kinder

Element enthält andere Knoten als Kinder (insbesondere Text, Element),sowie Attribute (sind nicht Kinder). Kinder von Elementen sindgeordnet

Attribut Name/Wert-Paar anhängend an einem Elementknoten

Comment zählt weder zum Inhalt noch zur Struktur, keine Kinder

Processing Instruction Anweisung an XML-verarbeitendes Programm

Document Wurzelknoten eines XML Dokuments; enthält genau einElement, das Wurzelelement

Markus Degen / Prof. Peter Thiemann () XML Kurs 12. Oktober 2005 10 / 75

Page 10: XML Kurs - Programmiersprachen · XML Kurs Markus Degen / Prof. Peter Thiemann 12. Oktober 2005 Markus Degen / Prof. Peter Thiemann XML Kurs 12. Oktober 2005 1 / 75

Knoten eines Dokuments sind durch Dokumentenordnung totalgeordnet

gegeben durch Baumdurchlauf in preorder von links nach rechts

entsprechend der Reihenfolge in XML NotationBaumterminologie

I rootI siblingsI leavesI childrenI parentI descendantsI ancestors

Markus Degen / Prof. Peter Thiemann () XML Kurs 12. Oktober 2005 11 / 75

Page 11: XML Kurs - Programmiersprachen · XML Kurs Markus Degen / Prof. Peter Thiemann 12. Oktober 2005 Markus Degen / Prof. Peter Thiemann XML Kurs 12. Oktober 2005 1 / 75

Elementnamen

Elementnamen müssen die folgenden Bedingungen erfüllen

Namen bestehen aus Buchstaben, Zahlen und Sonderzeichen

Namen dürfen nicht mit einer Zahl oder einem Satzzeichen beginnen

Namen dürfen nicht mit den Buchstaben "xml" beginnen

Namen dürfen keine Leerzeichen enthalten

Markus Degen / Prof. Peter Thiemann () XML Kurs 12. Oktober 2005 12 / 75

Page 12: XML Kurs - Programmiersprachen · XML Kurs Markus Degen / Prof. Peter Thiemann 12. Oktober 2005 Markus Degen / Prof. Peter Thiemann XML Kurs 12. Oktober 2005 1 / 75

Gültigkeit eines XML Dokuments

muss die logische Struktur de�nieren

→ DTD (Document Type De�nition)

DTD ordnet jedem Elementnamen e einen regulären Ausdruck R(e)über Elementnamen zufalls <e><e1...><e2...>...<en...></e> in gültigem Dokumentvorkommt, so ist e1e2 . . . en ∈ L(R(e)).dh die Namen der Kindelemente von e müssen dem Ausdruck R(e)entsprechen

DTD ordnet jedem Elementnamen eine Menge von getyptenAttributen zu

DTD de�niert Abkürzungen (entities), die vom XML-Parser expandiertwerden

Markus Degen / Prof. Peter Thiemann () XML Kurs 12. Oktober 2005 13 / 75

Page 13: XML Kurs - Programmiersprachen · XML Kurs Markus Degen / Prof. Peter Thiemann 12. Oktober 2005 Markus Degen / Prof. Peter Thiemann XML Kurs 12. Oktober 2005 1 / 75

DTD Beispiel

<?xml version="1.0"?><!DOCTYPE ELTERN [

<!ELEMENT ELTERN (KIND*)><!ELEMENT KIND (MARKE?,NAME+)><!ELEMENT MARKE EMPTY><!ELEMENT NAME (NACHNAME+,VORNAME+)*><!ELEMENT NACHNAME (#PCDATA)><!ELEMENT VORNAME (#PCDATA)><!ATTLIST MARKE

NUMMER ID #REQUIREDGELISTET CDATA #FIXED "ja"TYP (natürlich|adoptiert) "natürlich">

<!ENTITY STATEMENT "Wohlgeformtes XML">]><ELTERN>&STATEMENT;<KIND><MARKE NUMMER="1" GELISTET="ja" TYP="natürlich" /><NAME><NACHNAME>Flavius</NACHNAME><VORNAME>Secundus</VORNAME>

</NAME></KIND>

</ELTERN>

Markus Degen / Prof. Peter Thiemann () XML Kurs 12. Oktober 2005 15 / 75

Page 14: XML Kurs - Programmiersprachen · XML Kurs Markus Degen / Prof. Peter Thiemann 12. Oktober 2005 Markus Degen / Prof. Peter Thiemann XML Kurs 12. Oktober 2005 1 / 75

Kopfzeilen einer XML Datei

Vorspann

<?xml version="1.0" encoding="UTF-8"?>

Spezi�kation einer internen DTD

<!DOCTYPE Name [

Element-, Attribut-, Entitydeklarationen

]>

Spezi�kation einer externen DTD

<!DOCTYPE root-element SYSTEM "filename">

Beispiel:

<!DOCTYPE HTML3

PUBLIC "-//IETF//DTD HTML Strict//EN//3.0"

"html-3s.dtd"

[ ggf. interne Deklarationen ]>

Markus Degen / Prof. Peter Thiemann () XML Kurs 12. Oktober 2005 17 / 75

Page 15: XML Kurs - Programmiersprachen · XML Kurs Markus Degen / Prof. Peter Thiemann 12. Oktober 2005 Markus Degen / Prof. Peter Thiemann XML Kurs 12. Oktober 2005 1 / 75

Aufbau einer DTD

Inhalte der XML Datei aus Sicht der DTD:

Elemente

Tags

Attribute

Entities

PCDATA

CDATA

Markus Degen / Prof. Peter Thiemann () XML Kurs 12. Oktober 2005 18 / 75

Page 16: XML Kurs - Programmiersprachen · XML Kurs Markus Degen / Prof. Peter Thiemann 12. Oktober 2005 Markus Degen / Prof. Peter Thiemann XML Kurs 12. Oktober 2005 1 / 75

Elementdeklaration

〈elementdecl〉 ::= <!ELEMENT 〈Name〉 〈contentspec〉>〈contentspec〉 ::= EMPTY | ANY | 〈Mixed〉 | 〈children〉

Produktion einer kf. Grammatik

〈Mixed 〉: #PCDATA und Elemente vermischt

〈children 〉: regulärer Ausdruck über Elementnamen;Operatoren , | ? + *

Markus Degen / Prof. Peter Thiemann () XML Kurs 12. Oktober 2005 19 / 75

Page 17: XML Kurs - Programmiersprachen · XML Kurs Markus Degen / Prof. Peter Thiemann 12. Oktober 2005 Markus Degen / Prof. Peter Thiemann XML Kurs 12. Oktober 2005 1 / 75

Element Beispiele

<!ELEMENT br EMPTY>

<!ELEMENT from (#PCDATA)>

<!ELEMENT note (to+,from,header?,(message|#PCDATA))*>

Markus Degen / Prof. Peter Thiemann () XML Kurs 12. Oktober 2005 20 / 75

Page 18: XML Kurs - Programmiersprachen · XML Kurs Markus Degen / Prof. Peter Thiemann 12. Oktober 2005 Markus Degen / Prof. Peter Thiemann XML Kurs 12. Oktober 2005 1 / 75

Attributdeklaration

〈AttlistDecl〉 ::= <!ATTLIST 〈Name〉 〈AttDef〉∗>〈AttDef〉 ::= 〈Name〉 〈AttType〉 〈DefaultDecl〉

〈AttType 〉 ::=

CDATA StringID eindeutiger SchlüsselIDREF, IDREFS Verweis(e) auf SchlüsselENTITY, ENTITIES Name(n) von EntitiesNMTOKEN, NMTOKENS ein oder mehrere Wörter(Nmtoken (| Nmtoken)∗) Aufzählungstyp

Markus Degen / Prof. Peter Thiemann () XML Kurs 12. Oktober 2005 21 / 75

Page 19: XML Kurs - Programmiersprachen · XML Kurs Markus Degen / Prof. Peter Thiemann 12. Oktober 2005 Markus Degen / Prof. Peter Thiemann XML Kurs 12. Oktober 2005 1 / 75

〈DefaultDecl 〉 ::=

#REQUIRED erforderlich| #IMPLIED nicht erforderlich, kein Default| "〈AttValue 〉" Defaultwert| #FIXED "〈AttValue 〉" fester Wert

Markus Degen / Prof. Peter Thiemann () XML Kurs 12. Oktober 2005 22 / 75

Page 20: XML Kurs - Programmiersprachen · XML Kurs Markus Degen / Prof. Peter Thiemann 12. Oktober 2005 Markus Degen / Prof. Peter Thiemann XML Kurs 12. Oktober 2005 1 / 75

Attribut Beispiele

<!ATTLIST payment type CDATA "check">

<!ATTLIST contact fax CDATA #IMPLIED>

<!ATTLIST payment type (check|cash) "cash">

Markus Degen / Prof. Peter Thiemann () XML Kurs 12. Oktober 2005 23 / 75

Page 21: XML Kurs - Programmiersprachen · XML Kurs Markus Degen / Prof. Peter Thiemann 12. Oktober 2005 Markus Degen / Prof. Peter Thiemann XML Kurs 12. Oktober 2005 1 / 75

Entity Deklaration

〈GEDecl〉 ::= <!ENTITY 〈Name〉 〈EntityDef〉 >〈EntityDef〉 ::= 〈EntityValue〉 | (〈ExternalID〉 〈NDataDecl〉?)

〈GEDecl 〉 general entityAbkürzungen, Dokumentenbausteine (auch von Dateien〈ExternalID 〉)<!ENTITY dd "Dagobert Duck">

Markus Degen / Prof. Peter Thiemann () XML Kurs 12. Oktober 2005 25 / 75

Page 22: XML Kurs - Programmiersprachen · XML Kurs Markus Degen / Prof. Peter Thiemann 12. Oktober 2005 Markus Degen / Prof. Peter Thiemann XML Kurs 12. Oktober 2005 1 / 75

Sonderzeichen

Entity References Character&lt; <&gt; >&amp; &&quot; "&apos; '

PCDATA parsed character data

CDATA character data

Markus Degen / Prof. Peter Thiemann () XML Kurs 12. Oktober 2005 26 / 75

Page 23: XML Kurs - Programmiersprachen · XML Kurs Markus Degen / Prof. Peter Thiemann 12. Oktober 2005 Markus Degen / Prof. Peter Thiemann XML Kurs 12. Oktober 2005 1 / 75

XML Namespaces

�Modulsystem für XML�Vermeidung von Namenskon�ikten bei Benutzung von

mehreren Quellen für Elementdeklarationen oder

mehreren Anwendungen mit dem gleichen Dokument

Markus Degen / Prof. Peter Thiemann () XML Kurs 12. Oktober 2005 27 / 75

Page 24: XML Kurs - Programmiersprachen · XML Kurs Markus Degen / Prof. Peter Thiemann 12. Oktober 2005 Markus Degen / Prof. Peter Thiemann XML Kurs 12. Oktober 2005 1 / 75

XML Path Language (XPath)

Ziel von XPath: Spezi�kation von Folgen von Knoten in XML-Dokument

Verwendung in URIs und Attributen

kompakte Syntax (nicht XML)

operiert auf logischer Struktur des Dokuments

einfache Berechnungen auf Ergebnismengen

weitere Verwendung in anderen XML-Standards: XSLT, XQuery,XPointer, XLink, XForms, . . .

XPath 1.0 ⊆ XPath 2.0

Markus Degen / Prof. Peter Thiemann () XML Kurs 12. Oktober 2005 28 / 75

Page 25: XML Kurs - Programmiersprachen · XML Kurs Markus Degen / Prof. Peter Thiemann 12. Oktober 2005 Markus Degen / Prof. Peter Thiemann XML Kurs 12. Oktober 2005 1 / 75

XPath-Sicht von XML

XML-Dokument ist ein Baum mit folgenden Knotenarten

Wurzel (Dokumentenknoten)

Element

Attribut

Text

Namespace

Verarbeitungsanweisungen <?name daten?>

Kommentare

Markus Degen / Prof. Peter Thiemann () XML Kurs 12. Oktober 2005 29 / 75

Page 26: XML Kurs - Programmiersprachen · XML Kurs Markus Degen / Prof. Peter Thiemann 12. Oktober 2005 Markus Degen / Prof. Peter Thiemann XML Kurs 12. Oktober 2005 1 / 75

Pfadausdrücke

Ein Pfadausdruck . . .

Folge von Schritten 〈Step 〉 getrennt durch /.

Absoluter Pfadausdruck beginnt mit /.

de�niert Folge von XML-Knoten.

〈LocationPath〉 ::= 〈RelativeLocationPath〉| 〈AbsoluteLocationPath〉

〈AbsoluteLocationPath〉 ::= /〈RelativeLocationPath〉?| 〈AbbreviatedAbsoluteLocationPath〉

〈RelativeLocationPath〉 ::= 〈Step〉| 〈RelativeLocationPath〉/〈Step〉| 〈AbbreviatedRelativeLocationPath〉

Markus Degen / Prof. Peter Thiemann () XML Kurs 12. Oktober 2005 31 / 75

Page 27: XML Kurs - Programmiersprachen · XML Kurs Markus Degen / Prof. Peter Thiemann 12. Oktober 2005 Markus Degen / Prof. Peter Thiemann XML Kurs 12. Oktober 2005 1 / 75

Location 〈Step 〉 besteht aus

Achse (traversierte Beziehung zwischen Knoten)

Knotentest (Typ und Name)

optionale Prädikate

〈Step〉 ::= 〈AxisSpecifier〉 〈NodeTest〉 〈Predicate〉∗| 〈AbbreviatedStep〉

〈AxisSpecifier〉 ::= 〈AxisName〉 ::| 〈AbbreviatedAxisSpecifier〉

Syntax:

axisname::nodetest[predicate]

Ergebnis eines Pfadausdrucks: Folge der Knoten (in Dokumentenordnung), die entlangder Achse erreicht werden, den Knotentest erfüllen und sämtliche Prädikate erfüllen

Markus Degen / Prof. Peter Thiemann () XML Kurs 12. Oktober 2005 33 / 75

Page 28: XML Kurs - Programmiersprachen · XML Kurs Markus Degen / Prof. Peter Thiemann 12. Oktober 2005 Markus Degen / Prof. Peter Thiemann XML Kurs 12. Oktober 2005 1 / 75

Beispiel: Rezepte

child::rcp:recipe[attribute::id='117'] /child::rcp:ingredient /attribute::amount

<rcp:recipe id='116'>...

</rcp:recipe><rcp:recipe id='117'>

...<rcp:ingredient amount='42'></rcp:ingredient>...<rcp:ingredient amount='4711'></rcp:ingredient>...

</rcp:recipe><rcp:recipe id='118'>

...</rcp:recipe>

Markus Degen / Prof. Peter Thiemann () XML Kurs 12. Oktober 2005 35 / 75

Page 29: XML Kurs - Programmiersprachen · XML Kurs Markus Degen / Prof. Peter Thiemann 12. Oktober 2005 Markus Degen / Prof. Peter Thiemann XML Kurs 12. Oktober 2005 1 / 75

Beispiel: Rezepte

child::rcp:recipe[attribute::id='117'] /child::rcp:ingredient /attribute::amount

<rcp:recipe id='116'>...

</rcp:recipe><rcp:recipe id='117'>

...<rcp:ingredient amount='42'></rcp:ingredient>...<rcp:ingredient amount='4711'></rcp:ingredient>...

</rcp:recipe><rcp:recipe id='118'>...

</rcp:recipe>

Markus Degen / Prof. Peter Thiemann () XML Kurs 12. Oktober 2005 37 / 75

Page 30: XML Kurs - Programmiersprachen · XML Kurs Markus Degen / Prof. Peter Thiemann 12. Oktober 2005 Markus Degen / Prof. Peter Thiemann XML Kurs 12. Oktober 2005 1 / 75

Beispiel: Rezepte

child::rcp:recipe[attribute::id='117'] /child::rcp:ingredient /attribute::amount

<rcp:recipe id='116'>...

</rcp:recipe><rcp:recipe id='117'>

...<rcp:ingredient amount='42'></rcp:ingredient>...<rcp:ingredient amount='4711'></rcp:ingredient>...

</rcp:recipe><rcp:recipe id='118'>...

</rcp:recipe>

Markus Degen / Prof. Peter Thiemann () XML Kurs 12. Oktober 2005 39 / 75

Page 31: XML Kurs - Programmiersprachen · XML Kurs Markus Degen / Prof. Peter Thiemann 12. Oktober 2005 Markus Degen / Prof. Peter Thiemann XML Kurs 12. Oktober 2005 1 / 75

Beispiel: Rezepte

child::rcp:recipe[attribute::id='117'] /child::rcp:ingredient /attribute::amount

<rcp:recipe id='116'>...

</rcp:recipe><rcp:recipe id='117'>

...<rcp:ingredient amount='42'></rcp:ingredient>...<rcp:ingredient amount='4711'></rcp:ingredient>...

</rcp:recipe><rcp:recipe id='118'>

...</rcp:recipe>

Markus Degen / Prof. Peter Thiemann () XML Kurs 12. Oktober 2005 41 / 75

Page 32: XML Kurs - Programmiersprachen · XML Kurs Markus Degen / Prof. Peter Thiemann 12. Oktober 2005 Markus Degen / Prof. Peter Thiemann XML Kurs 12. Oktober 2005 1 / 75

Alle XPath-Achsen

〈AxisName 〉 ::=

child � parent

descendant � ancestor

following-sibling � preceding-sibling

following � preceding

attribute

namespace

self

descendant-or-self � ancestor-or-self

Markus Degen / Prof. Peter Thiemann () XML Kurs 12. Oktober 2005 42 / 75

Page 33: XML Kurs - Programmiersprachen · XML Kurs Markus Degen / Prof. Peter Thiemann 12. Oktober 2005 Markus Degen / Prof. Peter Thiemann XML Kurs 12. Oktober 2005 1 / 75

Knotentests

〈NodeTest〉 ::= 〈NameTest〉| 〈NodeType〉()

〈NameTest〉 ::= * jeder Knoten| 〈NCName〉:* beliebiges Element in Namespace| 〈QName〉 benanntes Element

〈NodeType〉 ::= comment true, falls Kommentarknoten| text falls Textknoten| processing-instruction falls Verarbeitungsanweisung| node immer true

Markus Degen / Prof. Peter Thiemann () XML Kurs 12. Oktober 2005 44 / 75

Page 34: XML Kurs - Programmiersprachen · XML Kurs Markus Degen / Prof. Peter Thiemann 12. Oktober 2005 Markus Degen / Prof. Peter Thiemann XML Kurs 12. Oktober 2005 1 / 75

Prädikate

〈Predicate〉 ::= [〈Expr〉]

Für jeden durch Achse und 〈NodeTest 〉 selektierten Knoten wird Ausdruck〈Expr 〉 im Kontext ausgewertet. Ergebnis → Boolean. Falls Ergebnis false, wirdder Knoten verworfen.

Weitere Ausdrücke Boolesche Operationen, arithmetische Operationen,

Vergleichsoperationen, Stringoperationen (über Funktionsaufrufe), Operationen

auf Knotenmengen

Markus Degen / Prof. Peter Thiemann () XML Kurs 12. Oktober 2005 46 / 75

Page 35: XML Kurs - Programmiersprachen · XML Kurs Markus Degen / Prof. Peter Thiemann 12. Oktober 2005 Markus Degen / Prof. Peter Thiemann XML Kurs 12. Oktober 2005 1 / 75

Abkürzungen

In Location 〈Step 〉s gelten folgende Abkürzungen

child:: ist optional// für /descendant-or-self::node()/@ für attribute::. für self::node().. für parent::node()

〈AbbreviatedAbsoluteLocationPath〉 ::= //〈RelativeLocationPath〉〈AbbreviatedRelativeLocationPath〉 ::= 〈RelativeLocationPath〉//〈Step〉〈AbbreviatedStep〉 ::= . | ..〈AbbreviatedAxisSpecifier〉 ::= @?

Markus Degen / Prof. Peter Thiemann () XML Kurs 12. Oktober 2005 47 / 75

Page 36: XML Kurs - Programmiersprachen · XML Kurs Markus Degen / Prof. Peter Thiemann 12. Oktober 2005 Markus Degen / Prof. Peter Thiemann XML Kurs 12. Oktober 2005 1 / 75

Beispiele

/bookstore/book[1]

/bookstore/book[last()]

/bookstore/book[last()-1]

/bookstore/book[position()<3]

//title[@lang]

//title[@lang='eng']

/bookstore/book[price>35.00]/title

Markus Degen / Prof. Peter Thiemann () XML Kurs 12. Oktober 2005 48 / 75

Page 37: XML Kurs - Programmiersprachen · XML Kurs Markus Degen / Prof. Peter Thiemann 12. Oktober 2005 Markus Degen / Prof. Peter Thiemann XML Kurs 12. Oktober 2005 1 / 75

Extensible Stylesheet Language (XSL)

Was ist ein Stylesheet?Spezi�kation der Formatierung eines XML-Dokuments.

Wozu dient XSL?

XSLT Transformation von XML-DokumentenXSL-FO vorde�nierte Formatierungskomponenten

Vorgänger:

CSS (cascaded stylesheets)DSSSL (document stylesheet speci�cation language)

Markus Degen / Prof. Peter Thiemann () XML Kurs 12. Oktober 2005 49 / 75

Page 38: XML Kurs - Programmiersprachen · XML Kurs Markus Degen / Prof. Peter Thiemann 12. Oktober 2005 Markus Degen / Prof. Peter Thiemann XML Kurs 12. Oktober 2005 1 / 75

Vorgänger: CSS

Spezi�kation des physikalischen Layout zu einer logischen Struktur

Darstellung von (X)HTML und XML

Zuordnung: Element im Kontext → Stilmerkmal (Grösse, Font, Farbe,. . . )

Aktuelle Version CSS2.1; bald CSS3

Markus Degen / Prof. Peter Thiemann () XML Kurs 12. Oktober 2005 50 / 75

Page 39: XML Kurs - Programmiersprachen · XML Kurs Markus Degen / Prof. Peter Thiemann 12. Oktober 2005 Markus Degen / Prof. Peter Thiemann XML Kurs 12. Oktober 2005 1 / 75

Zuordnung: Dokument → CSS

Im <head> von XHTML Dokument

Intern durch <style> Element

<head><style type="text/css">p.special {color: green; border: solid red;}</style></head>

Extern durch Verweis auf CSS Datei

<head><link rel="stylesheet" href="style.css" type="text/css"/>

</head>

Markus Degen / Prof. Peter Thiemann () XML Kurs 12. Oktober 2005 52 / 75

Page 40: XML Kurs - Programmiersprachen · XML Kurs Markus Degen / Prof. Peter Thiemann 12. Oktober 2005 Markus Degen / Prof. Peter Thiemann XML Kurs 12. Oktober 2005 1 / 75

CSS Beispiele

p <p> Elementp.special <p> Element mit Attribut class="special".special Element mit CLASS="special"ul, p <p> oder <ul>#xy4711 nur Element mit id="xy4711"ul p <p> unterhalb von <ul>li > p <p> direkt unterhalb von <ul>a[title] <a> mit Attribut titlea[attr = "wert"] <a>, bei dem attr den Wert wert hata[attr �= "wert"] <a>, bei dem attr das Wort wert enthält

Markus Degen / Prof. Peter Thiemann () XML Kurs 12. Oktober 2005 53 / 75

Page 41: XML Kurs - Programmiersprachen · XML Kurs Markus Degen / Prof. Peter Thiemann 12. Oktober 2005 Markus Degen / Prof. Peter Thiemann XML Kurs 12. Oktober 2005 1 / 75

Beispiel: Anzeige von Visitenkarten

Visitenkarten liegen in XML Format vor

Gewünscht: Schönes Anzeigeformat

<card xmlns="http://businesscard.org">

<name>John Doe</name>

<title>CEO, Widget Inc.</title>

<email>[email protected]</email>

<phone>(202) 555-1414</phone>

<logo uri="widget.gif"/>

</card>

Markus Degen / Prof. Peter Thiemann () XML Kurs 12. Oktober 2005 55 / 75

Page 42: XML Kurs - Programmiersprachen · XML Kurs Markus Degen / Prof. Peter Thiemann 12. Oktober 2005 Markus Degen / Prof. Peter Thiemann XML Kurs 12. Oktober 2005 1 / 75

Visitenkarte mit CSS

Am Anfang von card.xml (Browser: Mozilla)<?xml-stylesheet type="text/css" href="card.css"?>

card.csscard { background-color: #cccccc; border: none; width: 300;}name { display: block; font-size: 20pt; margin-left: 0; }title { display: block; margin-left: 20pt;}email { display: block; font-family: monospace; margin-left: 20pt;}phone { display: block; margin-left: 20pt;}

Ergebnis

I Gleiche Reihenfolge

I Information in Attributen?

I Keine neue Strukturen

Markus Degen / Prof. Peter Thiemann () XML Kurs 12. Oktober 2005 57 / 75

Page 43: XML Kurs - Programmiersprachen · XML Kurs Markus Degen / Prof. Peter Thiemann 12. Oktober 2005 Markus Degen / Prof. Peter Thiemann XML Kurs 12. Oktober 2005 1 / 75

Visitenkarte mit XSLT

Am Anfang von card.xml (Browser: Mozilla)<?xml-stylesheet type="text/xsl" href="card.xsl"?>

Ergebnis

Markus Degen / Prof. Peter Thiemann () XML Kurs 12. Oktober 2005 58 / 75

Page 44: XML Kurs - Programmiersprachen · XML Kurs Markus Degen / Prof. Peter Thiemann 12. Oktober 2005 Markus Degen / Prof. Peter Thiemann XML Kurs 12. Oktober 2005 1 / 75

Beispiel: XSLT Formatierung der Visitenkarte

<?xml version="1.0" encoding="utf-8"?><xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"

version="2.0"xmlns:b="http://businesscard.org"xmlns="http://www.w3.org/1999/xhtml" >

<xsl:output method="html"/>

<!-- template rules on following slides -->

</xsl:stylesheet>

Markus Degen / Prof. Peter Thiemann () XML Kurs 12. Oktober 2005 60 / 75

Page 45: XML Kurs - Programmiersprachen · XML Kurs Markus Degen / Prof. Peter Thiemann 12. Oktober 2005 Markus Degen / Prof. Peter Thiemann XML Kurs 12. Oktober 2005 1 / 75

Beispiel: Template Rule Ia

<xsl:template match="b:card"><html><head><title><xsl:value-of select="b:name"/></title>

</head><body bgcolor="#FFFFFF"><table border="3"><tr><td><xsl:apply-templates select="b:name"/> <br/><xsl:apply-templates select="b:title"/> <br/><tt><xsl:apply-templates select="b:email"/></tt> <br/><xsl:if test="b:phone">

Phone: <xsl:apply-templates select="b:phone"/></xsl:if>

</td>

Markus Degen / Prof. Peter Thiemann () XML Kurs 12. Oktober 2005 62 / 75

Page 46: XML Kurs - Programmiersprachen · XML Kurs Markus Degen / Prof. Peter Thiemann 12. Oktober 2005 Markus Degen / Prof. Peter Thiemann XML Kurs 12. Oktober 2005 1 / 75

Beispiel: Template Rule Ib

<td><xsl:if test="b:logo">

<img src="{b:logo/@uri}"/></xsl:if>

</td></tr>

</table></body>

</html></xsl:template>

Markus Degen / Prof. Peter Thiemann () XML Kurs 12. Oktober 2005 64 / 75

Page 47: XML Kurs - Programmiersprachen · XML Kurs Markus Degen / Prof. Peter Thiemann 12. Oktober 2005 Markus Degen / Prof. Peter Thiemann XML Kurs 12. Oktober 2005 1 / 75

Beispiel: Template Rule II

<xsl:template match="b:name|b:title|b:email|b:phone"><xsl:value-of select="."/>

</xsl:template>

Eigentlich über�üssig, da durch Standardregeln abgedeckt

Markus Degen / Prof. Peter Thiemann () XML Kurs 12. Oktober 2005 66 / 75

Page 48: XML Kurs - Programmiersprachen · XML Kurs Markus Degen / Prof. Peter Thiemann 12. Oktober 2005 Markus Degen / Prof. Peter Thiemann XML Kurs 12. Oktober 2005 1 / 75

Überblick XSLT

XSLT-Prozessor:

Dokument abc.xml (mit stylesheet Direktive auf)

Stylesheet abc.xsl

1 (Baum-) Transformation von abc.xmlspezi�ziert durch Menge von TransformationsregelnRegel: Pattern → Template (wie funktionale Sprache)

2 Formatierung des Ergebnissesnach Abschluss der Transformationspezieller Namespace für FormatierungsobjekteEigenschaften (properties) für Farbe, Gröÿe, Font, usw

Markus Degen / Prof. Peter Thiemann () XML Kurs 12. Oktober 2005 67 / 75

Page 49: XML Kurs - Programmiersprachen · XML Kurs Markus Degen / Prof. Peter Thiemann 12. Oktober 2005 Markus Degen / Prof. Peter Thiemann XML Kurs 12. Oktober 2005 1 / 75

template

Das <xsl:template> Element erzeugt ein Template

Mit dem Attribut match wird das entsprechende xml-Element ausgewählt,für das das Template verwendet wird.

Beispiel: <xsl:template match="/">

Markus Degen / Prof. Peter Thiemann () XML Kurs 12. Oktober 2005 68 / 75

Page 50: XML Kurs - Programmiersprachen · XML Kurs Markus Degen / Prof. Peter Thiemann 12. Oktober 2005 Markus Degen / Prof. Peter Thiemann XML Kurs 12. Oktober 2005 1 / 75

value-of

Mit <xsl:value-of> wird der Inhalt eines Elementes extrahiert.

Beispiel: <xsl:value-of select="catalog/cd/title"/>

Markus Degen / Prof. Peter Thiemann () XML Kurs 12. Oktober 2005 69 / 75

Page 51: XML Kurs - Programmiersprachen · XML Kurs Markus Degen / Prof. Peter Thiemann 12. Oktober 2005 Markus Degen / Prof. Peter Thiemann XML Kurs 12. Oktober 2005 1 / 75

for-each

Mit <xsl:for-each> werden alle Elemente einer Knotenmenge betrachtet.

Beispiel: <xsl:for-each select="catalog/cd">

Markus Degen / Prof. Peter Thiemann () XML Kurs 12. Oktober 2005 70 / 75

Page 52: XML Kurs - Programmiersprachen · XML Kurs Markus Degen / Prof. Peter Thiemann 12. Oktober 2005 Markus Degen / Prof. Peter Thiemann XML Kurs 12. Oktober 2005 1 / 75

sort

Mit <xsl:sort> können die Elemente sortiert ausgegeben werden.

Beispiel: <xsl:sort select="artist"/>

Markus Degen / Prof. Peter Thiemann () XML Kurs 12. Oktober 2005 71 / 75

Page 53: XML Kurs - Programmiersprachen · XML Kurs Markus Degen / Prof. Peter Thiemann 12. Oktober 2005 Markus Degen / Prof. Peter Thiemann XML Kurs 12. Oktober 2005 1 / 75

if

<xsl:if> ermöglicht Bedingungen.

Beispiel: <xsl:if test="price &gt; 10">

Markus Degen / Prof. Peter Thiemann () XML Kurs 12. Oktober 2005 72 / 75

Page 54: XML Kurs - Programmiersprachen · XML Kurs Markus Degen / Prof. Peter Thiemann 12. Oktober 2005 Markus Degen / Prof. Peter Thiemann XML Kurs 12. Oktober 2005 1 / 75

choose

<xsl:choose> ermöglicht Bedingungen mit mehreren Verzweigungen.

Beispiel:

<xsl:choose><xsl:when test="price &gt; 10">...

</xsl:when><xsl:when test="price &gt; 9 and price &lt;= 10">...

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

</xsl:otherwise></xsl:choose>

Markus Degen / Prof. Peter Thiemann () XML Kurs 12. Oktober 2005 74 / 75

Page 55: XML Kurs - Programmiersprachen · XML Kurs Markus Degen / Prof. Peter Thiemann 12. Oktober 2005 Markus Degen / Prof. Peter Thiemann XML Kurs 12. Oktober 2005 1 / 75

apply-templates

Mit <xsl:apply-templates> werden andere Templates für dasentsprechende Element aufgerufen.

Beispiel: <xsl:apply-templates select="title"/>

Markus Degen / Prof. Peter Thiemann () XML Kurs 12. Oktober 2005 75 / 75