Upload
ivon-heppe
View
106
Download
0
Embed Size (px)
Citation preview
© 2001 Sven Dammann 1
Aufbau Integrierter Informationssysteme
XML Bearbeitung und relationale Abbildung
• Sven Dammann
• Martin-Luther-Universität Halle-Wittenberg
Hauptseminar - Halle - 6. Februar 2002
© 2001 Sven Dammann 2
Gliederung
1. Einleitung1.1. XML und Datenbanken1.2. XML Dokument1.3. Document Type Definition
2. XML Schema2.1. Schema Aufbau2.2. Tabellenmodellierung2.3. Referentielle Integrität
3. Datenbank-Operationen mit XML-Sprachen3.1. Selektion und Projektion mit Xpath3.2. Transformation mit XSLT
4. Zusammenfassung
© 2001 Sven Dammann 3
XML und Datenbanken: Möglichkeiten
Middleware
•Software zum Transferieren von Daten zwischen XML-Dokumenten und Datenbanken
XML-Enabled Databases•Datenbanken mit Erweiterungen, um Daten zwischen XML-Dokumenten und diesen Daten- banken zu transferieren
Native XML Databases•Datenbanken, die XML-Dokumente in ihrer „nativen“ Form speichern (Erhalt der Struktur des XML- Dokuments)
XML-Server•Plattformen, die Daten in Form von XML-Doku- menten an verteilte Anwendungen senden und von diesen Anwendungen empfangen (e-commerce, B2B-Applikationen)
XML Application Server
•Web Applikationen Server, die XML an Browser verschicken
Content Management Systems•Systeme zum Speichern, Wiederfinden und Zusammenstellen von Dokumenten aus Dokumentfragmenten
Einleitung XML Schema Xpath XSLT Zusammenfassung
© 2001 Sven Dammann 4
XML: Verarbeitung
• Anwendungen, die XML verarbeiten benötigen drei Dateien:– XML-Dokument– DTD (Document Type Definition) oder XML Schema– XSL-Stylesheet
• XML-Dokument nach Regeln der DTD o. XML Schema
aufgebaut
• DTD o. XML-Schema legt logische Struktur fest
• XSL-Stylesheet zur Darstellung (z.B. im Browser)
Einleitung XML Schema Xpath XSLT Zusammenfassung
© 2001 Sven Dammann 5
XML-Dokument: Aufbau
XML-Dokument: Aufbau
<?xml version=„1.0“?><!DOCTYPE beispiel SYSTEM "beispiel.dtd"><beispiel>...untergeordnete Elemente</beispiel>
<beispiel></beispiel>identisch mit<beispiel/>
<?xml version=„1.0“?><beispiel xmlns:xsi=... xsi:noName spaceSchemaLocation=„beispiel.xsd">...untergeordnete Elemente</beispiel>
Einleitung XML Schema Xpath XSLT Zusammenfassung
© 2001 Sven Dammann 6
XML: Baumstruktur<Wurzel> <Ebene1> <Blatt1/> <Blatt1/> <Ebene2> <Ebene3> <Blatt4/> </Ebene3> <Blatt3/> <Ebene3> <Blatt4/> <Ebene4> <Blatt5/> <Blatt5/> </Ebene4> <Blatt4/> <Blatt4/> <Ebene4> <Blatt5/> <Blatt5/> </Ebene4> </Ebene3> <Blatt3/> <Ebene3> <Blatt4/> </Ebene3> </Ebene2> <Blatt1/> <Blatt1/> </Ebene1></Wurzel>
Einleitung XML Schema Xpath XSLT Zusammenfassung
© 2001 Sven Dammann 7
DTD: Beispiel
<Wurzel> <Ebene1> <Blatt1/> <Blatt1/> <Ebene2> <Ebene3> <Blatt4/> </Ebene3> <Blatt3/> <Ebene3> <Blatt4/> <Ebene4> <Blatt5/> <Blatt5/> </Ebene4> <Blatt4/> <Blatt4/> <Ebene4> <Blatt5/> <Blatt5/> </Ebene4> </Ebene3> <Blatt3/> <Ebene3> <Blatt4/> </Ebene3> </Ebene2> <Blatt1/> <Blatt1/> </Ebene1></Wurzel>
<?xml version="1.0" encoding="UTF-8"?><!ELEMENT Blatt1 (#PCDATA)><!ELEMENT Blatt3 (#PCDATA)><!ELEMENT Blatt4 (#PCDATA)><!ELEMENT Blatt5 (#PCDATA)><!ELEMENT Ebene1 (#PCDATA | Blatt1 | Ebene2)*><!ELEMENT Ebene2 (#PCDATA | Blatt3 | Ebene3)*><!ELEMENT Ebene3 (#PCDATA | Blatt4 | Ebene4)*><!ELEMENT Ebene4 (#PCDATA | Blatt5)*><!ELEMENT Wurzel (#PCDATA | Ebene1)*>
<?xml version="1.0" encoding="UTF-8"?><!ELEMENT Blatt1 EMPTY><!ELEMENT Blatt3 EMPTY><!ELEMENT Blatt4 EMPTY><!ELEMENT Blatt5 EMPTY><!ELEMENT Ebene1 (Blatt1 | Ebene2)+><!ELEMENT Ebene2 (Ebene3 | Blatt3)+><!ELEMENT Ebene3 (Blatt4 | Ebene4)+><!ELEMENT Ebene4 (Blatt5+)><!ELEMENT Wurzel (Ebene1)>
Einleitung XML Schema Xpath XSLT Zusammenfassung
© 2001 Sven Dammann 8
DTD: Nachteile
• Nur ein Datentyp
• Sicherung referentieller Integrität nur sehr eingeschränkt über
Definition von „ID“ und „IDREF“möglich
XML Schema
Einleitung XML Schema Xpath XSLT Zusammenfassung
© 2001 Sven Dammann 9
XML Schema
Einleitung XML Schema Xpath XSLT Zusammenfassung
© 2001 Sven Dammann 10
XML-Schema: Aufbau
XML-Schema: Aufbau
<?xml version="1.0" encoding="UTF-8"?><xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">...Definition von Elementen ...</xs:schema>
Einleitung XML Schema Xpath XSLT Zusammenfassung
© 2001 Sven Dammann 11
Beispieldatenbank: Company
deptno dname loc
10 Accounting New York
20 Research Dallas
30 Sales Chicago
empno ename job mgr sal deptnr
7839 King President 5000 10
7698 Blake Manager 7839 2850 30
7654 Martin Salesman 7698 1250 30
7900 James Clerk 7698 950 20
emp
dept
1
nn1
Einleitung XML Schema Xpath XSLT Zusammenfassung
© 2001 Sven Dammann 12
XML Schema: Bsp<?xml version="1.0" encoding="UTF-8"?><xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="company"> <xs:complexType> <xs:sequence> <xs:element name="dept" minOccurs="0" maxOccurs="unbounded"> <xs:complexType> <xs:attribute name="deptno" type="xs:double"/> <xs:attribute name="dname" type="xs:string"/> <xs:attribute name="loc" type="xs:string"/> </xs:complexType> <xs:key name="dept_deptno"> <xs:selector xpath="company/dept"/> <xs:field xpath="@deptno"/> </xs:key> </xs:element> <xs:element name="emp" minOccurs="0" maxOccurs="unbounded"> <xs:complexType> <xs:attribute name="empno" type="xs:double"/> <xs:attribute name="ename" type="xs:string"/> <xs:attribute name="job" type="xs:string"/> <xs:attribute name="mgr" type="xs:double"/> <xs:attribute name="sal" type="xs:double"/> <xs:attribute name="deptnr" type="xs:double"/> </xs:complexType> <xs:keyref name="emp_deptnr" refer="dept_deptno"> <xs:selector xpath="company/emp"/> <xs:field xpath="@deptnr"/> </xs:keyref> <xs:key name="emp_empno"> <xs:selector xpath="company/emp"/> <xs:field xpath="@empno"/> </xs:key> <xs:keyref name="emp_mgr" refer="emp_empno"> <xs:selector xpath="company/emp"/> <xs:field xpath="@mgr"/> </xs:keyref> </xs:element> </xs:sequence> </xs:complexType> </xs:element></xs:schema>
<xs:element name=„...“>
•Definiert Elemente (Markups)•‚name‘ entspricht dem Tag-Namen des XML-Dokumentes•Angabe von Minimal-und Maximal-grenzen möglich
<xs:complexType>
•Definiert den Inhalt zwischen dem Start- und End-Tag•complexType kann als Inhalt weitere Elemente enthalten•Definition von eigenen SimpleTypes möglich
<xs:sequence>
•Definiert eine Folge von Elementen•Reihenfolge ist zwingend•Andere Möglicjkeit: choice (Auswahl) oder group (Gruppe)
<xs:attribute name=„...“ type=„...“>
•Definiert die Attribute des übergeordneten Elementes•,name‘ entspricht dem Attribut-Namen im XML-Dokument•Zwingende Angabe eines Datentyps
<xs:key name=„...“>
•Definiert einen Primärschlüssel ‚Name‘•„selector“ definiert den Pfad im XML-Dokument wo der Schlüssel liegt•„field“ legt den Knoten fest, der der Schlüssel ist
Einleitung XML Schema Xpath XSLT Zusammenfassung
<xs:keyref name=„...“ refer=„...“>
•Definiert einen Fremdschlüssel ‚Name‘•„refer“ gibt den zu referenzierenden Schlüssel an •„selector“ und „field“ legt die Position des Knotens fest, dessen Wert zu überprüfen ist
© 2001 Sven Dammann 13
XML–Datei: personal.xml
<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet type="text/xsl" href="personal.xsl"?><company xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="personal.xsd"> <dept deptno="10" dname="Accounting" loc="New York"/> <dept deptno="20" dname="Research" loc="Dallas"/> <dept deptno="30" dname="Sales" loc="Chicago"/> <emp empno="7839" ename="King" job="President" mgr="" sal="5000" deptnr="10"/> <emp empno="7698" ename="Blake" job="Manager" mgr="7839" sal="2850" deptnr="30"/> <emp empno="7654" ename="Martin" job="Salesman" mgr="7698" sal="1250" deptnr="30"/> <emp empno="7900" ename="James" job="Clerk" mgr="7698" sal= "950" deptnr="20"/></company>
Einleitung XML Schema Xpath XSLT Zusammenfassung
© 2001 Sven Dammann 14
<?xml version="1.0" encoding="UTF-8"?><xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="company"> <xs:complexType> <xs:sequence> <xs:element name="dept" minOccurs="0" maxOccurs="unbounded"> <xs:complexType> <xs:attribute name="deptno" type="xs:double"/> <xs:attribute name="dname" type="xs:string"/> <xs:attribute name="loc" type="xs:string"/> </xs:complexType> <xs:key name="dept_deptno"> <xs:selector xpath="company/dept"/> <xs:field xpath="@deptno"/> </xs:key> </xs:element> <xs:element name="emp" minOccurs="0" maxOccurs="unbounded"> <xs:complexType> <xs:attribute name="empno" type="xs:double"/> <xs:attribute name="ename" type="xs:string"/> <xs:attribute name="job" type="xs:string"/> <xs:attribute name="mgr" type="xs:double"/> <xs:attribute name="sal" type="xs:double"/> <xs:attribute name="deptnr" type="xs:double"/> </xs:complexType> <xs:keyref name="emp_deptnr" refer="dept_deptno"> <xs:selector xpath="company/emp"/> <xs:field xpath="@deptnr"/> </xs:keyref> <xs:key name="emp_empno"> <xs:selector xpath="company/emp"/> <xs:field xpath="@empno"/> </xs:key> <xs:keyref name="emp_mgr" refer="emp_empno"> <xs:selector xpath="company/emp"/> <xs:field xpath="@mgr"/> </xs:keyref> </xs:element> </xs:sequence> </xs:complexType> </xs:element></xs:schema>
Referentielle Integrität
<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet type="text/xsl" href="personal.xsl"?><company xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="personal.xsd"> <dept deptno="10" dname="Accounting" loc="New York"/> <dept deptno="20" dname="Research" loc="Dallas"/> <dept deptno="30" dname="Sales" loc="Chicago"/> <emp empno="7839" ename="King" job="President" mgr="" sal="5000" deptnr="10"/> <emp empno="7698" ename="Blake" job="Manager" mgr="7839" sal="2850" deptnr="30"/> <emp empno="7654" ename="Martin" job="Salesman" mgr="7698" sal="1250" deptnr="30"/> <emp empno="7900" ename="James" job="Clerk" mgr="7698" sal="950" deptnr="20"/></company>
Einleitung XML Schema Xpath XSLT Zusammenfassung
© 2001 Sven Dammann 15
XML-Schema: Simple Types
• Vorteile durch Definition eigener Datentypen
• Einschränkung mittels Regulären Ausdrücken
<xsd:simpleType name="SKU"> <xsd:restriction base="xsd:string"> <xsd:pattern value="\d{3}-[A-Z]{2}"/> </xsd:restriction> </xsd:simpleType>
• Im Beispiel: Alle Werte 999-XX (drei Ziffern gefolgt von „-“ und zwei
Großbuchstaben
Einleitung XML Schema Xpath XSLT Zusammenfassung
© 2001 Sven Dammann 16
XML-Schema: warum?
<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet type="text/xsl" href="personal.xsl"?><company ...> <dept deptno="10" dname="Accounting" loc="New York"/> ... <emp empno="7839" ename="King" job="President" mgr="" sal="5000" deptnr="10"/> ...</company>
Anwendung 1
<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet type="text/xsl" href="personal.xsl"?><company ...> <dept> <deptno>10</deptno> <dname>Accounting</dname> <loc>New York</loc> </dept> ... <emp> <empno>7839</empno> <ename>King</ename> <job>President</job> <mgr></mgr> <sal>5000</sal> <deptnr>10</deptnr> </emp> ...</company>Anwendung 2
DB
Einleitung XML Schema Xpath XSLT Zusammenfassung
© 2001 Sven Dammann 17
Selektion und Projektion mit XPath
Einleitung XML Schema Xpath XSLT Zusammenfassung
© 2001 Sven Dammann 18
Datenbankoperationen: XSL
XSL
XPath XSLT XSL-FO
• XSL - eXtensible Stylesheet Language• Transformation bestehender Quelldokumente
• Xpath - XML Path Language• Selektion von Teilen des XML-Quelldokumentes
• XSLT - XSL Transformation• Teil zur Transformation des Quelldokumentes
• XSL-FO - XSL Formatting Objects• Informationen zur Darstellung
Einleitung XML Schema Xpath XSLT Zusammenfassung
© 2001 Sven Dammann 19
Xpath: Pfad Ausdrücke
Pfad Ausdrücke• Selektion von Resultats-Knoten-mengen aus dem Quell-XML-Baum•Pfad kann aus mehreren Bausteinen bestehen•Bausteine durch „/“ getrennt
Pfadbaustein (Grundgerüst):
achse::knoten-test[prädikate]
Achse•Gibt Baumbeziehungen zwischen zu selektierenden Knoten und Kontextknoten an
Einleitung XML Schema Xpath XSLT Zusammenfassung
Knoten-Test•Gibt Knotentyp und Namen der zu selektierenden Knoten an
Prädikate•Weitere Verfeinerung der selektierten Knotenmenge•optional
© 2001 Sven Dammann 20
Xpath: Baumbeziehungen
<Wurzel> <Ebene1> <Blatt1/> <Blatt1/> <Ebene2> <Ebene3> <Blatt4/> </Ebene3> <Blatt3/> <Ebene3> <Blatt4/> <Ebene4> <Blatt5/> <Blatt5/> </Ebene4> <Blatt4/> <Blatt4/> <Ebene4> <Blatt5/> <Blatt5/> </Ebene4> </Ebene3> <Blatt3/> <Ebene3> <Blatt4/> </Ebene3> </Ebene2> <Blatt1/> <Blatt1/> </Ebene1></Wurzel>
Child •Alle direkten Kinder eines Kontextknotens
Child •Alle direkten Kinder eines Kontextknotens
•Syntax : child::Elementname•Beispiel : alle Kinder eines Knotens, die „Blatt4“ heißen
child::Blatt4 verkürzt: Blatt4
•Syntax : child::Elementname•Beispiel : alle Kinder eines Knotens, die „Blatt4“ heißen
child::Blatt4 verkürzt: Blatt4
<Wurzel> <Ebene1> <Blatt1/> <Blatt1/> <Ebene2> <Ebene3> <Blatt4/> </Ebene3> <Blatt3/> <Ebene3> <Blatt4/> <Ebene4> <Blatt5/> <Blatt5/> </Ebene4> <Blatt4/> <Blatt4/> <Ebene4> <Blatt5/> <Blatt5/> </Ebene4> </Ebene3> <Blatt3/> <Ebene3> <Blatt4/> </Ebene3> </Ebene2> <Blatt1/> <Blatt1/> </Ebene1></Wurzel>
Parent•Das Elternelement des Kontextknoten
Parent•Das Elternelement des Kontextknoten
•Syntax : parent::Elementname•Beispiel : das Elternelement eines Kontextknoten, daß „Wurzel“ heißt
parent::Wurzel verkürzt: parent::node() = ..
•Syntax : parent::Elementname•Beispiel : das Elternelement eines Kontextknoten, daß „Wurzel“ heißt
parent::Wurzel verkürzt: parent::node() = ..
<Wurzel> <Ebene1> <Blatt1/> <Blatt1/> <Ebene2> <Ebene3> <Blatt4/> </Ebene3> <Blatt3/> <Ebene3> <Blatt4/> <Ebene4> <Blatt5/> <Blatt5/> </Ebene4> <Blatt4/> <Blatt4/> <Ebene4> <Blatt5/> <Blatt5/> </Ebene4> </Ebene3> <Blatt3/> <Ebene3> <Blatt4/> </Ebene3> </Ebene2> <Blatt1/> <Blatt1/> </Ebene1></Wurzel>
Ancestor•Alle Vorfahren des Kontextknoten
Ancestor•Alle Vorfahren des Kontextknoten
•Syntax : ancestor::Elementname•Beispiel : alle Vorfahren eines Kontextknotens
ancestor::*
•Syntax : ancestor::Elementname•Beispiel : alle Vorfahren eines Kontextknotens
ancestor::*
<Wurzel> <Ebene1> <Blatt1/> <Blatt1/> <Ebene2> <Ebene3> <Blatt4/> </Ebene3> <Blatt3/> <Ebene3> <Blatt4/> <Ebene4> <Blatt5/> <Blatt5/> </Ebene4> <Blatt4/> <Blatt4/> <Ebene4> <Blatt5/> <Blatt5/> </Ebene4> </Ebene3> <Blatt3/> <Ebene3> <Blatt4/> </Ebene3> </Ebene2> <Blatt1/> <Blatt1/> </Ebene1></Wurzel>
Descedant•Alle Abkömmlinge eines Kontextknoten
Descedant•Alle Abkömmlinge eines Kontextknoten
•Syntax : descendant::Elementname•Beispiel : alle Nachfahren eines Kontextknotens, die „Ebene3“ heißen
descendant::Ebene3
•Syntax : descendant::Elementname•Beispiel : alle Nachfahren eines Kontextknotens, die „Ebene3“ heißen
descendant::Ebene3
<Wurzel> <Ebene1> <Blatt1/> <Blatt1/> <Ebene2> <Ebene3> <Blatt4/> </Ebene3> <Blatt3/> <Ebene3> <Blatt4/> <Ebene4> <Blatt5/> <Blatt5/> </Ebene4> <Blatt4/> <Blatt4/> <Ebene4> <Blatt5/> <Blatt5/> </Ebene4> </Ebene3> <Blatt3/> <Ebene3> <Blatt4/> </Ebene3> </Ebene2> <Blatt1/> <Blatt1/> </Ebene1></Wurzel>
Einleitung XML Schema Xpath XSLT Zusammenfassung
Preceding •Alle K. die im Doku-ment vor dem Kontext- knoten kommen
Preceding •Alle K. die im Doku-ment vor dem Kontext- knoten kommen
•Syntax : preceding::Elementname•Beispiel : alle einem Kontextknoten vorangegangenen Elemente „Blatt2“
preceding::Blatt2
•Syntax : preceding::Elementname•Beispiel : alle einem Kontextknoten vorangegangenen Elemente „Blatt2“
preceding::Blatt2
<Wurzel> <Ebene1> <Blatt1/> <Blatt1/> <Ebene2> <Ebene3> <Blatt4/> </Ebene3> <Blatt3/> <Ebene3> <Blatt4/> <Ebene4> <Blatt5/> <Blatt5/> </Ebene4> <Blatt4/> <Blatt4/> <Ebene4> <Blatt5/> <Blatt5/> </Ebene4> </Ebene3> <Blatt3/> <Ebene3> <Blatt4/> </Ebene3> </Ebene2> <Blatt1/> <Blatt1/> </Ebene1></Wurzel>
Following•Alle auf den Kontext-knoten folgenden Elem.
Following•Alle auf den Kontext-knoten folgenden Elem.
•Syntax : following::Elementname•Beispiel : alle folgenden Elemente „Blatt1“ eines Kontextknoten
following::Blatt1
•Syntax : following::Elementname•Beispiel : alle folgenden Elemente „Blatt1“ eines Kontextknoten
following::Blatt1
<Wurzel> <Ebene1> <Blatt1/> <Blatt1/> <Ebene2> <Ebene3> <Blatt4/> </Ebene3> <Blatt3/> <Ebene3> <Blatt4/> <Ebene4> <Blatt5/> <Blatt5/> </Ebene4> <Blatt4/> <Blatt4/> <Ebene4> <Blatt5/> <Blatt5/> </Ebene4> </Ebene3> <Blatt3/> <Ebene3> <Blatt4/> </Ebene3> </Ebene2> <Blatt1/> <Blatt1/> </Ebene1></Wurzel>
Preceding-Sibling
•Alle folgenden Brüder des Kontextknoten
Preceding-Sibling
•Alle folgenden Brüder des Kontextknoten
•Syntax : preceding-sibling::Elementname•Beispiel : alle vorherigen Brüder „Ebene3“ eines Kontextknotens
preceding-sibling::Ebene3
•Syntax : preceding-sibling::Elementname•Beispiel : alle vorherigen Brüder „Ebene3“ eines Kontextknotens
preceding-sibling::Ebene3
<Wurzel> <Ebene1> <Blatt1/> <Blatt1/> <Ebene2> <Ebene3> <Blatt4/> </Ebene3> <Blatt3/> <Ebene3> <Blatt4/> <Ebene4> <Blatt5/> <Blatt5/> </Ebene4> <Blatt4/> <Blatt4/> <Ebene4> <Blatt5/> <Blatt5/> </Ebene4> </Ebene3> <Blatt3/> <Ebene3> <Blatt4/> </Ebene3> </Ebene2> <Blatt1/> <Blatt1/> </Ebene1></Wurzel>
Following-Sibling
•Alle folgenden Brüder des Kontextknoten
Following-Sibling
•Alle folgenden Brüder des Kontextknoten
•Syntax : following-sibling::Elementname•Beispiel : alle folgenden Brüder die „Blatt3“ heißen
following-sibling::Blatt3
•Syntax : following-sibling::Elementname•Beispiel : alle folgenden Brüder die „Blatt3“ heißen
following-sibling::Blatt3
<Wurzel> <Ebene1> <Blatt1/> <Blatt1/> <Ebene2> <Ebene3> <Blatt4/> </Ebene3> <Blatt3/> <Ebene3> <Blatt4/> <Ebene4> <Blatt5/> <Blatt5/> </Ebene4> <Blatt4/> <Blatt4/> <Ebene4> <Blatt5/> <Blatt5/> </Ebene4> </Ebene3> <Blatt3/> <Ebene3> <Blatt4/> </Ebene3> </Ebene2> <Blatt1/> <Blatt1/> </Ebene1></Wurzel>
Self •Aktueller Knoten (Kontextknoten) selbst
Self •Aktueller Knoten (Kontextknoten) selbst
<Wurzel> <Ebene1> <Blatt1/> <Blatt1/> <Ebene2> <Ebene3> <Blatt4/> </Ebene3> <Blatt3/> <Ebene3> <Blatt4/> <Ebene4> <Blatt5/> <Blatt5/> </Ebene4> <Blatt4/> <Blatt4/> <Ebene4> <Blatt5/> <Blatt5/> </Ebene4> </Ebene3> <Blatt3/> <Ebene3> <Blatt4/> </Ebene3> </Ebene2> <Blatt1/> <Blatt1/> </Ebene1></Wurzel>
•Syntax : self::node()•Beispiel : Auswahl des Knotens „Ebene1“
child::Ebene1/self::node() verkürzt: Ebene1/.
•Syntax : self::node()•Beispiel : Auswahl des Knotens „Ebene1“
child::Ebene1/self::node() verkürzt: Ebene1/.
Ancestor-or-Self•Kontextknoten & alle seine Vorfahren
Ancestor-or-Self•Kontextknoten & alle seine Vorfahren
•Syntax : ancestor-or-self::Elementname•Beispiel : alle Vorfahren eines Kontext-Elementes inkl. dem Element selbst
ancestor-or-self::*
•Syntax : ancestor-or-self::Elementname•Beispiel : alle Vorfahren eines Kontext-Elementes inkl. dem Element selbst
ancestor-or-self::*
<Wurzel> <Ebene1> <Blatt1/> <Blatt1/> <Ebene2> <Ebene3> <Blatt4/> </Ebene3> <Blatt3/> <Ebene3> <Blatt4/> <Ebene4> <Blatt5/> <Blatt5/> </Ebene4> <Blatt4/> <Blatt4/> <Ebene4> <Blatt5/> <Blatt5/> </Ebene4> </Ebene3> <Blatt3/> <Ebene3> <Blatt4/> </Ebene3> </Ebene2> <Blatt1/> <Blatt1/> </Ebene1></Wurzel>
Descendant-or-Self
•Kontextknoten & alle Abkömmlinge
Descendant-or-Self
•Kontextknoten & alle Abkömmlinge
<Wurzel> <Ebene1> <Blatt1/> <Blatt1/> <Ebene2> <Ebene3> <Blatt4/> </Ebene3> <Blatt3/> <Ebene3> <Blatt4/> <Ebene4> <Blatt5/> <Blatt5/> </Ebene4> <Blatt4/> <Blatt4/> <Ebene4> <Blatt5/> <Blatt5/> </Ebene4> </Ebene3> <Blatt3/> <Ebene3> <Blatt4/> </Ebene3> </Ebene2> <Blatt1/> <Blatt1/> </Ebene1></Wurzel>
•Syntax : descendant-or-self::Elementname•Beispiel : alle Elemente „Blatt1“ des Dokuments
descendant-or-self::Blatt1 verkürzt: //Blatt1
•Syntax : descendant-or-self::Elementname•Beispiel : alle Elemente „Blatt1“ des Dokuments
descendant-or-self::Blatt1 verkürzt: //Blatt1
© 2001 Sven Dammann 21
child::CCC
Ergebnis Node-Set: ( ; )
Xpath: Ablauf
AAA
DDDBBB CCC
BBBEEEBBB
DDD EEE EEE
GGGBBB
DDDBBB CCCCCC
/child::BBB
BBBBBB
/child::EEE
DDD EEE EEEEEE EEE
DDDBBB
AAA
<EEE/> <EEE/>
-Knoten des Baumes-Mögliche Knoten -Treffer
descendant-or-self::BBB
Node-Set: ( ; ; ; )
CCC
BBB
DDD EEE EEE
<BBB> <BBB/> <BBB/><BBB/>
CCC/BBB/EEE
DDDBBB
BBBEEE
CCC
BBB
DDD EEE EEE
GGGBBB
AAA
//BBB
Einleitung XML Schema Xpath XSLT Zusammenfassung
BBB
BBB
BBB
BBB
© 2001 Sven Dammann 22
Xpath: Selektion & Projektion mit Prädikaten
descendant-or-self::emp[attribute::sal < 2850]/attribute::ename
Ergebnis Knoten-Set: (Martin ; James)
• Schritt 1: Wähle alle „emp“-Knoten deren Inhalt ihres „sal“-Attributs kleiner als 2850 ist
• Schritt 2: Wähle von diesen „emp“-Knoten das Attribut „ename“
Wie heißen die Mitarbeiter mit einem Gehalt kleiner 2850?
//emp[@sal < 2850]/@ename
• Relationale Algebra:ename(sal < 2850 (emp))
Einleitung XML Schema Xpath XSLT Zusammenfassung
© 2001 Sven Dammann 23
Xpath: Weitere Funktionen
• Xpath bietet umfangreiche Funktionsbibliothek
• Meist Verwendung in Prädikaten
Allgemeine Funktionen •number last(): entspricht Größe des Kontexts (das letzte Element)•number position(): gibt die Kontext-Position an•number count(node set): Anzahl der Knoten in der Argumentmenge
String-Funktionen •number string-length(string?): liefert Länge des Strings•boolean starts-with(string, string): true, wenn 1. Argument mit 2. Argument beginnt•boolean contains(string, string): true, wenn 1. Argument das 2.Argument
beinhaltet
Boolsche-Funktionen •boolean boolean(object): Konvertierung unterschiedlicher Objekttypen nach boolean•boolean not(boolean): Negierung des angegebenen Wertes•boolean true(): liefert true
Zahlen-Funktionen •number number(object?): Konvertierung des angegebenen Objekts nach number•number sum(node-set): Aufsummierung von Argument-Knoten des Typs number
Einleitung XML Schema Xpath XSLT Zusammenfassung
© 2001 Sven Dammann 24
Transformation mit XSLT
Einleitung XML Schema Xpath XSLT Zusammenfassung
© 2001 Sven Dammann 25
XSLT: Aufbau
XSLT-Dokument: Aufbau
<?xml version="1.0"?><xsl:stylesheet version="1.0" xmlns:xsl="http://www../1999/XSL/Transform>...Definition von Templates ...</xsl:stylesheet>
Einleitung XML Schema Xpath XSLT Zusammenfassung
© 2001 Sven Dammann 26
XSLT: Templates
XSLT: Template Grundgerüst
<xsl:template match=„Xpath Ausdruck“>...Definition von Regeln ...</xsl:template>
• Templates geben an, wie ein bestimmter Knotentyp zu transformieren ist• innerhalb des Templates weitere Templates aufrufbar Rekursionen abbildbar
Einleitung XML Schema Xpath XSLT Zusammenfassung
© 2001 Sven Dammann 27
XSLT: Beispiel<?xml version="1.0"?><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>Personal-Relation</title> </head> <body> <table border="1"> <tr> <th>DeptNo</th> <th>Dname</th> <th>Loc</th> </tr> <xsl:apply-templates/> </table> </body> </html> </xsl:template> <xsl:template match="//dept"> <tr> <xsl:for-each select="@*"> <td> <xsl:choose> <xsl:when test="string-length(.) = 0">---</xsl:when> <xsl:otherwise><xsl:value-of select="."/></xsl:otherwise> </xsl:choose> </td> </xsl:for-each> </tr> </xsl:template ></xsl:stylesheet>
Einleitung XML Schema Xpath XSLT Zusammenfassung
© 2001 Sven Dammann 28
Xpath und XSLT
XMLParserXMLParser
XMLParserXMLParser
Quell-Dokument
XML
Quell-Dokument
XML
XSLTStyle-sheet
(XML)
XSLTStyle-sheet
(XML)
AusgabeHTMLFile...
AusgabeHTMLFile...
Ablauf einer Transformation
XSLTProzessor
XSLTProzessor
XPathProzessorXPath
Prozessor
Quelldokument(DOM-
Repräsentation)
Stylesheet(DOM-
Repräsentation)
( ), , , ,
Node-Sets
Selektion
XSLT-Anweisungen
(Literal, Result Elements)
Erzeugenvon
Knoten
Ergebnis(DOM-
Repräsentation)
Einleitung XML Schema Xpath XSLT Zusammenfassung
© 2001 Sven Dammann 29
<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet type="text/xsl" href=personal.xsl"?><company> <dept deptno="10" dname="Accounting" loc="N..."/> <dept deptno="20" dname="Research" loc="Dallas"/> <dept deptno="30" dname="Sales" loc="Chicago"/> <emp .../> <emp .../> <emp .../> <emp .../></company>
<?xml version="1.0"?><xsl:stylesheet> <xsl:output method="html"/> <xsl:template match="/"> <html> <head><title>Personal-Relation</title></head> <body> <table border="1"> <tr> <th>DeptNo</th> <th>Dname</th> <th>Loc</th> </tr> <xsl:for-each select="//dept"> <tr> <xsl:for-each select="@*"> <td> <xsl:choose> <xsl:when test="string-length(.) = 0">---</xsl:when> <xsl:otherwise><xsl:value-of select="."/></xsl:otherwise> </xsl:choose> </td> </xsl:for-each> </tr> </xsl:for-each> </table> </body> </html> </xsl:template ></xsl:stylesheet>
Transformation am Beispiel
XML XSLT & XPath HTML
<html> <head> <title>Pers...</title> </head> <body> <table> border="1"> <tr> <th>DeptNo</th> <th>Dname</th> <th>Loc</th> </tr>
<tr><td>10</td> <td>Accounting</td><td>New York</td> </tr>
<tr> <td>20</td> <td>Research</td> <td>Dallas</td></tr><tr> <td>30</td> <td>Sales</td> <td>Chicago</td></tr>
</table> </body></html>
Einleitung XML Schema Xpath XSLT Zusammenfassung
© 2001 Sven Dammann 30
Vergleich: SQL - XSL
• Gemeinsamkeiten:– Anfragemöglichkeiten
• Wenige, einfache Anfragemöglichkeiten• Erweiterung durch arithm. Funktionen und Vergleichsoperatoren
– Deskriptive Sprachen• Beschreiben nur Ergebnis der Transformation, nicht den Algorithmus
– Abgeschlossenheit• Ausgabe kann als Eingabe für weitere Transformationen dienen
• Unterschiede:– Manipulation der Daten
• XSL: um bestehendes Dokument zu verändern muß es durch neues ersetzt werden hoher Aufwand bei kleinen Änderungen
• SQL: bietet neben SELECT weiter Operationen um Daten schnell zu ändern
Einleitung XML Schema Xpath XSLT Zusammenfassung
© 2001 Sven Dammann 31
Zusammenfassung:
• Abbildung relationaler Strukturen mit XML sehr einfach
• Integration unterschiedlicher Dokumente durch Festlegen eines
einheitlichen Schemas (XML-Schema)
• Selektion und Projektion mit Xpath und XSLT
Einleitung XML Schema Xpath XSLT Zusammenfassung