Programmierung mit XML - userpageslaemmel/oopm/slides/xml.pdf · (C) Ralf Lämmel, OOPM,...

Preview:

Citation preview

(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

Programmierung mit XMLOOPM, Ralf Lämmel

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

XML-Programmierung ist mit “eckigen Klammern”

beschäftigt.

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

Motivierende Szenarien für die Programmierung mit XML

1055

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

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

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

(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

(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

(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”?

(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

(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.” :-)

(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

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

(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

(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

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

(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

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

(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

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

Das SAX-Rahmenwerk

Quelle: Armstrong: “Working with XML”

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

(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

(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

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

(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

(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

(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

(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

(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

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

Der DOM-Ansatz

Quelle: Armstrong: “Working with XML”

(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

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

(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

(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

(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

(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

“/” “//”

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

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

(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

(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

(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

Recommended