Upload
others
View
14
Download
0
Embed Size (px)
Citation preview
Web Technologien – XML, XQuery, XPath und XSLT
Univ.-Prof. Dr.-Ing. Wolfgang Maass Chair in Information and Service Systems Department of Law and Economics WS 2011/2012 Wednesdays, 8:00 – 10:00 a.m. Room HS 021, B4 1
Univ.-Prof. Dr.-Ing. Wolfgang Maass
06.12.11 Slide 2
Wrap-Up
• NoSQL Datenbanken liefern konkrete und besser angepasste Lösungen für spezielle Probleme bei der Datenhaltung
• NoSQL Datenbank verzichten hierfür teilweise auf die Komplexität klassischer Datenbanken
Univ.-Prof. Dr.-Ing. Wolfgang Maass
06.12.11 Slide 3
XML, XQuery, XPath und XSLT
Was ist XML? • Akronym für eXtensible Markup Language • Syntax zum hierarchischen strukturieren von Dokumenten und Daten • Basis für viele Erweiterungen, z.B.
– Namensräume – Stylesheets – Hyperlinks – Schemata
• Standardisiert durch das W3C Was sind XQuery, XPath und XSLT? Ø Werkzeuge zum Umgang mit XML
Univ.-Prof. Dr.-Ing. Wolfgang Maass
06.12.11 Slide 4
Warum XML?
• Einfach – ...zu lesen durch Menschen – ...zu verarbeiten durch Maschinen – ...zu generieren
• Erweiterbar – XML ist nur generische Syntax – Zusatz-Standards nutzen diese Syntax (z.B. XHTML, RDF)
• Standardisiert – Weithin akzeptiertes Format – Lizenzfrei und plattformunabhängig – Werkzeuge stehen für beinahe jede Programmiersprache zur Verfügung
Univ.-Prof. Dr.-Ing. Wolfgang Maass
06.12.11 Slide 5
Syntax von XML
• Zu Beginn des Dokumentes steht die XML-Deklaration mit Informationen für den Parser
• Wie bei HTML ist das Dokument strukturiert durch verschachtelte Elemente mit Attributen
• Durch Namensräume können Bedeutungsräume geschaffen und Namenskonflikte gelöst werden
• Unstrukturierte Inhalte können mittels CDATA-Element integriert werden
• Alle Zeichen im Zeichensatz außer den Steuerungszeichen sind erlaubt, selbige müssen codiert werden
• XML ist „case-sensitive“
Steuerungszeichen: & à & < à < > à > ' à ' " à ‘‘
Univ.-Prof. Dr.-Ing. Wolfgang Maass
06.12.11 Slide 6
Strukturierte Daten in XML
<?xml version="1.0" encoding="UTF-8"?> <rezept xmlns:lm="http://lebensmittel.org"> <zutaten anzahl="3"> <lm:zutat>Ei</lm:zutat> <lm:zutat>Mehl</lm:zutat> <lm:zutat>Salz</lm:zutat> </zutaten> <anleitung> Alles zusammen- rühren und backen. </anleitung> <foto><![CDATA[BELIEBIGE DATEN]]> </foto> </rezept>
Textuelle Darstellung
Ei Mehl Salz Alles zusammen- rühren und backen.
rezept
zutaten anleitung
Graphische Darstellung
{ anzahl="3" }
zutat zutat zutat
Univ.-Prof. Dr.-Ing. Wolfgang Maass
06.12.11 Slide 7
Wohlgeformtheit von XML
• Wohlgeformtheit Dokument entspricht den syntaktischen Regeln
– Genau ein Dokument-Element – Jedes öffnende Element hat ein schließendes Element – Die Verschachtelung ist balanciert
Beispiel: Gegenbeispiel: <A><B><C>...</C></B></A> <A><B><C>...</A>...</C>
• Validität
Dokument ist – wohlgeformt – konform zu einer Document Type Description (DTD) oder
XML Schema Definition (XSD)
Univ.-Prof. Dr.-Ing. Wolfgang Maass
06.12.11 Slide 8
Validierung durch DTD und XSD
• Erlauben die Beschreibung der Validitätsregeln für ein XML-Dokument
• XSD wird im Gegensatz zu DTD ebenfalls direkt als XML beschrieben • XSD ist der Nachfolger von DTD und erlaubt eine erheblich umfassendere
Beschreibung der Validitätsregeln, diese umfassen: • (Komplexe) Elemente • Attribute • Typisierung • Listen • Restriktionen
<?xml version="1.0" encoding="ISO-8859-1" ?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="Buch" maxOccurs="unbounded"> <xs:complexType> <xs:sequence> <xs:element name="Titel" type="xs:string"/> <xs:element name="Verlag" type="xs:string" minOccurs="0"/> <xs:element name="Anzahl" type="xs:positiveInteger"/> <xs:element name="Preis" type="xs:decimal"/> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>
Univ.-Prof. Dr.-Ing. Wolfgang Maass
06.12.11 Slide 9
Werkzeuge zur Verarbeitung von XML
XML Path Language - XPath: • Pfadbasierte Selektion einzelner Datenknoten im XML Dokument • Filterung nach Knotentests und Prädikaten
XML Dokument
Dem XPath Ausdruck entsprechendes Teilstück
des XML Dokument, z.B.: nur bestimmte
Unterknoten mit bestimmten Werten
XPath Ausdruck
Univ.-Prof. Dr.-Ing. Wolfgang Maass
06.12.11 Slide 10
XPath Beispiele
<?xml version="1.0" encoding="UTF-8"?> <rezepte> <rezept schwierigkeit="3"> <titel>Pfannkuchen</titel> <zutaten anzahl="2"> <zutat>Ei</zutat> <zutat>Mehl</zutat> </zutaten> <anleitung>Alles zusammenrühren und backen.</anleitung> </rezept> <rezept schwierigkeit="1"> <titel>Eischaum</titel> <zutaten anzahl="2"> <zutat>Ei</zutat> <zutat>Salz</zutat> </zutaten> <anleitung>Gut durchmischen</anleitung> </rezept> </rezepte>
/rezepte à Das erste Element „rezepte“ //rezepte/rezept à Alle Elemente „rezept“ die innerhalb des eines
Elements „rezepte“ liegen
//rezept[1]/zutaten à Die Zutaten des ersten Rezeptes
//rezept[@schwierigkeit = '3'] à Alle Rezepte deren Schwierigkeit 3 ist
child::* à Alle unterhalb des aktuellen Knoten liegenden
Knoten //rezept/titel/text() à Die Titel aller Rezepte
Univ.-Prof. Dr.-Ing. Wolfgang Maass
06.12.11 Slide 11
Werkzeuge zur Verarbeitung von XML
XML Query Language - XQuery: • SQL-ähnliche Abfrage von Daten eines XML Dokuments • Diverse Abfragearten (z.B. sequenzbasierte FLWOR Ausdrücke (gespr.
„Flower“) oder CRUD) in Kombination mit XPath Ergebnissen
XML Dokument
Rückgabewert des XQuery Ausdruck nach Bezug der entsprechenden
XML Teilstücke und Verarbeitung der
Sequenzbeschreibungen
XQuery Ausdruck
Univ.-Prof. Dr.-Ing. Wolfgang Maass
06.12.11 Slide 12
XQuery Abfragen und Funktionen
• FLWOR Abfragen erlauben die sequenzbasierte Abfrage von Daten: • for definiert die Abfragesequenz • let ermöglicht die Deklaration weiterer Variablen • where ermöglicht die Einschränkung der Ergebnisse • order by ermöglicht die Sortierung der Ergebnisse • return definiert das Format er Ergebnisse
• CRUD Funktionalität: • Insert node ... into erlaubt das einfügen von Knoten • Delete node erlaubt das löschen von Knoten • Replace node ... with ermöglicht das Ändern von Knoten
• XQuery unterstützt Funktionen mit mehreren Übergabeparametern und einem Rückgabeparameter zur Kapselung mehrfach verwendeter Funktionalität
Univ.-Prof. Dr.-Ing. Wolfgang Maass
06.12.11 Slide 13
XQuery Beispiele
<?xml version="1.0" encoding="UTF-8"?> <rezepte> <rezept schwierigkeit="3"> <titel>Pfannkuchen</titel> <zutaten anzahl="2"> <zutat>Ei</zutat> <zutat>Mehl</zutat> </zutaten> <anleitung>Alles zusammenrühren und backen.</anleitung> </rezept> <rezept schwierigkeit="1"> <titel>Eischaum</titel> <zutaten anzahl="2"> <zutat>Ei</zutat> <zutat>Salz</zutat> </zutaten> <anleitung>Gut durchmischen</anleitung> </rezept> </rezepte>
for $rezept in //rezept where $rezept/zutaten/@anzahl > 1 order by $rezept/@schwierigkeit ascending return <li>{$rezept/titel/text()}</li> à Abfrage aller Rezept-Titel von Rezepten mit mehr
als einer Zutat als HTML-Liste, sortiert nach der Schwierigkeit
insert node <rezept><titel>Omlett</titel></rezept> into /rezepte à Hinzufügen eines neuen Rezeptes delete node //rezepte/rezept[3] à Löschen des 3. Rezeptes replace node //rezepte/rezept[3] with <rezept><titel>Blub</titel></rezept> à Ändern eines Rezeptes
Univ.-Prof. Dr.-Ing. Wolfgang Maass
06.12.11 Slide 14
Werkzeuge zur Verarbeitung von XML
EXtensible Stylesheet Language (Transformation) - XSL(T): • Programmiersprache zur Transformation von in XML strukturierten Daten
in beliebige Ausgabedokumente (z.B. XML, HTML, PDF, RTF...) unter zu Hilfenahme von XPath
• Das Stylesheet kann direkt im XML Dokument referenziert werden
XML Dokument Vom Parser verarbeit-
tetes Dokument mit den Ergebnissen der XSL
Befehlen nach deren Abarbeitung
XSLT Prozessor
Dokument mit XSL Befehlen
Univ.-Prof. Dr.-Ing. Wolfgang Maass
06.12.11 Slide 15
XSLT Kontrollstrukturen
Wie klassische Programmiersprachen unterstützt auch XSLT diverse Kontrollstrukturen: • Schleifen:
<xsl:for-each select="rezepte/rezept">...</xsl:for-each> • Bedingungen:
<xsl:if test=“@anzahl > 0">...</xsl:if> • Fallunterscheidung:
<xsl:choose> <xsl:when select="rezepte/rezept">...</xsl:when> <xsl:otherwise>...</xsl:otherwise> </xsl:choose>
Univ.-Prof. Dr.-Ing. Wolfgang Maass
06.12.11 Slide 16
XSLT Templates
• Templates beschreiben Formatierungsvorlagen welche auf eine bestimmte Menge von XML Knoten ausgeführt werden
• Templates können mittels „match“ definiert auf eine durch XPath definierte Menge von Knoten ausgeführt werden indem „apply-templates“ ausgeführt wird
• Templates können mittels „name“ definiert expliziert mit bestimmten Knoten aufgerufen werden indem „call-template“ ausgeführt wird
• Wird ein Template über den Namen aufgerufen können Parameter mit „with-param“ übergeben werden und im Template mittels „param“ verwendet werden
Univ.-Prof. Dr.-Ing. Wolfgang Maass
06.12.11 Slide 17
XSLT Template Beispiel (1)
<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet href="Rezepte.xsl" type="text/xsl"?> <rezepte> <rezept schwierigkeit="3"> <titel>Pfannkuchen</titel> <zutaten anzahl="2"> <zutat>Ei</zutat> <zutat>Mehl</zutat> </zutaten> <anleitung>Alles zusammenrühren und backen.</anleitung> </rezept> <rezept schwierigkeit="1"> <titel>Eischaum</titel> <zutaten anzahl="2"> <zutat>Ei</zutat> <zutat>Salz</zutat> </zutaten> <anleitung>Gut durchmischen</anleitung> </rezept> </rezepte>
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <html><body> <h1>Rezepte</h1> <xsl:apply-templates select="rezepte/rezept"/> </body></html> </xsl:template> <xsl:template match="//rezept"> <h2><xsl:value-of select="titel"/></h2> [...] </xsl:template> </xsl:stylesheet>
Rezepte.xml
Rezepte.xsl
Univ.-Prof. Dr.-Ing. Wolfgang Maass
06.12.11 Slide 18
XSLT Template Beispiel (2)
<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet href="Alternativ.xsl" type="text/xsl"?> <rezepte> <rezept schwierigkeit="3"> <titel>Pfannkuchen</titel> <zutaten anzahl="2"> <zutat>Ei</zutat> <zutat>Mehl</zutat> </zutaten> <anleitung>Alles zusammenrühren und backen.</anleitung> </rezept> <rezept schwierigkeit="1"> <titel>Eischaum</titel> <zutaten anzahl="2"> <zutat>Ei</zutat> <zutat>Salz</zutat> </zutaten> <anleitung>Gut durchmischen</anleitung> </rezept> </rezepte>
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <html><body> <h1>Rezepte</h1> <xsl:for-each select="rezepte/rezept"> <xsl:call-template name="rezept"> <xsl:with-param name="rTitel" select="titel"/> </xsl:call-template> </xsl:for-each> </body></html> </xsl:template> <xsl:template name="rezept"> <xsl:param name="rTitel"/> <h2><xsl:value-of select="$rTitel"/></h2> [...] </xsl:template> </xsl:stylesheet>
Rezepte.xml
Alternativ.xsl
Univ.-Prof. Dr.-Ing. Wolfgang Maass
06.12.11 Slide 19
Literatur
Bücher: • Doug Tidwell
XSLT, O'Reilly Media ISBN-10: 0596527217, ISBN-13: 978-0596527211
• Elliotte Rusty Harold, W. Scott Means XML in a Nutshell, O'Reilly Media ISBN-10: 0596007647, ISBN-13: 978-0596007645
Web: • http://www.w3.org/XML/ • http://www.w3.org/TR/xpath/ • http://www.w3.org/TR/xquery/ • http://www.w3.org/TR/xslt20/ • http://www.xml.com/
Univ.-Prof. Dr.-Ing. Wolfgang Maass
Univ.-Prof. Dr.-Ing. Wolfgang Maass Chair in Information and Service Systems Saarland University, Germany