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