1 / 69

Verarbeiten und Präsentieren von XML -Dokumenten Einführung in XPATH und XSLT

Verarbeiten und Präsentieren von XML -Dokumenten Einführung in XPATH und XSLT. Historie: Mit dem Ziel XML-Dokumente präsentieren zu können, wurde vom W3C die Extensible Style Sheet Language (XSL) entwickelt Neben der Ausgabeformatierung sollte XSL auch

clay
Download Presentation

Verarbeiten und Präsentieren von XML -Dokumenten Einführung in XPATH und XSLT

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Verarbeiten und Präsentieren von XML -Dokumenten Einführung in XPATH und XSLT

  2. Historie: Mit dem Ziel XML-Dokumente präsentieren zu können, wurde vom W3C die Extensible Style Sheet Language (XSL) entwickelt Neben der Ausgabeformatierung sollte XSL auch den Bereich Selektion und Transformation von Elementen eines Dokumentes beinhalten Aufgrund der Komplexität des Entwurfes wurden die Themen Selektion und Transformation in eigenen Entwürfen bearbeitet

  3. Historie: Aus dem ursprünglichen XSL - Entwurf entstanden die Entwürfe für -XPATH für Selektion von Daten aus einem XML-Dokument und -XSLT (Extensible Style Sheet Language Transformation) für die Transformation von XML-Dokumenten

  4. XPATH (XML Path Language) -Adressierung einzelner Teile eines XML-Dokumentes -Ausrichtung an der Baumstruktur eines XML-Dokumentes-Ausdrucksweise / Formulierung nicht in XML-Syntax: Orientierung an den Pfadangaben in URLs (Doppelpunkt / Backslash)

  5. XPATH (XML Path Language) -Anwendung in XPointer („XPointer, which is based on the XML Path Language (XPath, supports addressing into the internal structures of XML documents. It allows for traversals of a document tree and choice of its internal parts based on various properties, such as element types, attribute values, character content, and relative position.“) -Anwendung in XSLT Auswahl eines Elementes oder mehrerer Elemente zur Transformation

  6. XPATH (XML Path Language) XPATH orientiert sich an der logischen Baumstruktur eines Dokumentes Wurzelknoten ist das XML-Dokument selber Dokument-knoten Knoten Aktueller Knoten Achse

  7. XPATH (XML Path Language) Mit XPATH Ausdrücken kann: - eine bestimmte Menge an Knoten (node set) aus einem XML-Dokument selektiert werden-ein boolescher Wert ermittelt werden (true/false) -ein Fließkommazahl zurückgegeben werden oder -eine Zeichenkette

  8. XPATH (XML Path Language) Die Auswertung eines Ausdrucks hängt vom Umfeld / Kontext ab: wichtig: -der aktuelle Knoten = Context Node -die Position eines Knotens im Baum

  9. XPATH (XML Path Language)Ein Dokument wird immer in einer bestimmten Richtung vom Prozessor verarbeitet. Diese Reihenfolge wird als Document Order bezeichnet Document Order:

  10. XPATH (XML Path Language)Für die Verarbeitung können verschiedenen Achsen im Dokumentbaum bestimmt werden: ancestor: Diese Achse umfasst alle Vorfahren-Knoten (ancestor). Der context-node gehört nicht zur Achse context-node

  11. XPATH (XML Path Language)ancestor-or-self: Diese Achse umfasst alle Vorfahren-Knoten (ancestor). Der context-node gehört mit zur Achse context node

  12. XPATH (XML Path Language)parent: Diese Achse umfasst den Eltern-Knoten (parent). Alle Knoten mit Ausnahme vom Wurzelknoten haben genau einen Eltern-Knoten. Der context-node gehört nicht mit zur Achse Context node

  13. XPATH (XML Path Language)self: Diese Achse umfasst nur den context-node context-node

  14. XPATH (XML Path Language)child: Diese Achse umfasst alle direkten Kinder des context-nodes. Der context-node ist nicht Bestandteil der Achse context-node

  15. XPATH (XML Path Language)descendant: Diese Achse umfasst alle Nachkommen des context-nodes. Der context-node ist nicht Bestandteil der Achse Context-node

  16. XPATH (XML Path Language)descendant-or-self: Diese Achse umfasst alle Nachkommen des context-nodes. Der context-node ist mit Bestandteil der Achse Context-node

  17. XPATH (XML Path Language)following-sibling: Diese Achse umfasst alle folgenden Geschwister des context-nodes. Der context-node ist nicht Bestandteil der Achse Context-node

  18. XPATH (XML Path Language)preceding-sibling: Diese Achse umfasst alle vorhergehenden Geschwister des context-nodes. Der context-node ist nicht Bestandteil der Achse Context-node

  19. XPATH (XML Path Language)following: Diese Achse umfasst alle Knoten nach dem context-node außer den Nackommen des context-nodes. Der context-node ist nicht Bestandteil der Achse Context-node

  20. XPATH (XML Path Language)preceding: Diese Achse umfasst alle Knoten vor den context-node außer den Vorfahren des context-nodes. Der context-node ist nicht Bestandteil der Achse Context-node

  21. XPATH (XML Path Language)Zusammenfassung der Achsen: ancestorancestor-or-selfchilddescendantdescendant-or-self followingfollowing-siblingparentprecedingpreceding-siblingself Es existieren ausserdem noch zwei weitere Achsen: attribute(Attribute des context-nodes) namespace(Deklarationen des Namensraums)Diese Achsen lassen sich in der Baumdarstellung nur schlecht realisieren

  22. XPATH (XML Path Language)Pfadangaben: In XPath Ausdrücken können relative und absolute Pfadangaben verwendet werden: / Beginnt der Pfad mit einem Slash handelt es sich um einen absoluten Pfad, es wird also nicht vom context-node ausgegangen (/A/B ist z.B. eine absolute Pfadangabe). Der Slash für sich allein gestellt bezeichnet den Wurzelknoten. . bezeichnet den context Node (self).. bezeichnet den parent node (parent) * Wildcard (z.B. /A/*) // mit dem doppelten Schrägstrich lassen sich Elemente unabhängig vom Pfad im Dokument selektieren (wobei der Elementname nach dem doppelten Slash angegeben werden muss. Z.B.: //vorname)

  23. XPATH (XML Path Language)Knotentest:-Zur Erstellung eines XPath-Ausdrucks ist neben der Spezifizierung der Achsen, auch die Auswahl der Knoten entlang einer Achse notwendig. -Dies geschieht durch den sogenannten Knotentest (node test) -Knoten sind vor allem die Elemente in einem XML Dokument und der Knotentest wird anhand des Elementnamens durchgeführt -Erlaubt ist auch das * als Wildcard, um alle Knoten entlang einer Achse auszuwählen

  24. XPATH (XML Path Language)XPath-Ausdrücke:-Xpath-Ausdrücke werden in sogenanntenLocation Steps notiert-Ein Location Steps hat folgende Syntax: AxisName::NodeTest [ predicate ] (Achse::Knotentest [ Prädikat ]) -Die Auswahl der Knoten läßt sich mit Hilfe eines Prädikats noch verfeinern. Das Prädikat wird in eckigen Klammen an AxisName::NodeTest angehängt

  25. XPATH (XML Path Language)Beispiele für XPath-Ausdrücke:child::brief mit diesem Ausdruck werden alle Elemente mit dem Namen brief unterhalb des aktuellen Knotens ausgewählt Axis-Name: child node test: brief

  26. XPATH (XML Path Language)Beispiele für XPath-Ausdrücke:child::* mit diesem Ausdruck werden alle Kindelemente des aktuellen Knotens ausgewählt /descendant::adresse mit diesem Ausdruck werden alle Elemente mit Namen adresse im gesamten Dokument selektiert. Der Slash vor dem axis name leitet einen absoluten Pfad ein. Hier wird also nicht vom context-node ausgegangen

  27. XPATH (XML Path Language)Prädikate:Die Auswahl von Elementen kann mit Prädikaten weiter verfeinert werden Ein einfaches Prädikat ist die Angabe eines numerischen Ausdrucks um ein bestimmtes Element zu selektieren: child::Verfasser[2] Angenommen ein Element hat mehrere Kind- Elemente mit Namen Verfasser, dann selektiert dieser Ausdruck das 2. Verfasser-Element

  28. XPATH (XML Path Language)Prädikate:Ein anderes Beispiel für ein Prädikat: nummer[mobil] ->selektiert die nummer-Kindelemente, die ein oder mehrere mobil-Kindelemente habenAttribute://@id ->Attribut-Abfrage: wählt alle Elemente aus, die ein Attribut id haben

  29. XPATH (XML Path Language)Deutsche, kommentierte Übersetzung: www.informatik.hu-berlin.de/~obecker/obqo/w3c-trans/xpath-de/Übungen: www.zvon.org/xxl/XPathTutorial/General/examples.html

  30. XSLT(Extensible Style Sheet Language Transformation) XSLT transformiert XML-Dokumente oder Teile von XML-Dokumenten in eine andere Form (z.B. anderes XML-Format, HTML, MathML) Bei der Transformation ist folgendes zu beachten: -eine Transformation ist nicht unbedingt umkehrbar-eine Transformation kann zu Informationsverlust führen-aus einem transformierten Dokument ist das Ursprungsdokument nicht rekonstruierbar

  31. XSLT(Extensible Style Sheet Language Transformation) Um eine Transformation durchzuführen werden -ein XML Dokument -und eine Stylesheet-Datei benötigt In der Stylesheet-Datei befinden sich die Transformationsvorschriften Der Transformationsprozess beginnt immer beim Wurzelelement und verarbeitet dann das Dokument in der Dokument-Order.

  32. XSLT(Extensible Style Sheet Language Transformation) Die Transformation wird durch den XSLT-Prozessor durchgeführt. Eine Liste von XSLT-Prozessoren findet man unter: http://www.xslt.com/xslt_tools.htmHinweis: Der I.E. 5.x besitzt auch einen XSLT Prozessor, z.T. werden aber veraltete Entwürfe von XSLT / XPATH unterstützt. Eine Übersicht der von MSXML unterstützte Befehle findet man unter:http://www.topxml.com/xsl/xsltref.asp

  33. XSLT(Extensible Style Sheet Language Transformation) Gegeben ist folgende DTD: <?xml version="1.0" encoding="UTF-8"?> <!ELEMENT adressbuch (Person+)> <!ELEMENT Person (Name+,Email*)> <!ELEMENT Name (Vorname+, Nachname)> <!ELEMENT Email (#PCDATA)> <!ELEMENT Vorname (#PCDATA)> <!ELEMENT Nachname (#PCDATA)>

  34. XSLT(Extensible Style Sheet Language Transformation)XML-Beispiel: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE adressbuch SYSTEM "C:\XML\adressbuch.dtd"> <?xml-stylesheet type="text/xsl" href="C:\XML\adressbuch2.xsl"?> <adressbuch> <Person> <Name> <Vorname>Rainer</Vorname> <Vorname>Maria</Vorname> <Nachname>Rilke</Nachname> </Name> <Email>Rilke@gmx.de</Email> </Person> <Person> <Name> <Vorname>Friedrich</Vorname> <Nachname>Schiller</Nachname> </Name> </Person> </adressbuch>

  35. XSLT(Extensible Style Sheet Language Transformation)Beispiel für ein Stylesheet:<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format"> <xsl:output method="html"/> <xsl:template match="/"> <html><head><title>Adressbuch</title></head> <body> <xsl:apply-templates select="descendant::Email"/> </body></html> </xsl:template> <xsl:template match="Email"> <font color="red"><p></p> <xsl:value-of select="."/> </font> </xsl:template> </xsl:stylesheet>

  36. XSLT(Extensible Style Sheet Language Transformation) Erläuterung:<?xml version="1.0" encoding="UTF-8"?> Ein Stylesheet ist immer ein echtes XML - Dokument, deshalb wird mit der XML-Deklaration begonnen.

  37. XSLT(Extensible Style Sheet Language Transformation) Erläuterung:<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format"> Danach wird das Wurzelelement des Stylesheets angegeben, das Wurzelelement ist immer <xsl:stylesheet> Als Attribut folgt dann die Angabe der XSLT-Version und die Angabe der Namensräume für die XSLT-Spezifikation

  38. XSLT(Extensible Style Sheet Language Transformation) Erläuterung:<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format"> In der Attributangabe:xmlns:xsl="http://www.w3.org/1999/XSL/Transform"wird für das Präfix xsl: der Namensraum "http://www.w3.org/1999/XSL/Transform"deklariert. Damit stammt jedes Element, das mit xsl: beginnt aus dem Sprachumfang von XSLT.

  39. XSLT(Extensible Style Sheet Language Transformation) Erläuterung:<xsl:output method="html"/> Die Ausgabe-Methode wird mit dem Element xsl:output festgelegt. Erlaubte Methoden sind xml, html, text. Allerdings ist es auch möglich, weitere Methoden hinzuzufügen. Diese Methoden müssen aber dann durch Namensräume qualifiziert sein.

  40. XSLT(Extensible Style Sheet Language Transformation) Erläuterung:<xsl:template match="/"> <html><head><title>Adressbuch</title></head> <body> <xsl:apply-templates select="descendant::Email"/> </body></html> </xsl:template> Ausgegangen bei der Bearbeitung wird immer vom Wurzelknoten, deshalb sucht der XSLT-Prozessor nach einer Vorlage (einem Template) für den Wurzelkoten: <xsl:template match="/">

  41. XSLT(Extensible Style Sheet Language Transformation) Erläuterung:<xsl:template match="/"> <html><head><title>Adressbuch</title></head> <body> <xsl:apply-templates select="descendant::Email"/> </body></html> </xsl:template> Ist der Wurzelknoten gefunden, wird bis zum Ende des aktuellen Templates alles ausgegeben.Zwischen <body> und </body> stößt der Prozessor auf den Befehl:<xsl:apply-templates select="descendant::Email"/>

  42. XSLT(Extensible Style Sheet Language Transformation) Erläuterung:<xsl:apply-templates select="descendant::Email"/> Mit diesem Befehl wird der Prozessor angewiesen, nach einem Template für Nachkommen (descendant) des aktuellen Knotens zu suchen, die den Namen “Email“ tragen. Dieses Template soll dann an dieser Stelle eingefügt werden.

  43. XSLT(Extensible Style Sheet Language Transformation) Erläuterung: Der Prozessor findet nun folgendes Template: <xsl:template match="Email"> <font color="red"><p></p> <xsl:value-of select="."/> </font> </xsl:template> Nun wird der Inhalt des gefundenen Templates ausgegeben bzw. an der richtigen Stelle im Stylesheet eingefügt. Bei der Ausgabe stößt der Prozessor auf folgende Zeile:<xsl:value-of select="."/>

  44. XSLT(Extensible Style Sheet Language Transformation) Erläuterung: <xsl:value-of select="."/> Mit diesem Befehl wird der Wert (value-of) des Elementes selektiert (select) , der durch den XPATH-Ausdruck "."angeben ist, in diesem Falle wird durch den XPATH-Ausdruck der aktuelle Knoten ausgewählt. Die Wert des Email-Elementes ist: Rilke@gmx.de und wird im Template eingefügt.

  45. XSLT(Extensible Style Sheet Language Transformation) Erläuterung: Danach wird der Rest des Templates ausgegeben: </body></html> und anschließend die HTML Datei erzeugt: <html> <head> <meta content="text/html; charset=utf-8" http- equiv="content-type"> <title>Adressbuch</title> </head> <body> <font color="red"> <p></p>Rilke@gmx.de</font> </body> </html>

  46. XSLT(Extensible Style Sheet Language Transformation)Schleifen und bedingte Anweisungen: Neben der Möglichkeit Elemente mit <xsl:apply templates> auszuwählen, gibt es auch die Methode <xsl:for-each> Auch bei <xsl:for each> wird das Attribut select und ein XPATH-Ausdruck als Attributwert angegeben: <xsl: for-each select=“descendant::Nachname“>

  47. XSLT(Extensible Style Sheet Language Transformation) <xsl: for-each select=“descendant::Nachname“> Durch dieses XSL-Element wird ein Schleife definiert. Jeder Knoten der dem XPATH-Ausdruck entspricht wird gemäß den Anweisungen innerhalb des<xsl: for-each>...</xsl:for-each>bearbeitet.

  48. XSLT(Extensible Style Sheet Language Transformation) Beispiel:<xsl:for-each select="descendant::Nachname"> Nachname: <xsl:value-of select="."/> br></br> </xsl:for-each> In diesem Beispiel wird das Element Nachname ausgewählt, dann wird die Zeichenkette “Nachname:“ geschrieben und anschließend der Inhalt des aktuellen Elementes ausgegeben

  49. XSLT(Extensible Style Sheet Language Transformation) Neben den Schleifen kennt XSLT auch bedingte Anweisungen: <xsl:if> für bedingte Anweisungen ohne Alternativen und <xsl:choose> für bedingte Anweisungen mit Alternativen. Innerhalb von <xsl:choose> steht / stehen eine oder mehrere <xsl:when> - Bedingung / Bedingungen und eine optionale <xsl:otherwise> - Bedingung

  50. XSLT(Extensible Style Sheet Language Transformation) Die Bedingung wird jeweils mit dem Attribut test abgefragt. Als Attributwert kann z.B ein XPATH-Ausdruck stehen: <xsl:choose> <xsl:when test="following-sibling::Vorname">.....</xsl:choose> In diesem Beispiel wird die Bedingung abgefragt, ob der nachfolgende Geschwisterknoten, das Element “Vorname“ ist.

More Related