Dokumentverarbeitung D. Rösner Institut für Wissens- und Sprachverarbeitung Fakultät für Informatik Otto-von-Guericke Universität Magdeburg Winter 2012/13, 2. November 2012, c 2010-13 D.Rösner D. Rösner DokV 2012/13... 1
Gliederung 1 D. Rösner DokV 2012/13... 2
: Zweck: identifizieren von Teilen eines XML-Dokuments (genauer: von Knoten und Knotenmengen im XML-Baum) keine XML-Syntax mögliche Zugriffskategorien: Zugriff auf Knoten z. B. über Position relative Position Typ Inhalt... D. Rösner DokV 2012/13... 4
Verwendung von Verwendung -Syntax wird z.b. in match- und select-attributen in XSLT verwendet oder von XPointer, um genau die Verknüpfungsstelle zu kennzeichnen für einen XLink weitere Möglichkeiten in -Ausdrücken: einfache Arithmetik (z. B. für Nummerierung, Querverweise,... ) Manipulation von Zeichenketten (z. B. Wandlung in Grossbuchstaben, Konkatenation, Ersetzungen,... ) D. Rösner DokV 2012/13... 5
Verwendung von. cont. nicht durch referenzierbar sind: CDATA-Abschnitte Entitätsreferenzen Dokumenttyp-Deklaration arbeitet auf Dokumenten, bei denen diese Objekte bereits im Dokument integriert m.a.w.: es ist z. B. nicht mehr erkennbar, ob ein bestimmter Attributwert im ursprünglichen Dokument enthalten oder durch den in der DTD deklarierten Defaultwert geliefert wurde D. Rösner DokV 2012/13... 6
Bemerkungen zum Datenmodell von der Wurzelknoten des Baums ist nicht identisch mit dem Wurzelelement (des Quelldokuments) Begründung: der Wurzelknoten kann auch noch Knoten für Kommentare und Verarbeitungsinstruktionen enthalten, die vor dem Starttag des Wurzelelements oder nach dessen Endetag enthalten sind xmlns-attribute werden als Namespace-Knoten behandelt; sie sind an jedem Element- und Attribut-Knoten angebracht, der im Skopus dieser Deklaration liegt D. Rösner DokV 2012/13... 7
bestehen aus mind. einem Lokationsschritt und führen zu einer Menge von Knoten im Dokument Menge kann leer, einelementig oder mit endlich vielen Knoten bestückt sein Zugriff auf Dokumentwurzel: / (in Analogie zu UNIX- Filesystem)... absoluter Lokationspfad in beliebigem Kontext wird damit der Wurzelknoten des Dokuments referenziert D. Rösner DokV 2012/13... 9
cont. Zugriff auf Kind-Elemente: erfolgt durch Angabe des Elementnamen relativer Lokationspfad, da die Knotenmenge sich in Bezug zum aktuellen Kontextknoten errechnet in XSLT ist der Kontextknoten der Knoten, der durch das Templat aktuell zur Verarbeitung bestimmt wurde Zugriff auf Attribute: @ gefolgt von Name des Attributs D. Rösner DokV 2012/13... 10
cont. Namespace-Knoten werden vom Prozessor verarbeitet; direkter Zugriff kaum erforderlich mit folgenden kann auf Kommentar-, Text- bzw. PI-Knoten zugegriffen werden: comment(), text(), processing-instruction() durch comment() und text() werden die Kommentar- bzw. Textknoten geliefert, die unmittelbare Kinder des Kontextknoten sind Default-Verarbeitung: Textknoten werden verarbeitet, Kommentarknoten nicht processing-instruction()... liefert alle Kinder des Kontextknoten, die PIs enthalten; als Argument kann - als String - das Ziel angegeben werden; dann werden nur Kinder mit diesem Ziel geliefert D. Rösner DokV 2012/13... 11
Wildcards *... passt auf alle Elementknoten (betrifft aber nicht Attribute, Text, Kommentare und PIs) durch einen Namensraumpräfix kann auf Elemente aus dem bezeichneten Namensraum eingeschränkt werden node()... passt auf alle Knoten, d. h. sowohl auf Elemente, Text, Attribute, PI, Namespace und Kommentare @*... passt auf alle Attributknoten; Verfeinerung durch Namensraum-Präfix möglich; z.b. @xlink:* Alternativen: durch getrennt D. Rösner DokV 2012/13... 12
bisher betrachtet: -Ausdrücke für einzelne Lokationsschritte Elementnamen @ gefolgt von Attributname / comment() text() node() processing-instruction() D. Rösner DokV 2012/13... 13
cont. aus diesen lassen sich zusammengesetzte bilden durch Verwendung von u.a.: / Hierarchie nach unten. aktueller Knoten.. Elternknoten // beliebige Nachkömmlinge D. Rösner DokV 2012/13... 14
cont. die einzelnen Lokationsschritte in einem Lokationspfad beziehen sich aufeinander: ein nachfolgender Schritt bezieht sich auf den vorausgegangenen beginnt der Pfad mit /, dann Bezug zum Wurzelknoten andernfalls Bezug zum Kontextknoten D. Rösner DokV 2012/13... 15
Prädikate in n jeder Schritt in einem Lokationspfad kann ein Prädikat haben, mit dem die an diesem Schritt erhaltene Knotenmenge weiter eingeschränkt wird Prädikate enthalten einen booleschen Ausdruck, mit dem jeder Knoten in der Kontextknotenliste überprüft wird relationale Operatoren in : <, >, >=, <=, =,!= boolesche Verküpfungen: and, or Beachte: in XML-Dokumenten (z. B. XSL-Stylesheets) muss kleiner-als durch < dargestellt werden) D. Rösner DokV 2012/13... 16
Prädikate in n cont. Konversionsregeln, falls Prädikate Werte liefern, die nicht unmittelbar boolesche Werte falls Wert eine Zahl, dann gilt true, wenn diese Zahl gleich der Position des Kontextknoten, und ansonsten false falls Wert Knotenmenge, dann true, wenn diese nicht leer, und ansonsten false falls Wert String, dann true, wenn dieser vom leeren String verschieden, und ansonsten false D. Rösner DokV 2012/13... 17
Unabgekürzte alle bisher vorgestellten Pfade waren abgekürzte stellt zusätzlich eine Syntax für unabgekürzte bereit dabei: jeder Lokationsschritt hat zwei geforderte Teile nämlich Achse (axis) und Knotentest und einen optionalen Teil, die Prädikate Achse: Bewegungsrichtung vom Kontextknoten aus Knotentest: welche Knoten entlang der Achse auswählen? Prädikate: zur weiteren Einschränkung der Knotenmenge in XSLT match-pattern ist nur abgekürzte Syntax zugelassen D. Rösner DokV 2012/13... 18
Unabgekürzte cont. in abgekürzter Syntax sind durch Kurzformen die folgenden Achsen ansprechbar: /... child..... parent.... self @... attribute //... descendant-or-self D. Rösner DokV 2012/13... 19
Unabgekürzte cont. die zusätzlichen Achsen der unabgekürzten Syntax: ancestor: alle Elementknoten, die den Kontextknoten enthalten, in umgekehrter Dokumentordnung following-sibling: alle auf den Kontextknoten folgenden Geschwister (d. h. mit demselben Elternknoten) in Dokumentordnung preceding-sibling: alle dem Kontextknoten vorangehenden Geschwister (d. h....) in umgekehrter Dokumentordnung... D. Rösner DokV 2012/13... 20
zusätzliche Achsen unabgekürzte cont.... following: alle dem Kontextknoten folgenden Knoten in Dokumentordnung, aber ohne Nachfahren des Kontextknotens (descendant) preceding: alle dem Kontextknoten vorangehenden Knoten in umgekehrter Dokumentordnung, aber ohne Vorfahren des Kontextknotens (ancestor)... D. Rösner DokV 2012/13... 21
zusätzliche Achsen unabgekürzte cont.... namespace: alle im Kontextknoten gültigen Namespace-Angaben descendant: alle Nachfahren des Kontextknoten ohne den Kontextknoten selbst ancestor-or-self: alle Vorfahren des Kontextknoten und der Kontextknoten selbst D. Rösner DokV 2012/13... 22
Dokumentordnung (engl. document order): Knotenmengen sind wenn keine Sortierung nach anderen Kriterien (mit <xsl:sort...>) vorgenommen wird in Dokumentordnung sortiert die Verarbeitung von Knotenmengen erfolgt dann in dieser Ordnung informelle Beschreibung: Dokumentordnung ist eine Anordnung der Knoten im XML-Quellbaum, die der Reihenfolge entspricht, in der die zugehörigen Items (d.h. Elemente, Attribute,... ) im XML-Quelldokument vorlagen. D. Rösner DokV 2012/13... 23
Dokumentordnung (engl. document order): Erklärung: Dokumentordnung Für Elemente aus demselben Dokument gilt, dass die Dokumentordnung der Reihenfolge der Start-Tags im XML-Quelldokument entspricht. Auf den XML-Quellbaum bezogen heisst dies, dass ein Knoten immer nach seinen vorangehenden Geschwistern angeordnet wird und diese immer nach ihrem Elternknoten. m.a.w.: Dokumentordnung entspricht einer Präorder-Traversierung (der Elementknoten) des XML-Quellbaums. D. Rösner DokV 2012/13... 24
Dokumentordnung (engl. document order): Erklärung: Dokumentordnung (cont.) Attribut- und Namensraum-Knoten kommen immer nach dem Elementknoten, zu dem sie gehören. Die relative Ordnung von Attribut- und Namensraum-Knoten ist nicht eindeutig festgelegt. Ebenso ist die relative Ordnung von Elementknoten aus unterschiedlichen Dokumenten nicht eindeutig festgelegt. D. Rösner DokV 2012/13... 25
Dokumentordnung (engl. document order): Bemerkungen: Dokumentordnung Attribut-Knoten gelten nicht als Kinder ihrer Elementknoten aber: die Elementknoten gelten als Elternknoten ihrer Attribut-Knoten D. Rösner DokV 2012/13... 26
Allgemeine -Ausdrücke bisher: zur Identifikation einer Menge von Knoten in einem XML-Dokument -Ausdrücke können auch liefern: Zahlen Boolesche Werte Strings in match-attributen können nur -Ausdrücke für Knotenmengen verwendet werden in Prädikaten von n und im select-attribut von xsl:value-of können allgemeine -Ausdrücke verwendet werden D. Rösner DokV 2012/13... 28
Zahlen alle Zahlen in sind Fliesskommazahlen mit doppelter Präzision (8 Byte) gemäss IEEE 754 fünf grundlegende arithmetische Operationen: + - * div mod z. B. <xsl:value-of select ="6 * 7"/> <xsl:value-of select ="@id div 10"/> D. Rösner DokV 2012/13... 29
Strings in : geordnete Folgen von Unicode-Zeichen Literale können sowohl in oder " " eingeschlossen werden (einfache bzw. doppelte Anführungszeichen) Literale dürfen Leerraum enthalten (z. B. Tab, CR, LF,,...), sofern dies innerhalb eines XML-Dokuments die Wohlgeformtheit nicht verletzt Operatoren für Strings (s.a. -): =!= möglich, aber meist nur sinnvoll, wenn beide Strings Zahlen: < > <= >= D. Rösner DokV 2012/13... 30
Booleans müssen genau einen der Werte true oder false annehmen Beachte: true und false stehen nicht als Literale zur Verfügung, sondern werden von den true() bzw. false() geliefert Daher: <xsl:value-of select="true"/> D. Rösner DokV 2012/13... 31
in Typen der Rückgabewerte: Boolean Number Knotenmenge (node set) String nicht vorgesehen: void keine strenge Typisierung wie in Java oder C, sondern häufig automatische Konversion von Ausnahme: Strings, Booleans oder Zahlen können nicht in Knotenmengen konvertiert werden D. Rösner DokV 2012/13... 33
in Beispiel: <xsl:apply-templates select="name[starts-with(lastname, T )]"/> lastname liefert eigentlich Knotenmenge, die in ihren Stringwert konvertiert wird (d. h. in den Textinhalt des Elements lastname) in XSLT, XPointer und anderen Anwendungen von werden für die jeweilige Anwendung hinzugefügt D. Rösner DokV 2012/13... 34
für Knotenmengen position()... Position des aktuellen Knoten in Kontextknotenliste last()... Zahl der Knoten in Kontextknotenliste count()... Zahl der Knoten in als Argument übergebener Knotenmenge id()... Argument ist ein String mit durch Leerraum getrennt einem oder mehreren IDs; Rückgabe ist die Menge der Knoten im Dokument mit diesen IDs Beachte: Typ ID für Attribute in DTD deklariert D. Rösner DokV 2012/13... 35
für Strings starts-with(string1, string2)... beginnt der erste String mit dem zweiten? contains(string1, string2)... enthält der erste String den zweiten? substring-before(string1, string2)... gibt den Teilstring des ersten String zurück, der vor dem ersten Vorkommen des zweiten String liegt (oder Leerstring, falls kein solches Vorkommen) substring-after(string1, string2)... analog: gibt den Teilstring des ersten String zurück, der nach dem ersten Vorkommen des zweiten String liegt (oder Leerstring, falls kein solches Vorkommen) D. Rösner DokV 2012/13... 36
für Strings cont. substring(string, pos1, anzahl)... gibt den Teilstring von string beginnend mit Position pos1 und anzahl Zeichen lang (Zählung bei Position ist 1-basiert) string-length(string)... Länge des Strings normalize-space(string)... Reduktion unnötigen Leerraums in String string(arg)... Konversion des Arguments in einen Stringwert... D. Rösner DokV 2012/13... 37
Multiple Filter insbesondere dort unvermeidlich, wo in Kurzschreibweise mit numerischem Wert nach Knotenposition geprüft wird [position()= 3 and not(title)] ist zulässig [3 and not(title)] ist nicht zulässig mit multiplen Filtern: [3][not(title)] D. Rösner DokV 2012/13... 38
Multiple Filter beachte: Reihenfolge der Filter ist wesentlich //chapter[3][not(title)] //chapter[not(title)][3] D. Rösner DokV 2012/13... 39
Literatur: I Elliotte Rusty Harold and W. Scott Means. XML in a Nutshell. O Reilly, Sebastopol, CA, USA, 2001. 1st edition; ISBN 0-596-00058-8. D. Rösner DokV 2012/13... 40