programmierung mit xml - userpageslaemmel/oopm/slides/xml.pdf · (c) ralf lämmel, oopm,...

41
(C) Ralf Lämmel, OOPM, Universität Koblenz-Landau Programmierung mit XML XML als Austausch- und Speicherformat. Anwendungsbeispiele: Ein XML-Parser für Formen Darstellung betrieblicher Organisationsstrukturen Befragen der Strukturen Transformation der Strukturen Java-basierte Programmiermodelle SAX-basierte Parser mit Ereignisverarbeitung DOM-basierte Prozessoren mit XML-Bäumen Programmiermodelle ausserhalb der OOP XPath: Achsen-basierte Anfragen XSLT: Funktionale, Template-basierte Transformationen 1053

Upload: dangtuong

Post on 06-Feb-2018

224 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Programmierung mit XML - userpageslaemmel/oopm/slides/xml.pdf · (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau Programmierung mit XML XML als Austausch- und Speicherformat

(C) Ralf Lämmel, OOPM, Universität Koblenz-Landau

Programmierung mit XML

XML als Austausch- und Speicherformat.Anwendungsbeispiele:

Ein XML-Parser für Formen Darstellung betrieblicher Organisationsstrukturen

Befragen der StrukturenTransformation der Strukturen

Java-basierte ProgrammiermodelleSAX-basierte Parser mit EreignisverarbeitungDOM-basierte Prozessoren mit XML-Bäumen

Programmiermodelle ausserhalb der OOPXPath: Achsen-basierte AnfragenXSLT: Funktionale, Template-basierte Transformationen

1053

Page 2: Programmierung mit XML - userpageslaemmel/oopm/slides/xml.pdf · (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau Programmierung mit XML XML als Austausch- und Speicherformat

Programmierung mit XMLOOPM, Ralf Lämmel

http://www.budgetrobotics.com/shop/images/160.gif

XML-Programmierung ist mit “eckigen Klammern”

beschäftigt.

Page 3: Programmierung mit XML - userpageslaemmel/oopm/slides/xml.pdf · (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau Programmierung mit XML XML als Austausch- und Speicherformat

(C) Ralf Lämmel, OOPM, Universität Koblenz-Landau

Motivierende Szenarien für die Programmierung mit XML

1055

Page 4: Programmierung mit XML - userpageslaemmel/oopm/slides/xml.pdf · (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau Programmierung mit XML XML als Austausch- und Speicherformat

(C) Ralf Lämmel, OOPM, Universität Koblenz-Landau

Ein XML-Parser für Formen

1056

Illustration eines XML-Parsers; siehe Repository: oo.shapes.awtish

Objekte für Formen

“Parser”

Page 5: Programmierung mit XML - userpageslaemmel/oopm/slides/xml.pdf · (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau Programmierung mit XML XML als Austausch- und Speicherformat

(C) Ralf Lämmel, OOPM, Universität Koblenz-Landau 1057

<company> <department> <name>Development</name> <manager> <name>Merlin</name> <salary>9999</salary> </manager> <subdepartment> <label>iPhone 6</label> <manager> <name>Douglas</name> <salary>4200</salary> </manager> <employee> <name>Peter</name> <salary>4241</salary> </employee> </subdepartment>

. . .

Befragen und Transformieren betrieblicher Organisationsstrukturen

Wir wollen z.B. alle Gehälter aufsummieren oder halbieren.

Page 6: Programmierung mit XML - userpageslaemmel/oopm/slides/xml.pdf · (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau Programmierung mit XML XML als Austausch- und Speicherformat

(C) Ralf Lämmel, OOPM, Universität Koblenz-Landau

XML -- Grundlagen

1058

Wir können nebenbei den XML-Ansatz zur Modellierung ein wenig mit OOP

und OOM sowie textbasierten Softwaresprachen vergleichen.

Page 7: Programmierung mit XML - userpageslaemmel/oopm/slides/xml.pdf · (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau Programmierung mit XML XML als Austausch- und Speicherformat

(C) Ralf Lämmel, OOPM, Universität Koblenz-Landau

Brauchen wir XML, wenn wir Objekte haben?

Ein paar Thesen:– Anwendungen basieren auf verschiedenen Sprachen und Plattformen.– Anwendungen müssen Daten über Dateien oder anders austauschen.– Objekte sollen oft auch in “offener” Weise serialisiert werden.– XML eignet sich gut zur direkten Bearbeitung durch Menschen.

Schlussfolgerungen:– Wir müssen Daten sprach- und platfformunabhängig modellieren können.– Wir brauchen ein verständliches Format für Speicherung und Austausch.

Wir brauchen so etwas wie XML.

XML = eXtensible Markup Language

1059

Page 8: Programmierung mit XML - userpageslaemmel/oopm/slides/xml.pdf · (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau Programmierung mit XML XML als Austausch- und Speicherformat

(C) Ralf Lämmel, OOPM, Universität Koblenz-Landau 1060

Beispiel eines XML-Dokumentes

<?xml version="1.0"?><weatherReport> <date>7/14/97</date> <city>North Place</city>, <state>NX</state> <country>USA</country> High Temp: <high scale="F">103</high> Low Temp: <low scale="F">70</low> Morning: <morning>Partly cloudy, Hazy</morning> Afternoon: <afternoon>Sunny &amp; hot</afternoon> Evening: <evening>Clear and Cooler</evening></weatherReport>

XML-Deklaration

Wurzelelement

Start-Tag

Ende-Tag

Attribut

Text

Entität

Quelle: XML: A Primer, by Simon St. Laurent

Page 9: Programmierung mit XML - userpageslaemmel/oopm/slides/xml.pdf · (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau Programmierung mit XML XML als Austausch- und Speicherformat

(C) Ralf Lämmel, OOPM, Universität Koblenz-Landau

Eine Fangfrage

1061

Attribute versus Elemente: Wann verwendet man die Einen, wann die Anderen? Was sind hier die “best practices”?

Page 10: Programmierung mit XML - userpageslaemmel/oopm/slides/xml.pdf · (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau Programmierung mit XML XML als Austausch- und Speicherformat

(C) Ralf Lämmel, OOPM, Universität Koblenz-Landau

Beispiele XML-basierter Sprachen aus Anwendungsbereichen

• FpML – Financial products Markup Language

• HL7 – Standard im Gesundheitswesen

• MathML – Mathematical Markup Language

• XHTML – HTML definiert in XML

• … und Tausende andere Sprachen …

1062

Page 11: Programmierung mit XML - userpageslaemmel/oopm/slides/xml.pdf · (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau Programmierung mit XML XML als Austausch- und Speicherformat

(C) Ralf Lämmel, OOPM, Universität Koblenz-Landau

XML-Technologien und Standards

• XML-Standards 1.0 und 1.1.

• XML namespaces -- ein Standard zur Namensqualifizierung in XML-Dokumenten.

• DTD (Document Type Definition; Teil des XML-Standard) und XML Schema und Relax

NG (als separate Standards) sind Schemasprachen, welche zur Definition spezifischer

XML-Sprachen verwendet werden.

• CSS (Cascading Style Sheets) unterstützt die Web-Programmierung mit XML/HTML.

• XPath, XSLT und XQuery sind Anfrage- und Transformationssprachen für XML.

• DOM (Document Object Model) ist eine sprachunabhängige API zur XML-

Programmierung. Es gibt auch eine Java-basierte Implementation.

• SAX (Simple API for XML, und JAXP (Java API for XML Processing) sind weitere Java-

basierte APIs zur XML-Programmierung.

• ...

1063

“XML is good for job security.” :-)

Page 12: Programmierung mit XML - userpageslaemmel/oopm/slides/xml.pdf · (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau Programmierung mit XML XML als Austausch- und Speicherformat

(C) Ralf Lämmel, OOPM, Universität Koblenz-Landau

Baumform von XML

<?xml version="1.0"?><!DOCTYPE menu SYSTEM "menu.dtd"><menu> <meal name="breakfast"> <food>Scrambled Eggs</food> <food>Hash Browns</food> <drink>Orange Juice</drink> </meal> <meal name="snack"> <food>Chips</food> </meal></menu>

menu

meal

name

"breakfast"

food

"ScrambledEggs"

food

"HashBrowns"

drink

"OrangeJuice"

meal

Genaugenommen gibt es auch Möglichkeiten, Knoten mit Identitäten zu versehen und diese anderswo zu referenzieren. Der Basisansatz benutzt aber keine Identitäten.

1064

Page 13: Programmierung mit XML - userpageslaemmel/oopm/slides/xml.pdf · (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau Programmierung mit XML XML als Austausch- und Speicherformat

(C) Ralf Lämmel, OOPM, Universität Koblenz-Landau

Wohlgeformheit von XML

• Ein Dokument hat genau ein Wurzelelement.

• Es gibt eine Ende-Tag </foo> für jeden Start-Tag <foo>.

• Leere Element können abgekürzt werden: <foo/>.

• Elemente müssen ordentlich verschachtelt werden.

• Attributewerte müssen in “...” eingeschlossen werden.

• …

1065

Können wir uns eine entsprechende Syntaxdefinition für XML vorstellen?

Page 14: Programmierung mit XML - userpageslaemmel/oopm/slides/xml.pdf · (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau Programmierung mit XML XML als Austausch- und Speicherformat

(C) Ralf Lämmel, OOPM, Universität Koblenz-Landau

Weitere Bestandteile von XML

• Kommentare:z.B.: <!-- This is a comment. -->– Kommentare können überall auftreten.– Sie sollten nicht als XML-Daten angesehen werden.– Sie müssen aber oft in Programmrepräsentationen bewahrt werden.

• “Processing instructions”:z.B.: <?xml-stylesheet type="text/css" href="mySheet.css"?>– Diese Deklarationen instruieren Verarbeitungsprozessoren.– Sie können überall auftreten, aber werden oft zuerst erwähnt.

• ...

1066

Page 15: Programmierung mit XML - userpageslaemmel/oopm/slides/xml.pdf · (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau Programmierung mit XML XML als Austausch- und Speicherformat

(C) Ralf Lämmel, OOPM, Universität Koblenz-Landau

Namensräume (“namespaces”)

• Der XML-Ansatz zur Namensqualifikation.• Analog zu der Paket-basierten Qualifizierung in Java.• Namensräume sind Strings -- typischerweise URLs.• Zwei Formen von Namensräumen:

– Verwendung einer “default namespace declaration”:<name xmlns=“http://www.publishers.com”>• Alle inneren Elemente erben den Namensraum.• Lokale Qualifikation (“Überschreibung”) ist möglich.

– Verwendung einer “namespace prefix declaration”:<np:name xmlns:np=“http://www.publishers.com”>

1067

Page 16: Programmierung mit XML - userpageslaemmel/oopm/slides/xml.pdf · (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau Programmierung mit XML XML als Austausch- und Speicherformat

(C) Ralf Lämmel, OOPM, Universität Koblenz-Landau

Optionen zum Programmieren mit XML innerhalb von OOP

1068

Wir wollen verstehen, wie der XML-Bereich der Programmierung mit dem

objektorientierten Paradigma verschmilzt.

Page 17: Programmierung mit XML - userpageslaemmel/oopm/slides/xml.pdf · (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau Programmierung mit XML XML als Austausch- und Speicherformat

(C) Ralf Lämmel, OOPM, Universität Koblenz-Landau

Optionen zur XML-Programmierung innerhalb von OOP

XML-Unterstützung in Programmiersprachen

VB 9.0, ...

APIs für push-basierte Parser

Java’s SAX, ...

APIs für pull-basierte Parser

.NET’s XmlReader, Java’s StAX, ...

APIs für Baum-basierte XML-Verarbeitung im Speicher.

W3C DOM, Java’s JDOM, .NET’s LinqToXml

...

1069

Page 18: Programmierung mit XML - userpageslaemmel/oopm/slides/xml.pdf · (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau Programmierung mit XML XML als Austausch- und Speicherformat

(C) Ralf Lämmel, OOPM, Universität Koblenz-Landau

XML-Unterstützung in VB9

1070

Unterstützung für XML-Literale

Ein “Loch” für einen Ausdruck Ein Eingabedokument xmlDoc mit

Kontakten wird in ein Ausgabedokumenten mit Email-

Adressen umgewandelt.

Page 19: Programmierung mit XML - userpageslaemmel/oopm/slides/xml.pdf · (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau Programmierung mit XML XML als Austausch- und Speicherformat

(C) Ralf Lämmel, OOPM, Universität Koblenz-Landau

XML-Programmierung mit SAX(SAX=Simple API for XML)

• SAX ist ein Rahmenwerk (eine Bibliothek) zur XML-Verarbeitung.

• Die damit erstellten Prozessoren heissen “Parser”.

• SAX analysiert die Eingabe auf der Basis von Ereignissen.

• Typische Ereignisse:

• Open Element

• Close Element

• Face Text

• Ein SAX-Programm (Parser) definiert Ereignisbehandler.

1071

Page 20: Programmierung mit XML - userpageslaemmel/oopm/slides/xml.pdf · (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau Programmierung mit XML XML als Austausch- und Speicherformat

(C) Ralf Lämmel, OOPM, Universität Koblenz-Landau 1072

Das SAX-Rahmenwerk

Quelle: Armstrong: “Working with XML”

Page 21: Programmierung mit XML - userpageslaemmel/oopm/slides/xml.pdf · (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau Programmierung mit XML XML als Austausch- und Speicherformat

(C) Ralf Lämmel, OOPM, Universität Koblenz-Landau

Ein XML-Parser für Formen

1073

Illustration eines XML-Parsers; siehe Repository: oo.shapes.awtish

Objekte für Formen

“Parser”

Page 22: Programmierung mit XML - userpageslaemmel/oopm/slides/xml.pdf · (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau Programmierung mit XML XML als Austausch- und Speicherformat

(C) Ralf Lämmel, OOPM, Universität Koblenz-Landau

XML-Ereignisse

Arten von Ereignissen

Beginn eines XML-Elements.

Ende eines XML-Elements.

Antreffen ein Text-Segment.

1074

Page 23: Programmierung mit XML - userpageslaemmel/oopm/slides/xml.pdf · (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau Programmierung mit XML XML als Austausch- und Speicherformat

(C) Ralf Lämmel, OOPM, Universität Koblenz-Landau

XML-Ereignisse

Konkreter Ereignisstrom

1. Beginn <figure>

2. Beginn <rectangle>3. Beginn <x>

4. Text “0”5. Ende </x>

6. Beginn <y>7. Text “0”

8. Ende </y>9. ...

1075

Page 24: Programmierung mit XML - userpageslaemmel/oopm/slides/xml.pdf · (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau Programmierung mit XML XML als Austausch- und Speicherformat

(C) Ralf Lämmel, OOPM, Universität Koblenz-Landau

Arbeitsweise des Parsers für Formen

1076

Zustand

Ein Bild-Kontainer (Instanz der Klasse Figure)

x, y, width, height, radius (wie in Rectangle und Circle)

Puffer für Text

Ereignisbehandlung

<rectangle>: Initialisieren von x, y, width und height.

</rectangle>: Konstruktion eines Viereckes

<circle> und </circle>: analog für Kreise

Text: Puffern

<x>: Leeren des Textpuffers

</x>: Konvertieren von Textpuffer und Speichern in x

Tags <y>, <width>, ... analog.

Page 25: Programmierung mit XML - userpageslaemmel/oopm/slides/xml.pdf · (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau Programmierung mit XML XML als Austausch- und Speicherformat

(C) Ralf Lämmel, OOPM, Universität Koblenz-Landau

Grobe Struktur der Klasse zur Behandlung von XML-Ereignissen

1077

public class XmlParser extends DefaultHandler { private StringBuffer text = null; private Integer x = null; private Integer y = null; private Integer width = null; private Integer height = null; private Integer radius = null;

public static List<Shape> parse(String pathname) {... Open file and start event processing ...

} public void startElement(..., String qName, Attributes attrs ) { ... Reset text buffer ... } public void endElement(..., String qName ) {

... Create shape or buffer part thereof ... } public void characters(char[] buf, int offset, int len) {

... Buffer text ... }}

Ereignis-behandlung

Aufruf des Parsers

Objektkonstruktion immer am Ende von

XML-Elementen

Page 26: Programmierung mit XML - userpageslaemmel/oopm/slides/xml.pdf · (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau Programmierung mit XML XML als Austausch- und Speicherformat

(C) Ralf Lämmel, OOPM, Universität Koblenz-Landau 1078

public void endElement( String namespaceURI, String localName, String qName ) {

if (qName.equals("rectangle")) { figure.createRectangle(x,y,width,height); clean(); return; } if (qName.equals("circle")) { ... }

if (qName.equals("x")) { x = Integer.parseInt(text.toString()); text = null; return; } if (qName.equals("y")) { ... } if (qName.equals("width")) { ... } if (qName.equals("height")) { ... } if (qName.equals("radius")) { ... } }

Analog zux

Analog zu rectangle

Page 27: Programmierung mit XML - userpageslaemmel/oopm/slides/xml.pdf · (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau Programmierung mit XML XML als Austausch- und Speicherformat

(C) Ralf Lämmel, OOPM, Universität Koblenz-Landau

Detaillierte Diskussion der Implementation oo.shapes.awtish

1.Figuren als Container von Formen.

2.Figuren als Fabriken von Formen.

3.Ansetzen eines XML-Parsers auf eine Datei.

4. Imperative Aspekte der Ereignis-Verarbeitung.

5.AWT-Funktionalität für graphische Formen.

1079

Page 28: Programmierung mit XML - userpageslaemmel/oopm/slides/xml.pdf · (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau Programmierung mit XML XML als Austausch- und Speicherformat

(C) Ralf Lämmel, OOPM, Universität Koblenz-Landau 1080

<company> <department> <name>Development</name> <manager> <name>Merlin</name> <salary>9999</salary> </manager> <subdepartment> <label>iPhone 6</label> <manager> <name>Douglas</name> <salary>4200</salary> </manager> <employee> <name>Peter</name> <salary>4241</salary> </employee> </subdepartment>

. . .

Befragen und Transformieren betrieblicher Organisationsstrukturen

Wir wollen alle Gehälter aufsummieren oder halbieren.

SAX-Demohttp://101companies.org/wiki/Contribution:sax

Page 29: Programmierung mit XML - userpageslaemmel/oopm/slides/xml.pdf · (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau Programmierung mit XML XML als Austausch- und Speicherformat

(C) Ralf Lämmel, OOPM, Universität Koblenz-Landau

XML-Programmierung mit DOM(DOM=Document Object Model)

• DOM ist eine Bibliothek (ein Objektmodell) für XML-Bäume.• Dies sind die zentralen Typen des Objektmodells:

– Document– Attribute– Node: Element, Text, Comment, ...

• Die zugehörige API unterstützt verschiedene Aspekte:– Konstruktion von Bäumen– Navigation (Besuch, Absuchen) von Bäumen– Modifikation von Bäumen– Lesen und Schreiben von Bäumen über Ströme

1081

Page 30: Programmierung mit XML - userpageslaemmel/oopm/slides/xml.pdf · (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau Programmierung mit XML XML als Austausch- und Speicherformat

(C) Ralf Lämmel, OOPM, Universität Koblenz-Landau 1082

Der DOM-Ansatz

Quelle: Armstrong: “Working with XML”

Page 31: Programmierung mit XML - userpageslaemmel/oopm/slides/xml.pdf · (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau Programmierung mit XML XML als Austausch- und Speicherformat

(C) Ralf Lämmel, OOPM, Universität Koblenz-Landau 1083

<company> <department> <name>Development</name> <manager> <name>Merlin</name> <salary>9999</salary> </manager> <subdepartment> <label>iPhone 6</label> <manager> <name>Douglas</name> <salary>4200</salary> </manager> <employee> <name>Peter</name> <salary>4241</salary> </employee> </subdepartment>

. . .

Befragen und Transformieren betrieblicher Organisationsstrukturen

Wir wollen alle Gehälter aufsummieren oder halbieren.

DOM-Demohttp://101companies.org/wiki/Contribution:dom

Page 32: Programmierung mit XML - userpageslaemmel/oopm/slides/xml.pdf · (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau Programmierung mit XML XML als Austausch- und Speicherformat

(C) Ralf Lämmel, OOPM, Universität Koblenz-Landau

Optionen zum Programmieren mit XML ausserhalb von OOP

1084

Wir wollen verstehen, wie der XML-Bereich der Programmierung spezifisch unterstützt

wird -- ohne OOP vorauszusetzen.

Page 33: Programmierung mit XML - userpageslaemmel/oopm/slides/xml.pdf · (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau Programmierung mit XML XML als Austausch- und Speicherformat

(C) Ralf Lämmel, OOPM, Universität Koblenz-Landau

Optionen zur XML-Programmierung ausserhalb von OOP

XML-fokussierte Sprachlösungen

XPath

XSLT

XQuery

...

Verschmelzung von XML und anderen Programmierparadigmen

1085

Page 34: Programmierung mit XML - userpageslaemmel/oopm/slides/xml.pdf · (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau Programmierung mit XML XML als Austausch- und Speicherformat

(C) Ralf Lämmel, OOPM, Universität Koblenz-Landau

XML-Programmierung mit XPath

• XPath ist eine Sprache speziell für XML-Anfragen.

• Anfragen werden aus “Achsen” zusammengesetzt:

• Kinder-Achse (child axis)

• Vorgänger-Achse (ancestor axis)

• Nachfolger-Achse (descendant axis)

• Nachbar-Achse (sibling axis)

• ...

1086

Page 35: Programmierung mit XML - userpageslaemmel/oopm/slides/xml.pdf · (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau Programmierung mit XML XML als Austausch- und Speicherformat

(C) Ralf Lämmel, OOPM, Universität Koblenz-Landau 1087

Selektieren von Gehältern mit XPath

• Alle Gehälter:

//salary• Gehälter aller Manager:

“//manager/salary”

Descendant Axis

Child Axis

Page 36: Programmierung mit XML - userpageslaemmel/oopm/slides/xml.pdf · (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau Programmierung mit XML XML als Austausch- und Speicherformat

(C) Ralf Lämmel, OOPM, Universität Koblenz-Landau 1088

Die XPath-AchsenAxisName Resultancestor Selects all ancestors (parent, grandparent, etc.) of the current node

ancestor-or-self Selects all ancestors (parent, grandparent, etc.) of the current node and the current node itself

attribute Selects all attributes of the current node

child Selects all children of the current nodedescendant Selects all descendants (children, grandchildren, etc.) of the current node

descendant-or-self Selects all descendants (children, grandchildren, etc.) of the current node and the current node itself

following Selects everything in the document after the closing tag of the current node

following-sibling Selects all siblings after the current node

namespace Selects all namespace nodes of the current node

parent Selects the parent of the current nodepreceding Selects everything in the document that is before the start tag of the current node

preceding-sibling Selects all siblings before the current node

self Selects the current node

“/” “//”

Page 37: Programmierung mit XML - userpageslaemmel/oopm/slides/xml.pdf · (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau Programmierung mit XML XML als Austausch- und Speicherformat

(C) Ralf Lämmel, OOPM, Universität Koblenz-Landau 1089

<company> <department> <name>Development</name> <manager> <name>Merlin</name> <salary>9999</salary> </manager> <subdepartment> <label>iPhone 6</label> <manager> <name>Douglas</name> <salary>4200</salary> </manager> <employee> <name>Peter</name> <salary>4241</salary> </employee> </subdepartment>

. . .

Befragen betrieblicher Organisationsstrukturen

Wir wollen alle Gehälter aufsummieren.

XPath-Demohttp://101companies.org/wiki/Contribution:xpathAPI

Unter Verwendung von Einbettung von XPath in Java.

Page 38: Programmierung mit XML - userpageslaemmel/oopm/slides/xml.pdf · (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau Programmierung mit XML XML als Austausch- und Speicherformat

(C) Ralf Lämmel, OOPM, Universität Koblenz-Landau

XML-Programmierung mit XSLT

• XSLT ist eine Sprache speziell für die XML-Transformation.

• XSLT ist zugleich auch eine XML-Sprache.

• XSLT beinhaltet XPath und verwendet es zur Knotenauswahl.

• XSLT ist eine funktionale Sprache:

• Es gibt keine Objekte.

• Es gibt keine Variablen.

• Es gibt Funktionen.

• Es gibt Muster-basierte Fallunterscheidung.

1090

Funktionen bzw. Fälle werden in sogenannten

Templates programmiert.

Page 39: Programmierung mit XML - userpageslaemmel/oopm/slides/xml.pdf · (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau Programmierung mit XML XML als Austausch- und Speicherformat

(C) Ralf Lämmel, OOPM, Universität Koblenz-Landau 1091

Halbieren von Gehältern mit XSLT

<xsl:stylesheet> <xsl:template match="salary"> <xsl:copy> <xsl:value-of select=". div 2"/> </xsl:copy> </xsl:template> <xsl:template match="@*|node()"> <xsl:copy> <xsl:apply-templates select="@*|node()"/> </xsl:copy> </xsl:template></xsl:stylesheet>

Tag-spezifisches Template

Generisches Template

Rekursion für die Kinder

Page 40: Programmierung mit XML - userpageslaemmel/oopm/slides/xml.pdf · (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau Programmierung mit XML XML als Austausch- und Speicherformat

(C) Ralf Lämmel, OOPM, Universität Koblenz-Landau 1092

<company> <department> <name>Development</name> <manager> <name>Merlin</name> <salary>9999</salary> </manager> <subdepartment> <label>iPhone 6</label> <manager> <name>Douglas</name> <salary>4200</salary> </manager> <employee> <name>Peter</name> <salary>4241</salary> </employee> </subdepartment>

. . .

Befragen und Transformieren betrieblicher Organisationsstrukturen

Wir wollen alle Gehälter aufsummieren oder halbieren.

XSLT-Demohttp://101companies.org/wiki/Contribution:xslt

Page 41: Programmierung mit XML - userpageslaemmel/oopm/slides/xml.pdf · (C) Ralf Lämmel, OOPM, Universität Koblenz-Landau Programmierung mit XML XML als Austausch- und Speicherformat

(C) Ralf Lämmel, OOPM, Universität Koblenz-Landau

Zusammenfassung

XML-Programmierung

Innerhalb von OOP: SAX, DOM

Ausshalb von OOP: XPath, XSLT

Szenarien:

Serialisierung, Datenaustausch

Vorteile

Sprach- und Plattformunabhängigkeit

(Unterstützung von semi-strukturierten Daten)

Ausblick

Prüfungsvorbereitung und Prüfung

Mehr Kurse