Wiederholung/Übung

Werbung
- Wiederholung/Übung Einführung, XML-Grundlagen und -Konzepte
1
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Welche Bestandteile hat ein XML-Dokument?
Bestandteile eines XML-Dokuments
XML-Dokument
XML-Deklaration
Namespace
Kommentar
Attribut
Text
Element
2
<?xml version="1.0" encoding="ISO-8859-1"?>
<vorlesung titel="XML ..."
xmlns:dbis="http://www.minet.uni-jena.de/dbis/">
<!–-Liste der Vorlesungsteilnehmer-->
<dbis:teilnehmer dbis:matrikel="4711">
<dbis:name>Mustermann</dbis:name>
<dbis:vorname>Max</dbis:vorname>
<dbis:semester>5</dbis:semester>
<dbis:studienfach>8</dbis:studienfach>
</dbis:teilnehmer>
<dbis:teilnehmer dbis:matrikel="4736">
<dbis:name>Normalverbraucher</dbis:name>
<dbis:vorname>Otto</dbis:vorname>
<dbis:semester>6</dbis:semester>
<dbis:studienfach>10</dbis:studienfach>
</dbis:teilnehmer>
</vorlesung>
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Welche Vorteile bietet XML? (6)
Metasprache
Trennung von Inhalt und Darstellung
Offener Standard
Vorteile
von XML
Lesbarkeit
Plattformunabhängigkeit
Einfacher, formaler und präziser Sprachentwurf
3
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Welche Repräsentation passt zu unserem Beispiel?
(1)
(2)
(3)
4
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Was ist Wohlgeformtheit und Gültigkeit? Welche Abhängigkeiten gelten?
(1) gültig  wohlgeformt ?
Wohlgeformheit
(2) wohlgeformt  gültig ?
5
Gültigkeit
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Welche Prozesse finden statt?
(1) ?
XML-Parsen
(Analyse der Dokumentstruktur)
<?xml version="1.0"
encoding="ISO-8859-1"?>
<vorlesung titel="XML ...">
<teilnehmer matrikel="4711">
<name>Mustermann</name>
<vorname>Max</vorname>
<semester>5</semester>
<studienfach>8</studienfach>
</teilnehmer>
</vorlesung>
<?xml version="1.0"
encoding="ISO-8859-1"?>
<vorlesung titel="XML ...">
<teilnehmer matrikel="4711">
<name>Mustermann</name>
<vorname>Max</vorname>
<semester>5</semester>
<studienfach>8</studienfach>
</teilnehmer>
</vorlesung>
(Rücküberführung zu Dokument)
XML-Serialisieren
(2) ?
6
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
- Online Tools Einführung, XML-Grundlagen und -Konzepte
7
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Online Tools
XML Formatierer
(http://www.bytechaser.com/en/resources/tp9h7nivzr/free-online-xml-formatting-tool.aspx)
8
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Online Tools
Syntax Highlighter (http://tohtml.com/xml/)
- auch für viele weitere Typen verwendbar
9
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
- Wiederholung/Übung XML-Datenmodellierung / XML-Schemasprachen
11
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Welche Schemasprachen haben wir kennengelernt? (4)
RELAX NG
Schematron
DTD
Welche
XML-Schemasprachen
XML-Schema
12
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Wie heißen die „Hauptelemente“ in DTDs?
Document Type Definition (DTD)
<!DOCTYPE vorlesung[
<!ELEMENT vorlesung (teilnehmer+)>
<!ATTLIST vorlesung titel CDATA #REQUIRED>
<!ELEMENT teilnehmer (name, vorname, semester,
studienfach)>
<!ATTLIST teilnehmer matrikel NMTOKEN #REQUIRED>
Attributliste
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
Elementtyp
name (#PCDATA)>
vorname (#PCDATA)>
semester (#PCDATA)>
studienfach (#PCDATA)>
]>
13
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Genügt unser XML-Dokument dieser DTD?
<!DOCTYPE vorlesung[
<!ELEMENT vorlesung (teilnehmer+)>
<!ATTLIST vorlesung titel CDATA #REQUIRED>
<!ELEMENT teilnehmer (name, vorname, semester,
studienfach)>
<!ATTLIST teilnehmer matrikel NMTOKEN #REQUIRED>
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
name (#PCDATA)>
vorname (#PCDATA)>
semester (#PCDATA)>
studienfach (#PCDATA)>
]>
14
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Genügt unser XML-Dokument dieser DTD?
<!DOCTYPE vorlesung[
<!ELEMENT vorlesung (teilnehmer+)>
<!ATTLIST vorlesung titel CDATA #REQUIRED
untertitel CDATA #REQUIRED>
<!ELEMENT teilnehmer (name, vorname, semester,
studienfach)>
<!ATTLIST teilnehmer matrikel NMTOKEN #REQUIRED>
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
name (#PCDATA)>
vorname (#PCDATA)>
semester (#PCDATA)>
studienfach (#PCDATA)>
]>
15
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Genügt unser XML-Dokument dieser DTD?
<!DOCTYPE vorlesung[
<!ELEMENT vorlesung (teilnehmer+)>
<!ATTLIST vorlesung titel CDATA #REQUIRED
untertitel CDATA #IMPLIED>
<!ELEMENT teilnehmer (name, vorname, semester,
studienfach)>
<!ATTLIST teilnehmer matrikel NMTOKEN #REQUIRED>
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
name (#PCDATA)>
vorname (#PCDATA)>
semester (#PCDATA)>
studienfach (#PCDATA)>
]>
16
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Genügt unser XML-Dokument dieser DTD?
<!DOCTYPE vorlesung[
<!ELEMENT vorlesung (teilnehmer+)>
<!ATTLIST vorlesung titel CDATA #REQUIRED>
<!ELEMENT teilnehmer (name, vorname, semester)>
<!ATTLIST teilnehmer matrikel NMTOKEN #REQUIRED>
<!ELEMENT name (#PCDATA)>
<!ELEMENT vorname (#PCDATA)>
<!ELEMENT semester (#PCDATA)>
]>
17
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Genügt unser XML-Dokument dieser DTD?
<!DOCTYPE vorlesung[
<!ELEMENT vorlesung (teilnehmer+, raum?)>
<!ATTLIST vorlesung titel CDATA #REQUIRED>
<!ELEMENT teilnehmer (name, vorname, semester,
studienfach)>
<!ATTLIST teilnehmer matrikel NMTOKEN #REQUIRED>
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
name (#PCDATA)>
vorname (#PCDATA)>
semester (#PCDATA)>
studienfach (#PCDATA)>
<!ELEMENT raum(#PCDATA)>
]>
18
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Welche Nachteile hat DTD?
kaum Datentypen
nur dokumentweite Eindeutigkeit
keine XML-Dokumente
Nachteile
von DTD
keine Sonderzeichen für Aufzählungstyp
separate Editoren
keine Namespaces
19
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Wie charakterisieren sich die einzelnen Typen?
Erzeugung eigener Typen
Typen
ohne (Kind-) Elemente
und Attribute
(1) ?
(2) ?
einfache
Typen
komplexe
Typen
einfacher Inhalt
(3) ?
ohne (Kind-) Elemente
20
umfassen (Kind-)
Elemente oder Attribute
komplexer Inhalt
(4) ?
mit (Kind-) Elementen
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Genügt unser XML-Dokument diesem Schema?
<?xml version="1.0" encoding="ISO-8859-1"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="vorlesung">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" name="teilnehmer">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string" />
<xs:element name="vorname" type="xs:string" />
<xs:element name="semester" type="xs:int" />
<xs:element name="studienfach" type="xs:int" />
</xs:sequence>
<xs:attribute name="matrikel"
type="xs:int"
use="required" />
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="titel" type="xs:string" use="required" />
</xs:complexType>
</xs:element>
</xs:schema>
21
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Genügt unser XML-Dokument diesem Schema?
<?xml version="1.0" encoding="ISO-8859-1"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="vorlesung">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" name="teilnehmer">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:int" />
<xs:element name="vorname" type="xs:int" />
<xs:element name="semester" type="xs:int" />
<xs:element name="studienfach" type="xs:int" />
</xs:sequence>
<xs:attribute name="matrikel"
type="xs:int"
use="required" />
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="titel" type="xs:string" use="required" />
</xs:complexType>
</xs:element>
</xs:schema>
22
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Genügt unser XML-Dokument diesem Schema?
<?xml version="1.0" encoding="ISO-8859-1"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="vorlesung">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" name="teilnehmer">
</xs:element>
</xs:sequence>
<xs:attribute name="titel" type="xs:string" use="required" />
</xs:complexType>
</xs:element>
</xs:schema>
23
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Genügt unser XML-Dokument diesem Schema?
<?xml version="1.0" encoding="ISO-8859-1"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="vorlesung">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" name="teilnehmer">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string" />
<xs:element name="vorname" type="xs:string" />
<xs:element name="semester" type="xs:string" />
<xs:element name="studienfach" type="xs:string" />
</xs:sequence>
<xs:attribute name="matrikel"
type="xs:int"
use="required" />
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="titel" type="xs:string" use="required" />
</xs:complexType>
</xs:element>
</xs:schema>
24
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Genügt unser XML-Dokument diesem Schema?
<?xml version="1.0" encoding="ISO-8859-1"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element maxOccurs="unbounded" name="teilnehmer">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string" />
<xs:element name="vorname" type="xs:string" />
<xs:element name="semester" type="xs:int" />
<xs:element name="studienfach" type="xs:int" />
</xs:sequence>
<xs:attribute name="matrikel"
type="xs:int"
use="required" />
</xs:complexType>
</xs:element>
</xs:schema>
25
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
- Online Tools XML-Datenmodellierung / XML-Schemasprachen
26
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Online Tools
DTD-Generator (http://www.on-xml.com/editor_demo.php)
- ist gleichzeitig vollwertiger XML-Editor
27
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Online Tools
XML-Schema-Generator
(http://www.xmlforasp.net/codebank/system_xml_schema/buildschema/buildxmlschema.aspx)
- verschiedene XML-Schema-Stile generierbar
28
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Online Tools
XML-Validierung (http://xmlvalidation.com)
- unterstützt DTD- und XML-Schema-Validierung
29
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
- Wiederholung/Übung XML-Abfrage- und Transformationssprachen
31
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Warum sind die Attributwerte nicht im Ergebnis enthalten?
XSLT
XSLT 1.0 Standardregeln
XML
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
Der Name des Wurzelelements lautet:
<xsl:value-of select="/child::node()/name()"/>
<xsl:apply-templates/>
</xsl:template>
</xsl:stylesheet>
<?xml version="1.0" encoding="ISO-8859-1"?>
<vorlesung titel="XML ...">
<teilnehmer matrikel="4711">
<name>Mustermann</name>
<vorname>Max</vorname>
<semester>5</semester>
<studienfach>8</studienfach>
</teilnehmer>
<teilnehmer matrikel="4736">
<name>Normalverbraucher</name>
<vorname>Otto</vorname>
<semester>6</semester>
<studienfach>10</studienfach>
</teilnehmer>
</vorlesung>
32
Der Name des
Wurzelelements lautet:
vorlesung
Mustermann
Max
5
8
Ergebnis
Normalverbraucher
Otto
6
10
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Warum sind die Attributwerte nicht im Ergebnis enthalten?
XSLT 1.0 Standardregeln
verwendete Standardregel
(1)
(2)
<?xml version="1.0" encoding="ISO-8859-1"?>
<vorlesung titel="XML ...">
<teilnehmer matrikel="4711">
<name>Mustermann</name>
<vorname>Max</vorname>
...
<?xml version="1.0" encoding="ISO-8859-1"?>
<vorlesung titel="XML ...">
<teilnehmer matrikel="4711">
<name>Mustermann</name>
<vorname>Max</vorname>
...
<xsl:template match="*">
<xsl:apply-templates />
<xsl:template>
(<xsl:apply-templates />
≙
<xsl:apply-templates select="*" />)
("*" ≙ "child::*")
Attribute sind keine Kinder und daher nicht über die Achse child,
sondern nur über die Achse attribute (@) selektierbar
33
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Warum sind die Attributwerte nicht im Ergebnis enthalten?
Modifikation des Beispiels
XSLT
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
Der Name des Wurzelelements lautet:
<xsl:value-of select="/child::node()/name()"/>
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="*">
<xsl:apply-templates select="*|@"/>
</xsl:template>
</xsl:stylesheet>
XML
<?xml version="1.0" encoding="ISO-8859-1"?>
<vorlesung titel="XML ...">
<teilnehmer matrikel="4711">
<name>Mustermann</name>
<vorname>Max</vorname>
<semester>5</semester>
<studienfach>8</studienfach>
</teilnehmer>
<teilnehmer matrikel="4736">
<name>Normalverbraucher</name>
<vorname>Otto</vorname>
<semester>6</semester>
<studienfach>10</studienfach>
</teilnehmer>
</vorlesung>
34
Ergebnis
Der Name des
Wurzelelements lautet:
vorlesung
XML ...
4711
Mustermann
Max
5
8
4736
Normalverbraucher
Otto
6
10
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
XPath 1.0 Datentypen (4)
Zeichenketten
Zahlen
Ein Text
ID4711
007
4711
0.815
XPath 1.0
Datentypen
<studienfach>8</studienfach>
<studienfach>10</studienfach>
Knotenmengen
35
true
false
Wahrheitswerte
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Wie leiten sich Wahrheitswerte ab?
Wahrheitswert
Länge > 0
true
Länge = 0
false
Zeichenketten
Menge ist nicht leer
true
Knotenmenge
Menge ist leer (∅)
false
Zahl ≠ 0 und Zahl ≠ NaN
true
Zahl
Zahl = 0 oder Zahl = NaN
36
false
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Zusammensetzung eines XPath 1.0 Ausdrucks am Beispiel
(1) ?
Lokalisierungspfad
child::vorlesung/child::teilnehmer[@matrikel="4711"]/child::name/child::text()
(2) ?
Lokalisierungsschritt
child::teilnehmer[@matrikel="4711"]
(3) ?
Achse
37
(4) ?
Knotentest
(5) ?
Prädikat
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Welche Achsen werden durch die Bereiche gekennzeichnet?
ancestor
precedingsibling
parent
followingsibling
self
preceding
child
following
descendant
38
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Welche Möglichkeiten bieten Knotentests?
Knotentyp
(1) ?
node()
comment()
text()
Einschränkung nach
teilnehmer
*
Knotenname
(2) ?
39
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Welche Operatoren(-arten) sind in Prädikaten zulässig? (4)
boolesche Operatoren
Vergleichsoperatoren
and
or
+
*
div
mod
=, !=
>, >=
< (<), <= (<=)
Operatoren
|
arithmetische Operatoren
40
Mengenoperatoren
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Beispielabfragen
Was wird abgefragt und wie lautet das Ergebnis?
der Name des Teilnehmers mit der Matrikelnummer 4711
vorlesung/teilnehmer[
@matrikel="4711"
]/name/text()
Mustermann
41
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Beispielabfragen
Was wird abgefragt und wie lautet das Ergebnis?
Vorlesungen die von mindestens zwei Teilnehmern besucht werden
vorlesung[
count(teilnehmer) >= 2
]/@titel
titel="XML ..."
42
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Beispielabfragen
Was wird abgefragt und wie lautet das Ergebnis?
alle Teilnehmer mit dem Studiengang 7 oder 8
vorlesung/teilnehmer[
studiengang = 7 or
studiengang = 8
]/@matrikel
*
* Im XML-Dokument heißt es nicht studiengang sondern studienfach
43
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Beispielabfragen
Was wird abgefragt und wie lautet das Ergebnis?
der Teilnehmer, der sich zuletzt eingeschrieben hat *
vorlesung/teilnehmer[last()]/@matrikel
matrikel="4736"
* Annahme: Teilnehmer haben sich in der Reihenfolge eingeschrieben, in der sie im Dokument vermerkt sind
44
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Beispielabfragen
Was wird abgefragt und wie lautet das Ergebnis?
Teilnehmer, die bereits überdurchschnittlich lange studieren
vorlesung/teilnehmer[
semester/text() > (
sum(../teilnehmer/semester/text()) div
(count(../teilnehmer))
)
]/@matrikel
matrikel="4736"
45
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Beispielabfragen
Was wird abgefragt und wie lautet das Ergebnis?
Teilnehmer mit der größten Matrikelnummer
vorlesung/teilnehmer[
(not(@matrikel < following-sibling::teilnehmer/@matrikel) or
not(following-sibling::teilnehmer))
and (not(@matrikel < preceding-sibling::teilnehmer/@matrikel) or
not(preceding-sibling::teilnehmer))
]/@matrikel
matrikel="4736"
46
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Welche Funktion erfüllen die markierten XSLT-Anweisungen?
XSLT 1.0 „Basics“
für alle Childs der Wurzel ("/") – in unserem Beispiel also alle Knoten des XMLDokuments – werden (falls vorhanden) weitere Template-Matchings durchgeführt
für alle Childs der Wurzel ("/child::node()/name()") – also stets genau
einen Knoten – wird der Name in das Transformationsergebnis geschrieben
für die Wurzel wird ein spezifiziertes Template-Matching durchgeführt
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
Der Name des Wurzelelements lautet:
<xsl:value-of select="/child::node()/name()"/>
<xsl:apply-templates/>
</xsl:template>
</xsl:stylesheet>
47
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Wozu passen die Inhalte der Standardregeln?
Element
Wurzel
Attribut
<xsl:apply-templates />
<xsl:value-of select="."/>
Prozessorinstruktion
<!–- keine Aktion -->
Text
Kommentar
48
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Welche Template wird bei der Regelkollision verwendet?
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:apply-templates select="*/teilnehmer"/>
</xsl:template>
<xsl:template match="*">
1
</xsl:template>
<xsl:template match="vorlesung/teilnehmer">
2
</xsl:template>
<xsl:template match="teilnehmer">
3
</xsl:template>
</xsl:stylesheet>
49
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Welche Möglichkeiten bieten XSLT 1.0 zum Kopieren von Knoten?
xsl:copy
(1) ?
kopiert einen einzelnen Knoten (aktuelle Kontextknoten)
Möglichkeiten zum
Kopieren von Knoten
kopiert einen vollständigen (Teil-)Baum,
entweder ausgehend vom Kontextknoten
oder von beliebig selektierbarem Knoten
xsl:copy-of
(2) ?
50
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Welche XSLT 1.0 Kontrollstrukturen haben wir kennengelernt? (3)
bedingte Anweisungen
(xsl:if)
Schleifen
(xsl:for-each)
Welche
Kontrollstrukturen
Mehrfachverzweigungen
(xsl:choose, xsl:when und xsl:otherwise)
51
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Welche „Platzhalter“ können in XSLT 1.0 verwendet werden?
Variablen
(1) ?
eher im Sinn einer Konstante zu verstehen,
können innerhalb des definierten Kontexts verwendet werden
Platzhalter in XSLT
ähnlich zu Variablen,
jedoch nur in Verbindung von benannten Templates
Parameter
(2) ?
52
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Beispieltransformationen
Wie lautet das Ergebnis und warum kommt es zustande?
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
</xsl:stylesheet>
Mustermann
Max
5
8
Normalverbraucher
Otto
6
10
53
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Beispieltransformationen
Wie lautet das Ergebnis und warum kommt es zustande?
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:apply-templates select="teilnehmer"/>
</xsl:template>
</xsl:stylesheet>
54
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Beispieltransformationen
Wie lautet das Ergebnis und warum kommt es zustande?
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:apply-templates select="vorlesung/teilnehmer"/>
</xsl:template>
</xsl:stylesheet>
Mustermann
Max
5
8
Normalverbraucher
Otto
6
10
55
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Beispieltransformationen
Wie lautet das Ergebnis und warum kommt es zustande?
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:apply-templates select="vorlesung/teilnehmer/@*"/>
</xsl:template>
</xsl:stylesheet>
47114736
56
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Beispieltransformationen
Wie lautet das Ergebnis und warum kommt es zustande?
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:for-each select="vorlesung/teilnehmer">
<xsl:value-of select="name"/>
<xsl:if test="following-sibling::teilnehmer">
<xsl:text>, </xsl:text>
</xsl:if>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
Mustermann, Normalverbraucher
57
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Beispieltransformationen
Wie lautet das Ergebnis und warum kommt es zustande?
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="vorlesung">
<xsl:element name="verzeichnis">
<xsl:copy-of select="."/>
<xsl:copy>
<xsl:attribute name="titel">XML Fortsetzung</xsl:attribute>
<xsl:copy-of select="teilnehmer"/>
</xsl:copy>
</xsl:element>
<?xml version="1.0" encoding="ISO-8859-1"?>
</xsl:template>
<verzeichnis>
</xsl:stylesheet>
<vorlesung titel="XML ...">
<teilnehmer matrikel="4711">...</teilnehmer>
<teilnehmer matrikel="4736">...</teilnehmer>
</vorlesung>
<vorlesung titel="XML Fortsetzung">
<teilnehmer matrikel="4711">...</teilnehmer>
<teilnehmer matrikel="4736">...</teilnehmer>
</vorlesung>
</verzeichnis>
58
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
- Online Tools XML-Abfrage- und Transformationssprachen
59
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Online Tools
XPath-Scanner (http://chris.photobooks.com/xml/default.htm)
- kann auch XSLT-Transformationen
60
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Online Tools
XSLT-Prozessor (http://xslttest.appspot.com/)
- besitzt Möglichkeit zur direkten Darstellung von HTMLTransformationsergebnissen
61
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
- Wiederholung/Übung XML-Abfrage- und Transformationssprachen (Teil 2)
63
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Welche Weiterentwicklungen ergaben sich durch XPath 2.0 (4)
Sequenzen
als Ersatz für Knotenmengen
zusätzliche Ausdrücke
Bedingungsausdrücke
for-Ausdrücke
Quantifizierungsausdrücke
Weiterentwicklungen
in Anlehnung an XML-Schema
(zzgl. 5 neuer Datentypen)
erweiterte Operatoren und zahlreiche
neue Funktionen
erweitertes Typsystem
neue Funktionen
und Operatoren
64
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Wie heißt das neue Konstrukt in XPath 2.0 und wie setzt es sich zusammen?
XPath 2.0 – Erweiterung des Datenmodells
(1) ?
Sequenz
(1, "Ein Text")
Item
(2) ?
(atomarer Typ)
65
Item
(3) ?
(atomarer Wert)
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Zusammensetzung eines XPath 2.0 Pfadausdrucks am Beispiel
Pfadausdruck
(1)
?
vorlesung/if (child) then (child::teilnehmer[@matrikel="4711"]/name) else "kein Teilnehmer"
Lokalisierungsschritt
(2) ?
XPath 2.0
Ausdruck
(6) ?
child::teilnehmer[@matrikel="4711"]
(Bedingungsausdruck)
(3) ?
Achse
66
(4) ?
Knotentest
(5) ?
Prädikat
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Was gilt und warum gilt es?
(1)
(2)
67
(1 to 5) = reverse((5,4,3,2,1))
(1,2,3) = (3,2,1)
(3)
((1,3,2) > (1,2,3)) and ((1,3,2) < (1,2,3))
(4)
subsequence((1 to 5), 2, 1) = 2
(5)
0815 instance of xs:integer
(6)
(1,2,3,2) = (1,2,3)
(7)
1,(2,3) = (1,2,3)
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Welche der Ausdrücke arbeiten mit Variablen?
Bedingungsausdruck
Quantifizierungsausdruck
Variable
for-Ausdruck
68
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Wo liegt der Unterschied zwischen den Vergleichsoperatoren?
Sequenzvergleiche
(und Einzelwertvergleiche)
=, !=, <, >, <=, >=
Unterschied
eq, ne, lt, gt,
le,
ge
Einzelwertvergleiche
69
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Beispielabfragen
Was wird abgefragt und wie lautet das Ergebnis?
Teilnehmer mit der größten Matrikelnummer
(vorlesung/teilnehmer[
@matrikel = max(parent::*/teilnehmer/@matrikel)
]/data(@matrikel))
(4736)
vorlesung/teilnehmer[
(not(@matrikel < following-sibling::teilnehmer/@matrikel) or
not(following-sibling::teilnehmer))
and (not(@matrikel < preceding-sibling::teilnehmer/@matrikel) or
not(preceding-sibling::teilnehmer))
]/@matrikel
70
vgl. XPath 1.0
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Beispielabfragen
Was wird abgefragt und wie lautet das Ergebnis?
Welche Veranstaltungen besuchen Max und Otto gemeinsam?
(vorlesung/
(if (teilnehmer[@matrikel = 4711] and
teilnehmer[@matrikel = 4736])
then @titel
else ())
)
(XML ...)
71
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Beispielabfragen
Was wird abgefragt und wie lautet das Ergebnis?
In welchen Semestern befinden sich die Teilnehmer der Vorlesung?
(for $var1 in
distinct-values(vorlesung/teilnehmer/semester)
return
concat(
"Semester ", $var1, ": ",
count(vorlesung/teilnehmer[semester = $var1]),
" Teilnehmer")
)
(Semester 5: 1 Teilnehmer,
Semester 6: 1 Teilnehmer)
72
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Beispielabfragen
Was wird abgefragt und wie lautet das Ergebnis?
Teilnehmer die im 5ten oder 6ten Semester sind bzw. deren
Matrikelnummer mit „47“ beginnt
(vorlesung/teilnehmer[semester = 5 or semester = 6]
/@matrikel
,
vorlesung/teilnehmer[starts-with(@matrikel, "47")]
/@matrikel)
(4711, 4736, 4711, 4736)
73
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Beispielabfragen
Was wird abgefragt und wie lautet das Ergebnis?
Teilnehmer die im 5ten oder 6ten Semester sind bzw. deren
Matrikelnummer mit „47“ beginnt
(vorlesung/teilnehmer[semester = 5 or semester = 6]
/@matrikel
union
vorlesung/teilnehmer[starts-with(@matrikel, "47")]
/@matrikel)
(4711, 4736)
74
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Beispielabfragen
Was wird abgefragt und wie lautet das Ergebnis?
Teilnehmer die im 5ten oder 6ten Semester sind bzw. deren
Matrikelnummer mit „47“ beginnt
(vorlesung/teilnehmer[semester = 5 or semester = 6 or
starts-with(@matrikel, "47")]/data(@matrikel))
(4711, 4736)
75
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Beispielabfragen
Was wird abgefragt und wie lautet das Ergebnis?
Teilnehmer die im 5ten oder 6ten Semester sind bzw. deren
Matrikelnummer mit „47“ beginnt
((vorlesung/teilnehmer[semester = 5 or semester = 6]
,
vorlesung/teilnehmer[starts-with(@matrikel, "47")])
/data(@matrikel))
(4711, 4736)
76
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Beispielabfragen
Was wird abgefragt und wie lautet das Ergebnis?
Ist zu allen Teilnehmern ein Studienfach-Element enthalten?
(data(
every $teiln in vorlesung/teilnehmer
satisfies $teiln/*[node-name(.) cast as xs:string = "studienfach"]
))
true
77
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Aus welchen Klauseln besteht ein FLWOR-Ausdruck und wozu dienen diese?
F
For
– definiert eine Variable, die eine Liste von Elementen durchläuft
L
Let
– definiert eine Variable, deren Wert eine ganze Liste von Elementen ist
W
Where
– filtert das Ergebnis (ausgewählten Elemente) anhand einer Bedingung
O
Order by
– sortiert das Ergebnis
R
Return
– liefert das Ergebnis als Sequenz in der angegebenen Form zurück
78
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Welche „Selektionsklauseln“ sind im FLWOR-Ausdruck möglich? (2)
for-Klausel
definiert Variable, die an jedes Element (Item) der
Sequenz einzeln gebunden wird (per in)
„Selektionsklauseln“
definiert Variable, die an die ganze
Sequenz gebunden wird (per :=)
let-Klausel
79
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Welches Ergebnis resultiert für den Ausdruck in den einzelnen Fällen?
for $var1 in (1,2)
for $var2 in ("a","b")
<t><v1>1</v1><v2>a</v2></t>
<t><v1>1</v1><v2>b</v2></t>
<t><v1>2</v1><v2>a</v2></t>
<t><v1>2</v1><v2>b</v2></t>
for $var1 in (1,2)
let $var2 := ("a","b")
<t><v1>1</v1><v2>a b</v2></t>
<t><v1>2</v1><v2>a b</v2></t>
Mehrere Variablen
return <t><v1>{$var1}</v1><v2>{$var2}</v2></t>
<t><v1>1 2</v1><v2>a</v2></t>
<t><v1>1 2</v1><v2>b</v2></t>
let $var1 := (1,2)
for $var2 in ("a","b")
80
<t><v1>1 2</v1><v2>a b</v2></t>
let $var1 := (1,2)
let $var2 := ("a","b")
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Welche Ergebnisse liefern die FLWOR-Ausdrücke?
let $var1 := (0)
for $var2 in (1 to 5)
let $var1 := $var1 + 1
return $var1
let $var1 := (0)
for $var2 in (1 to 5)
for $var1 in $var1 + 1
return $var1
(1,1,1,1,1)
(1,1,1,1,1)
Gültigkeitsbereich
(3,3,3,3,3)
(1)
let $var1 :=
for $var2 in
let $var1 :=
let $var1 :=
return $var1
81
(0)
(1 to 5)
$var1 + 1
$var1 + 2
let $var1 := (0)
let $var2 := (1 to 5)
let $var1 := $var1 + 1
return $var1
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Welche Konstruktoren existieren in XPath 2.0?
direkte Konstruktoren
(1) ?
<name>Inhalt</name>
name="Inhalt"
Inhalt
<!--Inhalt-->
kein Konstruktor für Dokumentknoten
<?name Inhalt?>
Konstruktoren
element name
attribute name
document
text
comment
processing-instruction name
{Inhalt}
{Inhalt}
{Inhalt}
{Inhalt}
{Inhalt}
{Inhalt}
(2) ?
berechnete Konstruktoren
82
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Wie lassen sich XML-Dokumente klassifizieren?
(1) ?
datenorientierte
Dokumente
Klassifizierung
dokumentorientierte Dokumente
(2) ?
83
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Welche Vorteile bietet XML? (6)
strenge Schemata
meist gezielter Zugriff auf
Dokumentteile nötig
standardisierter Datenaustausch
datenorientierte
Dokumente
XQuery
zumeist
Felddaten
stark strukturierte und typisierte Speicherung
Dokumentreihenfolge meist irrelevant
84
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Welche Vorteile bietet XML? (6)
in der Regel Komplettzugriff
kaum vorhandene bzw.
wenig strenge Schemata
(viel) Text und (wenig) Felddaten
semistrukturiertes XML
dokumentorientierte
Dokumente
XSLT
Dokumentreihenfolge relevant
Präsentation, Strukturierung oder Konvertierung von Dokumenten
85
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Beispielabfragen
Die folgenden Beispielabfragen erwarten, dass im voraus das BeispielDokument an die Variable $document gebunden werden muss.
let $document :=
doc("http://www.informatik.uni-jena.de
/dbis/lehre/ws2012/xml/Beispiel.xml")
<vorlesung titel="XML ...">
<teilnehmer matrikel="4711">
<name>Mustermann</name>
<vorname>Max</vorname>
<semester>5</semester>
<studienfach>8</studienfach>
</teilnehmer>
<teilnehmer matrikel="4736">
<name>Normalverbraucher</name>
<vorname>Otto</vorname>
<semester>6</semester>
<studienfach>10</studienfach>
</teilnehmer>
</vorlesung>
86
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Beispielabfragen
Was wird abgefragt und wie lautet das Ergebnis?
Wie heißen die Initialen der Teilnehmer?
for $teiln in $document/vorlesung/teilnehmer
let $vorname_kurz :=
concat(substring($teiln/vorname, 1, 1), ".",
substring($teiln/name, 1, 1), ".")
return <name>{$vorname_kurz}</name>
<name>M.M.</name>
<name>O.N.</name>
87
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Beispielabfragen
Was wird abgefragt und wie lautet das Ergebnis?
Welche Teilnehmer sind nicht im 5ten Semester?
for $teiln in $document/vorlesung/teilnehmer
where $teiln/semester != 5
return <matrikel>{$teiln/@matrikel}</matrikel>
<matrikel matrikel="4736"/>
88
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Beispielabfragen
Was wird abgefragt und wie lautet das Ergebnis?
Welche Teilnehmer sind nicht im 5ten Semester?
for $teiln in $document/vorlesung/teilnehmer
where $teiln/semester != 5
return <matrikel>{data($teiln/@matrikel)}</matrikel>
<matrikel>4736</matrikel>
89
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Beispielabfragen
Was wird abgefragt und wie lautet das Ergebnis?
Sortiere die angegebenen Elemente nach dem Attribut j!
for $var1 in (
<i j="1" k="a"/>,
<i j="2" k="b"/>,
<i k="c"/>
)
order by document{$var1}/i/@j empty least
return $var1
<i k="c"/>
<i j="1" k="a"/>
<i j="2" k="b"/>
90
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Beispielabfragen
Was wird abgefragt und wie lautet das Ergebnis?
In welchem Semester befindet sich die Mehrheit der Teilnehmer?
let $subquery := (
for $sems in distinct-values($document/vorlesung/teilnehmer/semester)
let $anz := count($document/vorlesung/teilnehmer[semester = $sems])
return document{<semester><sem>{$sems}</sem><anz>{$anz}</anz></semester>}
)
return concat ("Die meisten Teilnehmer studieren im ",
($subquery/semester/sem[parent::*/anz = max($subquery/semester/anz)])[1],
"ten Semester.")
Die meisten Teilnehmer studieren im 5ten Semester.
91
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
- Online Tools XML-Abfrage- und Transformationssprachen
92
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Online Tools
XPath 2.0-Auswerter (http://www.qutoric.com/xslt/analyser/xpathtool.html)
- XML-Dokument muss zuvor (per Drag-n-Drop) geuploadet werden
93
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Online Tools
XQuery-Prozessor (http://www.zorba-xquery.com/html/demo)
- setzt voraus, dass XML-Dokument online verfügbar ist
94
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
- Wiederholung/Übung XML in relationalen Datenbanksystemen
96
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Welche Gründe für XML-Datenbanken haben wir besprochen?
XML in Datenbanken – Warum?
sichere, dauerhafte Speicherung
von (ausgetauschten) Dokumenten
im Originalzustand (auch aufgrund
rechtlicher Vorschriften)
Datenaustausch
...
Dokumentenverwaltung
XML-Datenbanksystem als
intelligentes und leistungsstarkes
Backend mit Basisfunktionalitäten
(wie bspw. Textsuchverfahren) für
Dokumentenverwaltungssysteme
97
XML
effizientes Suchen in XMLAnwendungsdaten,
Möglichkeit paralleler
Mehrbenutzerzugriffe
XML-basierte Anwendungen
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Welche Modell für XML-Datenbanken haben wir kennengelernt?
monolithische Ansatz
fragmentorientierte Ansatz
Modelle
dokumentorientierte Ansatz
98
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Welche datenbankspezifischen Anforderungen stellen sich an XML-DBMS?
Mehrbenutzerbetrieb
Skalierbarkeit
Transaktionskonzept (ACID)
datenbankspezifische
Anforderungen
Verfügbarkeit
Erweiterbarkeit
Sicherheit
Effizienz
Speicherstrukturunabhängigkeit
99
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Welche XML-spezifischen Anforderungen stellen sich an XML-DBMS?
Schemavorgabe und Validierung
Strukturunabhängigkeit
unterschiedlich granulare Möglichkeiten zur Autorisierung
Schemaunabhängigkeit
SchemaEvolution
Dokumentenbehandlung
Standardkonformität
XML-spezifische
Anforderungen
offenes
Inhaltsmodell
Speicherung von Nicht-XML-Daten
Web-Anbindung und andere Protokolle
Kodierung und
Internationalisierung
XML-spezifische Schnittstellen zur Datenabfrage und –manipulation
100
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Welche Ansätze zur XML-Speicherung in rel. DBMS haben wir behandelt?
inhaltsorientierte Zerlegung
generisch
definitorisch
strukturorientierte Zerlegung
XML in
relationalen
DBMS
opake Speicherung
101
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Welche relationale XML-Speicherform wird beispielhaft dargestellt?
strukturorientierte Zerlegung
DOKUMENTKENNUNG
KNOTENNUMMER
VORGÄNGERNUMMER
ORDNUNGSZAHL
NAME
1
1
0
1
vorlesung
1
2
1
1
3
1
1
4
3
1
5
3
1
6
3
1
7
3
1
8
3
102
titel
1
WERT
XML...
teilnehmer
matrikel
4711
1
name
Mustermann
2
vorname
Max
<vorlesung titel="XML ...">
3 <teilnehmer
semester
5
matrikel="4711">
<name>Mustermann</name>
4
studienfach
8
<vorname>Max</vorname>
<semester>5</semester>
<studienfach>8</studienfach>
</teilnehmer>
</vorlesung>
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Welche relationale XML-Speicherform wird beispielhaft dargestellt?
generische inhaltsorientierte Zerlegung
CREATE TABLE TEILNEHMER (MATRIKEL INT NOT NULL,
NAME VARCHAR(20) NOT NULL,
VORNAME VARCHAR(20) NOT NULL,
STUDIENFACH INT NOT NULL,
SEMESTER INT NOT NULL)
<!ELEMENT TEILNEHMER (Row*)>
<!ELEMENT Row (MATRIKEL, NAME, VORNAME, SEMESTER, STUDIENFACH)>
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
103
MATRIKEL (#PCDATA)>
NAME (#PCDATA)>
VORNAME (#PCDATA)>
SEMESTER (#PCDATA)>
STUDIENFACH (#PCDATA)>
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Welche relationale XML-Speicherform wird beispielhaft dargestellt?
opake Speicherung
CREATE TABLE VORLESUNG (ID INT NOT NULL, XML CLOB(1M))
<!ELEMENT vorlesung (teilnehmer+)>
<!ATTLIST vorlesung titel CDATA #REQUIRED>
<!ELEMENT teilnehmer (name, vorname, semester,
studienfach)>
<!ATTLIST teilnehmer matrikel NMTOKEN #REQUIRED>
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
104
name (#PCDATA)>
vorname (#PCDATA)>
semester (#PCDATA)>
studienfach (#PCDATA)>
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Welche relationale XML-Speicherform wird beispielhaft dargestellt?
strukturorientierte Zerlegung
CREATE TABLE VORLESUNG (DOKUMENTKENNUNG INT NOT NULL,
KNOTENNUMMER INT NOT NULL,
VORGÄNGERNUMMER INT NOT NULL,
ORDNUNGSZAHL INT NULL,
NAME VARCHAR(1000) NOT NULL,
WERT VARCHAR(1000) NULL)
<!ELEMENT vorlesung (teilnehmer+)>
<!ATTLIST vorlesung titel CDATA #REQUIRED>
<!ELEMENT teilnehmer (name, vorname, semester,
studienfach)>
<!ATTLIST teilnehmer matrikel NMTOKEN #REQUIRED>
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
105
name (#PCDATA)>
vorname (#PCDATA)>
semester (#PCDATA)>
studienfach (#PCDATA)>
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Welche relationale XML-Speicherform wird beispielhaft dargestellt?
generische inhaltsorientierte Zerlegung
MATRIKEL
NAME
VORNAME
SEMESTER
STUDIENFACH
4711
Mustermann
Max
5
8
<TEILNEHMER>
<ROW>
<MATRIKEL>4711</MATRIKEL>
<NAME>Mustermann</NAME>
<VORNAME>Max</VORNAME>
<SEMESTER>5</SEMESTER>
<STUDIENFACH>8</STUDIENFACH>
</ROW>
</TEILNEHMER>
106
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Welche Aspekte werden durch SQL/XML genormt?
Abbildungsvorschriften
zwischen SQL und XML
relationaler Datentyp XML
SQL/XML
XML-spezifische (SQL-)Funktionen
107
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Welche Typen von Funktionen werden durch SQL/XML genormt?
Konstruktionsfunktionen
Funktion zur Zerlegung
Funktion zur XML-Schemavalidierung
XML-spezifische
(SQL-)Funktionen
Konvertierungsfunktionen
Funktion zur Auswertung
108
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Beispielabfragen
Was wird abgefragt und wie lautet das Ergebnis?
Transformiere die Daten jedes Teilnehmers ins XML-Format!
MATRIKEL
NAME
VORNAME
SEMESTER
STUDIENFACH
4711
Mustermann
Max
5
8
4736
Normalverbraucher
Otto
6
10
SELECT
XMLELEMENT(NAME "teilnehmer",
XMLATTRIBUTES(
MATRIKEL AS "matrikel"
),
XMLFOREST(
NAME AS "name",
VORNAME AS "vorname",
SEMESTER AS "semester",
STUDIENFACH AS "studienfach"
)
)
FROM TEILNEHMER
109
<teilnehmer matrikel="4711">
<name>Mustermann</name>
<vorname>Max</vorname>
<semester>5</semester>
<studienfach>8</studienfach>
</teilnehmer>
<teilnehmer matrikel="4711">
<name>Normalverbraucher</name>
<vorname>Otto</vorname>
<semester>6</semester>
<studienfach>10</studienfach>
</teilnehmer>
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Beispielabfragen
Was wird abgefragt und wie lautet das Ergebnis?
Erstelle im XML-Format eine Liste aller Teilnehmer!
MATRIKEL
NAME
VORNAME
SEMESTER
STUDIENFACH
4711
Mustermann
Max
5
8
4736
Normalverbraucher
Otto
6
10
SELECT
XMLELEMENT(NAME "TEILNEHMERLISTE",
XMLAGG(
XMLELEMENT(NAME "TEILNEHMER",
CONCAT(VORNAME,
CONCAT(' ', NAME)
)
)
)
)
FROM TEILNEHMER;
110
<TEILNEHMERLISTE>
<TEILNEHMER>
Max Mustermann
</TEILNEHMER>
<TEILNEHMER>
Otto Normalverbraucher
</TEILNEHMER>
</TEILNEHMERLISTE>
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Beispielabfragen
Was wird abgefragt und wie lautet das Ergebnis?
Erstelle im XML-Format eine Liste aller Teilnehmer in Abhängigkeit ihres Studienfachs!
MATRIKEL
NAME
VORNAME
SEMESTER
STUDIENFACH
4711
Mustermann
Max
5
8
4736
Normalverbraucher
Otto
6
10
SELECT
XMLELEMENT(NAME "TEILNEHMERLISTE",
XMLAGG(SUB.FACHLISTE)
)
FROM (
SELECT
XMLELEMENT(NAME "STUDIENFACH",
XMLATTRIBUTES(STUDIENFACH AS "ID"),
XMLAGG(
XMLELEMENT(NAME "TEILNEHMER",
CONCAT(VORNAME,
CONCAT(' ', NAME)
)
)
)
) AS FACHLISTE
FROM TEILNEHMER
GROUP BY STUDIENFACH) AS SUB;
111
<TEILNEHMERLISTE>
<STUDIENFACH ID="8">
<TEILNEHMER>
Max Mustermann
</TEILNEHMER>
</STUDIENFACH>
<STUDIENFACH ID="10">
<TEILNEHMER>
Otto Normalverbraucher
</TEILNEHMER>
</STUDIENFACH>
</TEILNEHMERLISTE>
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Beispielabfragen
Was wird abgefragt und wie lautet das Ergebnis?
Ermittle die Matrikelnummern der Teilnehmer!
ID
XML_DATEN
1
<teilnehmer matrikel="4711">
<name>Mustermann</name><vorname>Max</vorname>
<semester>5</semester><studienfach>8</studienfach>
</teilnehmer>
SELECT
XMLQUERY(
'for $var1 in //teilnehmer
return $var1/@matrikel'
PASSING XML_DATEN
) AS ERGEBNIS
FROM TEILNEHMER
112
ERGEBNIS
4711
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Beispielabfragen
Was wird abgefragt und wie lautet das Ergebnis?
Prüfe ob jede Matrikelnummer nur einmal vergeben wurde!
ID
XML_DATEN
1
<teilnehmer matrikel="4711">
<name>Mustermann</name><vorname>Max</vorname>
<semester>5</semester><studienfach>8</studienfach>
</teilnehmer>
SELECT
XMLQUERY(
'for $var1 in //teilnehmer
return $var1/@matrikel'
PASSING XML_DATEN
) AS MATRIKEL,
COUNT(*) AS PRUEFWERT
FROM TEILNEHMER
GROUP BY PRUEFWERT
ORDER BY PRUEFWERT DESC
FETCH FIRST 1 ROW ONLY;
113
MATRIKEL
PRUEFWERT
4711
1
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Beispielabfragen
Was wird abgefragt und wie lautet das Ergebnis?
Extrahiere die Matrikelnummer aus den XML-Daten und verwende sie als ID!
ID
XML_DATEN
1
<teilnehmer matrikel="4711">
<name>Mustermann</name><vorname>Max</vorname>
<semester>5</semester><studienfach>8</studienfach>
</teilnehmer>
UPDATE TEILNEHMER T_NEU SET ID =
SELECT X.MATRIKEL
FROM TEILNEHMER T_ALT, XMLTABLE(
'$xml_daten/teilnehmer'
PASSING T_ALT.XML_DATEN AS "xml_daten"
COLUMNS
MATRIKEL INTEGER PATH '@matrikel',
) X
WHERE T_ALT.ID = T_NEU.ID;
114
ID
XML_DATEN
4711
<teilnehmer matrikel="4711">
<name>Mustermann</name><vorname>Max</vorname>
<semester>5</semester><studienfach>8</studienfach>
</teilnehmer>
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Beispielabfragen
Was wird abgefragt und wie lautet das Ergebnis?
Überführe die Inhalte der XML-Daten in separate Spaltenwerte!
ID
XML_DATEN
1
<teilnehmer matrikel="4711">
<name>Mustermann</name><vorname>Max</vorname>
<semester>5</semester><studienfach>8</studienfach>
</teilnehmer>
SELECT
X.MATRIKEL, X.NAME, X.VORNAME,
X.SEMESTER, X.STUDIENFACH
FROM TEILNEHMER T, XMLTABLE(
'$xml_daten/teilnehmer'
PASSING T.XML_DATEN AS "xml_daten"
COLUMNS
MATRIKEL INTEGER PATH '@matrikel',
NAME VARCHAR(20) PATH 'name',
VORNAME VARCHAR(20) PATH 'vorname',
SEMESTER INTEGER PATH 'semester',
STUDIENFACH INTEGER PATH 'studienfach'
) X;
115
MATRIKEL
NAME
VORNAME
SEMESTER
STUDIENFACH
4711
Mustermann
Max
5
8
XML-Grundlagen, -Sprachen, -Datenhaltungsfragen
Herunterladen