1 Teil I Datenmodelle Kapitel 7: Semistrukturierte Modelle.

85
1 Teil I Teil I Datenmodelle Datenmodelle Kapitel 7: Semistrukturierte Modelle

Transcript of 1 Teil I Datenmodelle Kapitel 7: Semistrukturierte Modelle.

Page 1: 1 Teil I Datenmodelle Kapitel 7: Semistrukturierte Modelle.

1

Teil ITeil I

DatenmodelleDatenmodelle

Kapitel 7: Semistrukturierte Modelle

Page 2: 1 Teil I Datenmodelle Kapitel 7: Semistrukturierte Modelle.

2

Ursprung: Web-Daten unterscheiden sich drastisch von den bisher gewohnten Daten in Datenbanken: selbst-beschreibend heterogen, tief verschachtelt, unregelmäßig gemischt Dokument- und faktische Daten

Heutige Bedeutung: Diese Eigenschaften definieren ein universelles Datenaustauschformat Dafür sollte sich wieder ein Datenmodell angeben lassen

Wunsch nach Datenbankunterstützung: Vermeiden von Datentransformationen durch den Benutzer. Problem: Datenmodelle von Dokumentexperten, nicht

Datenbankexperten entworfen.

Motivation

Page 3: 1 Teil I Datenmodelle Kapitel 7: Semistrukturierte Modelle.

3

Literatur

Abiteboul, Buneman, Suciu: Data on the Web: From Relational to Semistructured to XML. Morgan Kaufmann. 1999

Kazakos, W.; Schmidt, A.; Tomczyk, P.: Datenbanken und XML – Konzepte, Anwendungen, Systeme. Springer. 2002

Klettke, M.; Mayer, H.: XML & Datenbanken. dpunkt.verlag. 2003

Rahm, E.; Vossen, G. (Hrsg.): Web & Datenbanken – Konzepte, Architekturen, Anwendungen. dpunkt.verlag. 2003

Page 4: 1 Teil I Datenmodelle Kapitel 7: Semistrukturierte Modelle.

4

Kapitel 7.1: Der Beginn - OEM

Page 5: 1 Teil I Datenmodelle Kapitel 7: Semistrukturierte Modelle.

5Polymorphe Typen

Atomare Typen stringPolymorphe Typen

Obj ::= ∥sel:Typ∥Set ::= {Obj}

Typ Atomarer Typ oder Obj. Objekt: Geordnete Sammlung als zusammengehörig

betrachteter atomarer oder zusammengesetzter Datenelemente. Die Zahl der Komponenten ist offen, jede wird nicht-eindeutig durch einen Selektor (Attribut) identifiziert.

Set: Menge von Objekten. Lässt sich auch über Objekt nachbilden, indem alle Mengenelemente das selbe Attribut erhalten.

Page 6: 1 Teil I Datenmodelle Kapitel 7: Semistrukturierte Modelle.

6

Bewertung

Strukturelle Mächtigkeit gering Beschränkte aber mächtige strukturelle Orthogonalität

Set Obj Atomarer Typ

Page 7: 1 Teil I Datenmodelle Kapitel 7: Semistrukturierte Modelle.

7

&o1

&o12 &o24 &o29

&o43&o96

&o243 &o206

&o25

“Serge”“Abiteboul”

1997

“Victor”“Vianu”

122 133

paperbook

paper

references

referencesreferences

authortitle

yearhttp

author

authorauthor

title publisherauthor

authortitle

pages

firstnamelastname

firstname lastname firstlast

bib

Veranschaulichung von Objekten als gerichtete Graphen

complex object

atomic object

Object Exchange Model (OEM)

object identifier

Page 8: 1 Teil I Datenmodelle Kapitel 7: Semistrukturierte Modelle.

8

&o1

&o12 &o24 &o29

&o43&o96

&o243 &o206

&o25

“Serge”“Abiteboul”

1997

“Victor”“Vianu”

122 133

paperbook

paper

references

referencesreferences

authortitle

yearhttp

author

authorauthor

title publisherauthor

authortitle

pages

firstnamelastname

firstname lastname firstlast

Bib

Object Exchange Model (OEM)

bib: &o1 { paper: &o12 { … }, book: &o24 { … }, paper: &o29 { author: &o52 “Abiteboul”, author: &o96 { firstname: &o243 “Victor”, lastname: &o206 “Vianu”}, title: &o93 “Regular path queries with constraints”, references: &o12, references: &o24, pages: &o25 { first: &o64 122, last: &o92 133} } }

bib: &o1 { paper: &o12 { … }, book: &o24 { … }, paper: &o29 { author: &o52 “Abiteboul”, author: &o96 { firstname: &o243 “Victor”, lastname: &o206 “Vianu”}, title: &o93 “Regular path queries with constraints”, references: &o12, references: &o24, pages: &o25 { first: &o64 122, last: &o92 133} } }

Page 9: 1 Teil I Datenmodelle Kapitel 7: Semistrukturierte Modelle.

9

bib: &o1 { paper: &o12 { … },

book: &o24 { … },

paper: &o29

{ author: &o52 “Abiteboul”,

author: &o96 { firstname: &o243 “Victor”,

lastname: &o206 “Vianu”},

title: &o93 “Regular path queries with constraints”,

references: &o12,

references: &o24,

pages: &o25 { first: &o64 122, last: &o92 133}

}

}

Object Exchange Model (OEM)

Textuelle Darstellung

{ paper: { author: “Abiteboul”, author: { firstname: “Victor”, lastname: “Vianu”}, title: “Regular path queries …”, pages: { first: 122, last: 133 } } }

{ paper: { author: “Abiteboul”, author: { firstname: “Victor”, lastname: “Vianu”}, title: “Regular path queries …”, pages: { first: 122, last: 133 } } }

OEM ohne Ordnung!

Page 10: 1 Teil I Datenmodelle Kapitel 7: Semistrukturierte Modelle.

10

{ row: { name: “John”, phone: 3634 },

row: { name: “Sue”, phone: 6343 },

row: { name: “Dick”, phone: 6363 }

}

n a m e p h o n e

J o h n 3 6 3 4

S u e 6 3 4 3

D i c k 6 3 6 3

row row row

name name namephone phone phone

“John” 3634“Sue” “Dick”6343 6363

Object Exchange Model (OEM)

Vergleich mit relationalen Daten

Page 11: 1 Teil I Datenmodelle Kapitel 7: Semistrukturierte Modelle.

11

Datenbasisschema

Wegen der Freizügigkeit des Modells: Keine a-priori Vereinbarung eines Schemas Hingegen: a-posteriori Extraktion eines Schemas: “Gibt es

gewisse Regelmäßigkeiten in den Daten?”

Page 12: 1 Teil I Datenmodelle Kapitel 7: Semistrukturierte Modelle.

12

Kapitel 7.2: XML

Page 13: 1 Teil I Datenmodelle Kapitel 7: Semistrukturierte Modelle.

13

XML eXtended Markup Language XML SGML Web-Standard (W3C) zum Datenaustausch:

Ein- und Ausgabedaten von Anwendungen können mittels XML beschrieben werden

Industrie muss sich dann noch pro Anwendungsbereich auf standardisierte Beschreibung einigen

Datenbank-Sichtweise: Als Meta-Grammatik eignet sich XML als Datenmodell für semistrukturierte Daten

Page 14: 1 Teil I Datenmodelle Kapitel 7: Semistrukturierte Modelle.

14

XML-Syntax (1) – XML-Element XML-Element (engl. element):

Obj ::= tagged-struct(∥attribute|Obj∥, string) Beschreibung eines Objekts, die durch passende

Markierungen (tags) wie <author> und </author> geklammert ist

Inhalt eines Elements: Freitext, attributierte Eigenschaften und/oder weitere Elemente (Unterelemente)

Elemente können beliebig geschachtelt sein Leere Elemente: <year></year> kurz: <year/>

<author><firstname> Serge </firstname>

<lastname> Abiteboul </lastname> <email> [email protected] </email>

email address may be wrong!</author>

<author><firstname> Serge </firstname>

<lastname> Abiteboul </lastname> <email> [email protected] </email>

email address may be wrong!</author>

Element author

Startmarkierung

Endmarkierung

Unterelemente

Freitext

Page 15: 1 Teil I Datenmodelle Kapitel 7: Semistrukturierte Modelle.

15

XML-Syntax (2) – XML-Attribut XML-Attribut (engl. attribute):

Name-Zeichenkettenwert-Paar Assoziiert mit einem Element Alternative Möglichkeit, Daten zu beschreiben

<author firstname=“Serge” lastname=“Abiteboul” email=“[email protected]”/><author firstname=“Serge” lastname=“Abiteboul” email=“[email protected]”/>

Attribut email

Weitere denkbare Beschreibung derselben Daten:

<author email=“[email protected]”><firstname> Serge </firstname> <lastname> Abiteboul </lastname>

</author>

<author email=“[email protected]”><firstname> Serge </firstname> <lastname> Abiteboul </lastname>

</author>

Page 16: 1 Teil I Datenmodelle Kapitel 7: Semistrukturierte Modelle.

16

&o1

&o12 &o24 &o29

Serge AbiteboulVictor Vianu 122 133

1997

paper book paper

author yearauthor

pages

firstname lastnamefirstname lastname first last

bib

Veranschaulichung von Objekten als gerichtete Graphen

XML-Graph

Objektidentifikator als Attribut im Knoten vermerktKnoten sind markiert

Text im Knoten vermerkt

Page 17: 1 Teil I Datenmodelle Kapitel 7: Semistrukturierte Modelle.

17

XML-Graph

&o1

&o12 &o24 &o29

Serge AbiteboulVictor Vianu 122 133

1997

paper book paper

author yearauthor

pages

firstname lastnamefirstname lastname first last

bib

<bib id=“o1”><paper id=“o12”>

<title> Foundations of Databases </title><author>

<firstname> Serge </firstname><lastname> Abiteboul </lastname>

</author> <year> 1997 </year><publisher> Addison Wesley </publisher>

</paper>...

</bib>

<bib id=“o1”><paper id=“o12”>

<title> Foundations of Databases </title><author>

<firstname> Serge </firstname><lastname> Abiteboul </lastname>

</author> <year> 1997 </year><publisher> Addison Wesley </publisher>

</paper>...

</bib>

Page 18: 1 Teil I Datenmodelle Kapitel 7: Semistrukturierte Modelle.

18

XML vs HTML XML: freie Bezeichner zur Beschreibung von

anwendungsspezifischer Semantik (Meta-Grammatik) HTML: feste Bezeichner (tag), hauptsächlich für die

Darstellung von Text (Grammatik) HTMLXMLSGML

<h1> bib </h1><p>

<i> Foundations of Databases </i> Serge Abiteboul<br> Addison Wesley, 1997

<p>...

<h1> bib </h1><p>

<i> Foundations of Databases </i> Serge Abiteboul<br> Addison Wesley, 1997

<p>...

HTML

<bib id=“o1”><paper id=“o12”>

<title> Foundations of Databases </title><author>

<firstname> Serge </firstname><lastname> Abiteboul </lastname>

</author> <year> 1997 </year><publisher> Addison Wesley </publisher>

</paper>...

</bib>

<bib id=“o1”><paper id=“o12”>

<title> Foundations of Databases </title><author>

<firstname> Serge </firstname><lastname> Abiteboul </lastname>

</author> <year> 1997 </year><publisher> Addison Wesley </publisher>

</paper>...

</bib> XMLPräsentationsangabe

Inhaltsangabe

Page 19: 1 Teil I Datenmodelle Kapitel 7: Semistrukturierte Modelle.

19

XML-Dokument

XML-Dokument: Ein Text-Dokument, das XML-Beschreibungen enthält

Wohlgeformtes XML-Dokument: Alle Elemente sind korrekt mit Start- und End-Tags

geklammert Dokument enthält genau ein Wurzelelement Wohlgeformte Dokumente dürfen aber immer noch

unstrukturierten Freitext enthalten Gültiges (engl. valid) XML-Dokument:

Wohlgeformtes XML-Dokument, das zu einem assoziierten Schema uneingeschränkt konform ist

Mittels eines Schemas kann man also die Gültigkeit eines XML-Dokumentes überprüfen

Schemas sind somit eine optionale Ergänzung

Page 20: 1 Teil I Datenmodelle Kapitel 7: Semistrukturierte Modelle.

20

Schemata in XML

DTD – Document Type Definition (Dokumentsicht): Einfache Grammatik für ein XML-Dokument

Deklaration von Elementen, Attributen, u.a. Beschränkt die beliebige Verschachtelung von Elementen und Attributen

Ist Teil des XML-Standards Erbe von SGML

XML-Schema (Datenbasiseinfluss): Komplexere Datendefinitionssprache:

Viele standardisierte Basistypen, z.B. float, double, decimal, boolean Typen und typisierte Objektreferenzen Klassenhierarchien / Vererbung Konsistenzbedingungen

Ist inzwischen Teil des XML-Standards Abwärtskompatibel zu DTDs

Page 21: 1 Teil I Datenmodelle Kapitel 7: Semistrukturierte Modelle.

21

XML-Schemata I: DTD Eine DTD definiert eine kontextfreie Grammatik für ein XML-

Dokument Zuvor beliebige Elemente und Attribute werden auf eine

definierte Auswahl und Struktur eingeschränkt

<bib><paper id=“o12”>

<title> Foundations of Databases </title><author>

<firstname> Serge </firstname><lastname> Abiteboul </lastname>

</author> <year> 1997 </year><publisher> Addison Wesley </publisher>

</paper>...

</bib>

<bib><paper id=“o12”>

<title> Foundations of Databases </title><author>

<firstname> Serge </firstname><lastname> Abiteboul </lastname>

</author> <year> 1997 </year><publisher> Addison Wesley </publisher>

</paper>...

</bib> XML

<!DOCTYPE bib [<!ELEMENT bib (paper*)><!ELEMENT paper (author+, year, publisher?)><!ATTLIST paper id ID #REQUIRED><!ELEMENT author (firstname*, lastname)><!ATTLIST author age CDATA #IMPLIED><!ELEMENT firstname (#PCDATA)><!ELEMENT lastname (#PCDATA)><!ELEMENT year (#PCDATA)>

<!ELEMENT publisher (#PCDATA)>...

]>

<!DOCTYPE bib [<!ELEMENT bib (paper*)><!ELEMENT paper (author+, year, publisher?)><!ATTLIST paper id ID #REQUIRED><!ELEMENT author (firstname*, lastname)><!ATTLIST author age CDATA #IMPLIED><!ELEMENT firstname (#PCDATA)><!ELEMENT lastname (#PCDATA)><!ELEMENT year (#PCDATA)>

<!ELEMENT publisher (#PCDATA)>...

]> DTD

Page 22: 1 Teil I Datenmodelle Kapitel 7: Semistrukturierte Modelle.

22

DTD – Deklaration von Elementen Beschreibt die Einschränkungen

des Inhalts eines Elements Syntax:

<!ELEMENT Name (Definition)> Einziger atomarer Typ: #PCDATA

(Parsed Character DATA) (a,b,c): Liste von Unterelementen (a|b|c): Alternativen Kardinalitäten:

* keinmal oder beliebig oft

+ einmal oder beliebig oft

? kein- oder einmal (optional)

(ohne Angabe): genau einmal EMPTY: Erzwingen von leerem

Element

<!DOCTYPE bib [<!ELEMENT bib (paper*)><!ELEMENT paper (author+, year, publisher?)><!ATTLIST paper id ID #REQUIRED><!ELEMENT author (firstname*, lastname)><!ATTLIST author age CDATA #IMPLIED><!ELEMENT firstname (#PCDATA)><!ELEMENT lastname (#PCDATA)><!ELEMENT year (#PCDATA)>

<!ELEMENT publisher (#PCDATA)>...

]>

<!DOCTYPE bib [<!ELEMENT bib (paper*)><!ELEMENT paper (author+, year, publisher?)><!ATTLIST paper id ID #REQUIRED><!ELEMENT author (firstname*, lastname)><!ATTLIST author age CDATA #IMPLIED><!ELEMENT firstname (#PCDATA)><!ELEMENT lastname (#PCDATA)><!ELEMENT year (#PCDATA)>

<!ELEMENT publisher (#PCDATA)>...

]> DTD

Page 23: 1 Teil I Datenmodelle Kapitel 7: Semistrukturierte Modelle.

23

DTD – Deklaration von Elementen (2) Beschreibt die Einschränkungen

des Inhalts eines Elements Syntax:

<!ELEMENT Name (Definition)> Einziger atomarer Typ: #PCDATA

(Parsed Character DATA) (a,b,c): Liste von Unterelementen (a|b|c): Alternativen Kardinalitäten:

* keinmal oder beliebig oft

+ einmal oder beliebig oft

? kein- oder einmal (optional)

(ohne Angabe): genau einmal EMPTY : Erzwingen von leerem

Element

Einleitung undFestlegung des Wurzelelements bib

<!DOCTYPE bib [<!ELEMENT bib (paper*)><!ELEMENT paper (author+, year, publisher?)><!ATTLIST paper id ID #REQUIRED><!ELEMENT author (firstname*, lastname)><!ATTLIST author age CDATA #IMPLIED><!ELEMENT firstname (#PCDATA)><!ELEMENT lastname (#PCDATA)><!ELEMENT year (#PCDATA)>

<!ELEMENT publisher (#PCDATA)>...

]> DTD

Page 24: 1 Teil I Datenmodelle Kapitel 7: Semistrukturierte Modelle.

24

DTD – Deklaration von Elementen (3) Beschreibt die Einschränkungen

des Inhalts eines Elements Syntax:

<!ELEMENT Name (Definition)> Einziger atomarer Typ: #PCDATA

(Parsed Character DATA) (a,b,c): Liste von Unterelementen (a|b|c): Alternativen Kardinalitäten:

* keinmal oder beliebig oft

+ einmal oder beliebig oft

? kein- oder einmal (optional)

(ohne Angabe): genau einmal EMPTY : Erzwingen von leerem

Element

bib kann beliebig viele Elemente vomTyp paper enthalten

<!DOCTYPE bib [<!ELEMENT bib (paper*)><!ELEMENT paper (author+, year, publisher?)><!ATTLIST paper id ID #REQUIRED><!ELEMENT author (firstname*, lastname)><!ATTLIST author age CDATA #IMPLIED><!ELEMENT firstname (#PCDATA)><!ELEMENT lastname (#PCDATA)><!ELEMENT year (#PCDATA)>

<!ELEMENT publisher (#PCDATA)>...

]> DTD

Page 25: 1 Teil I Datenmodelle Kapitel 7: Semistrukturierte Modelle.

25

DTD – Deklaration von Elementen (4) Beschreibt die Einschränkungen

des Inhalts eines Elements Syntax:

<!ELEMENT Name (Definition)> Einziger atomarer Typ: #PCDATA

(Parsed Character DATA) (a,b,c): Liste von Unterelementen (a|b|c): Alternativen Kardinalitäten:

* keinmal oder beliebig oft

+ einmal oder beliebig oft

? kein- oder einmal (optional)

(ohne Angabe): genau einmal EMPTY : Erzwingen von leerem

Element

paper besteht ausmindestens einem authorgenau einem year undeinem optionalen publisher

in genau dieser Reihenfolge!

<!DOCTYPE bib [<!ELEMENT bib (paper*)><!ELEMENT paper (author+, year, publisher?)><!ATTLIST paper id ID #REQUIRED><!ELEMENT author (firstname*, lastname)><!ATTLIST author age CDATA #IMPLIED><!ELEMENT firstname (#PCDATA)><!ELEMENT lastname (#PCDATA)><!ELEMENT year (#PCDATA)>

<!ELEMENT publisher (#PCDATA)>...

]> DTD

Page 26: 1 Teil I Datenmodelle Kapitel 7: Semistrukturierte Modelle.

26

DTD – Deklaration von Elementen (5) Beschreibt die Einschränkungen

des Inhalts eines Elements Syntax:

<!ELEMENT Name (Definition)> Einziger atomarer Typ: #PCDATA

(Parsed Character DATA) (a,b,c): Liste von Unterelementen (a|b|c): Alternativen Kardinalitäten:

* keinmal oder beliebig oft

+ einmal oder beliebig oft

? kein- oder einmal (optional)

(ohne Angabe): genau einmal EMPTY : Erzwingen von leerem

Element

firstname ist vom Typ Zeichenkette

<!DOCTYPE bib [<!ELEMENT bib (paper*)><!ELEMENT paper (author+, year, publisher?)><!ATTLIST paper id ID #REQUIRED><!ELEMENT author (firstname*, lastname)><!ATTLIST author age CDATA #IMPLIED><!ELEMENT firstname (#PCDATA)><!ELEMENT lastname (#PCDATA)><!ELEMENT year (#PCDATA)>

<!ELEMENT publisher (#PCDATA)>...

]> DTD

Page 27: 1 Teil I Datenmodelle Kapitel 7: Semistrukturierte Modelle.

27

DTD – Deklaration von Attributen Name-Zeichenkettenwert-Paar Assoziiert mit einem Element Syntax:

<!ATTLIST Element Attributname1 Typ1 Zusatz1 Attributname2 …>

Typ: CDATA Zeichenkette ID OID IDREF Referenz IDREFS Menge von

Referenzen Zusatz:

REQUIREDzwingend IMPLIED optional (Initialwert)

<!DOCTYPE bib [<!ELEMENT bib (paper*)><!ELEMENT paper (author+, year, publisher?)><!ATTLIST paper id ID #REQUIRED><!ELEMENT author (firstname*, lastname)><!ATTLIST author age CDATA #IMPLIED><!ELEMENT firstname (#PCDATA)><!ELEMENT lastname (#PCDATA)><!ELEMENT year (#PCDATA)>

<!ELEMENT publisher (#PCDATA)>...

]> DTD

Page 28: 1 Teil I Datenmodelle Kapitel 7: Semistrukturierte Modelle.

28

DTD – Deklaration von Attributen (2) Name-Zeichenkettenwert-Paar Assoziiert mit einem Element Syntax:

<!ATTLIST Element Attributname1 Typ1 Zusatz1 Attributname2 …>

Typ: CDATA Zeichenkette ID OID IDREF Referenz IDREFS Menge von

Referenzen Zusatz:

REQUIREDzwingend IMPLIED optional (Initialwert)

<!DOCTYPE bib [<!ELEMENT bib (paper*)><!ELEMENT paper (author+, year, publisher?)><!ATTLIST paper id ID #REQUIRED><!ELEMENT author (firstname*, lastname)><!ATTLIST author age CDATA #IMPLIED><!ELEMENT firstname (#PCDATA)><!ELEMENT lastname (#PCDATA)><!ELEMENT year (#PCDATA)>

<!ELEMENT publisher (#PCDATA)>...

]> DTD

paper besitzt ein Attribut id, eineOID, die zwingend mit einemeindeutigen Wert belegt werdenmuss

Page 29: 1 Teil I Datenmodelle Kapitel 7: Semistrukturierte Modelle.

29

DTD – Deklaration von Attributen (3) Name-Zeichenkettenwert-Paar Assoziiert mit einem Element Syntax:

<!ATTLIST Element Attributname1 Typ1 Zusatz1 Attributname2 …>

Typ: CDATA Zeichenkette ID OID IDREF Referenzen IDREFS Menge von

Referenzen Zusatz:

REQUIREDzwingend IMPLIED optional (Initialwert)

<!DOCTYPE bib [<!ELEMENT bib (paper*)><!ELEMENT paper (author+, year, publisher?)><!ATTLIST paper id ID #REQUIRED><!ELEMENT author (firstname*, lastname)><!ATTLIST author age CDATA #IMPLIED><!ELEMENT firstname (#PCDATA)><!ELEMENT lastname (#PCDATA)><!ELEMENT year (#PCDATA)>

<!ELEMENT publisher (#PCDATA)>...

]> DTD

Ein author hat ein Attribut age, mitdem ihm eine Zeichenkette mit demWert für sein Alter zugewiesenwerden kann (aber nicht muss!)

Page 30: 1 Teil I Datenmodelle Kapitel 7: Semistrukturierte Modelle.

30

DTD – OIDs und Referenzen DTDs erlauben die Deklaration von OIDs, Referenzen und

Referenzmengen als Attribute Beispiel:

<family><person id=“jane” mother=“mary” father=“john”>

<name> Jane Doe </name></person> <person id=“john” children=“jane jack”>

<name> John Doe </name> </person>

<person id=“mary” children=“jane jack”><name> Mary Smith </name>

</person><person id=“jack” mother=“mary” father=“john”>

<name> Jack Smith </name></person>

</family>

<family><person id=“jane” mother=“mary” father=“john”>

<name> Jane Doe </name></person> <person id=“john” children=“jane jack”>

<name> John Doe </name> </person>

<person id=“mary” children=“jane jack”><name> Mary Smith </name>

</person><person id=“jack” mother=“mary” father=“john”>

<name> Jack Smith </name></person>

</family> XML

<!DOCTYPE family [<!ELEMENT family (person*)><!ELEMENT person (name)><!ELEMENT name (#PCDATA)><!ATTLIST person

id ID #REQUIREDmother IDREF #IMPLIEDfather IDREF #IMPLIEDchildren IDREFS #IMPLIED>

]>

<!DOCTYPE family [<!ELEMENT family (person*)><!ELEMENT person (name)><!ELEMENT name (#PCDATA)><!ATTLIST person

id ID #REQUIREDmother IDREF #IMPLIEDfather IDREF #IMPLIEDchildren IDREFS #IMPLIED>

]>DTD

Page 31: 1 Teil I Datenmodelle Kapitel 7: Semistrukturierte Modelle.

31

Bewertung von DTDs

DTDs definieren kontextfreie Grammatiken

Rekursive Definitionen sind möglich

<!DOCTYPE paper [<!ELEMENT paper (section*)><!ELEMENT section ((title, section*)|text)><!ELEMENT title (#PCDATA)><!ELEMENT text (#PCDATA)>

]>

<!DOCTYPE paper [<!ELEMENT paper (section*)><!ELEMENT section ((title, section*)|text)><!ELEMENT title (#PCDATA)><!ELEMENT text (#PCDATA)>

]> DTD

DTDs weisen bei der Definition eines Schemas jedoch einige Schwächen auf: Ungewollte Festlegung der Reihenfolge:

<!ELEMENT person ( name, phone ) > Workaround: <!ELEMENT person ( (name, phone ) | ( phone, name ) ) >

Kann teilweise zu vage werden: <!ELEMENT person ( ( name | phone | email )* ) >

Referenzen können nicht eingeschränkt (typisiert) werden Alle Elementnamen sind global in einem Namensraum

Page 32: 1 Teil I Datenmodelle Kapitel 7: Semistrukturierte Modelle.

32

DTDXML-Schema

XML-Schemata II: XML-Schema Echter Schemamechanismus mit vielen Erweiterungen über

DTDs hinaus Benutzt selbst wieder XML-Syntax zur Schemadefinition

<schema> <element name=“bib”> <complexType> <element name=“paper” minOccurs=“0” maxOccurs=“unbounded”> <complexType> <attribute name=“id” type=“ID” use=“required”/> <sequence> <element name=“author” type=“authorType” maxOccurs=“unbounded”/> <element name=“year” type=“string”/> <element name=“publisher” type=“string” minOccurs=“0”/> </sequence> </complexType> </element> </complexType> </element></schema>

<!DOCTYPE bib [<!ELEMENT bib (paper*)><!ELEMENT paper (author+, year, publisher?)><!ATTLIST paper id ID #REQUIRED><!ELEMENT author (firstname*, lastname)><!ATTLIST author age CDATA #IMPLIED><!ELEMENT firstname (#PCDATA)><!ELEMENT lastname (#PCDATA)><!ELEMENT year (#PCDATA)>

<!ELEMENT publisher (#PCDATA)>...

]>

Page 33: 1 Teil I Datenmodelle Kapitel 7: Semistrukturierte Modelle.

33

XML-Schema: Elemente Syntax:

<element name=“Name“/>

Optionale Zusatzattribute: Typ

type = “Typ“ atomarer/einfacher/komplexer Typname Kardinalitäten (Voreinstellung: [1,1]):

minOccurs = “x“x { 0, 1, n } maxOccurs = “y“ y { 1, n, unbounded }

Wertvoreinstellungen (schließen sich gegenseitig aus!): default = “v“ veränderliche Vorgabe fixed = “u“ unveränderliche Vorgabe

Page 34: 1 Teil I Datenmodelle Kapitel 7: Semistrukturierte Modelle.

34

XML-Schema: Attribute Syntax:

<attribute name=“Name“/>

Optionale Zusatzattribute: Typ:

type = “Typ“ Existenz:

use = “optional“ Kardinalität [0,1] use = “required“ Kardinalität [1,1]

Voreinstellwerte: use = “default“ value = “v“ veränderliche Vorgabe use = “fixed“ value = “u“ unveränderliche Vorgabe

Page 35: 1 Teil I Datenmodelle Kapitel 7: Semistrukturierte Modelle.

35

XML-Schemata: Beispiele

XML-Schema

<schema> <element name=“bib”> <complexType> <element name=“paper” minOccurs=“0” maxOccurs=“unbounded”> <complexType> <attribute name=“id” type=“ID” use=“required”/> <sequence> <element name=“author” type=“authorType” maxOccurs=“unbounded”/> <element name=“year” type=“string”/> <element name=“publisher” type=“string” minOccurs=“0”/> </sequence> </complexType> </element> </complexType> </element></schema>

<bib><paper id=“o12”>

<title> Foundations of Databases </title><author>

<firstname> Serge </firstname><lastname> Abiteboul </lastname>

</author> <year> 1997 </year><publisher> Addison Wesley </publisher>

</paper>...

</bib>

Weitere Beispiele<attribute name=“age” type=“string” use=“optional”/>

<attribute name=“language” type=“string” use=“default” value=“de”/>

Beispiel für Elemente

Beispiel für Attribute

Page 36: 1 Teil I Datenmodelle Kapitel 7: Semistrukturierte Modelle.

36

XML-Schema: Typen In XML-Schema wird zwischen atomaren, einfachen und

komplexen Typen unterschieden Atomare Typen:

Eingebaute Elementartypen wie int oder string Einfache Typen:

Haben weder eingebettete Elemente noch Attribute In der Regel von atomaren Typen abgeleitet

Komplexe Typen: Dürfen Elemente und Attribute besitzen

Zusätzlich kann man noch folgende Unterscheidung treffen: Benannte Typdefinitionen beschreiben wiederverwendbare

Typstruktur Unbenannte Typdefinitionen legen nur für Dokumente des

Schemas fest, welche Elemente wie im Dokument auftauchen dürfen

Page 37: 1 Teil I Datenmodelle Kapitel 7: Semistrukturierte Modelle.

37

XML-Schema: Atomare Typen XML-Schema unterstützt eine große Menge eingebauter

Basistypen (>40): Numerisch: byte, short, int, long, float, double, decimal, binary,

… Zeitangaben: time, date, month, year, timeDuration,

timePeriod, … Sonstige: string, boolean, uriReference, ID, …

Beispiele:<element name=“year“ type=“year“/><element name=“pages“ type=“positiveInteger“/><attribute name=“age“ type=“unsignedShort“/>

Page 38: 1 Teil I Datenmodelle Kapitel 7: Semistrukturierte Modelle.

38

XML-Schema: Einfache Typen Zusätzlich können von bestehenden Typen noch weitere,

sog. einfache Typen, abgeleitet werden: Typdefinition:

<simpleType name=“humanAge“ base=“unsignedShort“><maxInclusive value=“200“/> </simpleType>

Verwendung in der Dokumentdefinition:<attribute name=“age“ type=“humanAge“/>

In ähnlicher Weise können Listen definiert werden: Typdefinition:

<simpleType name=“authorType“ base=“string“derivedBy=“list“/>

(Name eines Autors als mit Leerzeichen getrennte Liste von Zeichenketten) Verwendung in der Dokumentdefiniton:

<element name=“author“ type=“authorType“/>

Page 39: 1 Teil I Datenmodelle Kapitel 7: Semistrukturierte Modelle.

39

XML-Schema: Komplexe Typen Komplexe Typen dürfen im Gegensatz zu einfachen Typen

eingebettete Elemente besitzen Beispiel:

Typdefinition:<complexType name=“authorType“>

<sequence><element name=“firstname“ type=“string“ minOccurs=“0“

maxOccurs=“unbounded“/><element name=“lastname“ type=“string“/>

</sequence><attribute name=“age” type=“string” use=“optional”/>

</complexType>

Gruppierungs-Bezeichner: <sequence> … </sequence> Feste Reihenfolge (a,b) <all> … </all> Beliebige Reihenfolge (a,b oder

b,a) <choice> … </choice> Auswahl (entweder a oder b)

Page 40: 1 Teil I Datenmodelle Kapitel 7: Semistrukturierte Modelle.

40

Typhierarchien (1)

Hierarchische Abhängigkeit zwischen zwei Typen durch Erweiterung (engl. extension) oder Restriktion (engl. restriction) einer bestehenden Typdefinition

Alle Typen bilden eine Typhierarchie Baum mit Wurzel: Typ Zeichenkette Keine Mehrfachvererbung

Typen sind entlang der Typhierarchie abwärtskompatibel: Für Typinstanzen gilt das Substituierbarkeitsprinzip Elemente eines bestimmten Typs akzeptieren auch Daten

einer Erweiterung oder Restriktion dieses Typs

Page 41: 1 Teil I Datenmodelle Kapitel 7: Semistrukturierte Modelle.

41

Typhierarchien (2)

Erweiterung Strukturergänzung:

Hinzufügen weiterer Elemente oder Attribute

Restriktion Struktur bleibt gleich: es

dürfen keine Elemente oder Attribute weggelassen werden

Verschärfung von Angaben, z.B. bisher nicht angebene type-,

default- oder fixed-Attribute Einschränkung der

Kardinalitäten minOccurs, maxOccurs

Page 42: 1 Teil I Datenmodelle Kapitel 7: Semistrukturierte Modelle.

42

Typhierarchien: Erweiterung von Typen (1) Beispiel:

<complexType name=“extendedAuthorType“><extension base=“authorType“>

<sequence><element name=“email“ type=“string“ minOccurs=“0“

maxOccurs=“1“/></sequence><attribute name=“homepage” type=“string”

use=“optional”/></extension>

</complexType> Erweitert den zuvor definierten Typ authorType um

ein optionales Element email ein optionales Attribut homepage

Page 43: 1 Teil I Datenmodelle Kapitel 7: Semistrukturierte Modelle.

43

Typhierarchien: Erweiterung von Typen (2) Die Erweiterungen werden bei der Verarbeitung an die

bestehenden Definitionen angehängt:<complexType name=“extendedAuthorType“>

<sequence><element name=“firstname“ type=“string“ minOccurs=“0“

maxOccurs=“unbounded“/><element name=“lastname“ type=“string“/><element name=“email“ type=“string“ minOccurs=“0“

maxOccurs=“1“/> </sequence><attribute name=“age” type=“string” use=“optional”/><attribute name=“homepage” type=“string” use=“optional”/>

</complexType> <complexType name=“authorType“><sequence>

<element name=“firstname“ type=“string“ minOccurs=“0“maxOccurs=“unbounded“/>

<element name=“lastname“ type=“string“/></sequence><attribute name=“age” type=“string” use=“optional”/>

</complexType>

Page 44: 1 Teil I Datenmodelle Kapitel 7: Semistrukturierte Modelle.

44

Typhierarchien: Restriktion von Typen Beispiel (Komplexer Typ):

<complexType name=“restrictedAuthorType“><restriction base=“authorType“>

<sequence><element name=“firstname“ type=“string“ minOccurs=“0“

maxOccurs=“2“/><element name=“lastname“ type=“string“/>

</sequence><attribute name=“age” type=“string” use=“required”/>

</restriction> </complexType>

Vorher: maxOccurs=“unbounded“Vorher: maxOccurs=“unbounded“

Vorher: use=“optional“Vorher: use=“optional“

<complexType name=“authorType“><sequence>

<element name=“firstname“ type=“string“ minOccurs=“0“maxOccurs=“unbounded“/>

<element name=“lastname“ type=“string“/></sequence><attribute name=“age” type=“string” use=“optional”/>

</complexType>

Page 45: 1 Teil I Datenmodelle Kapitel 7: Semistrukturierte Modelle.

45

Polymorphe Konsistenzbedingungen (1) Elemente und Attribute können zusätzlich mit

Konsistenzbedingungen belegt werden Eindeutigkeit (Schlüsselkandidat):

<unique name=“eindeutigerAutorenName“><field xpath=“bib/paper/author/firstname“/><field xpath=“bib/paper/author/lastname“/>

</unique>Die Kombinationen von Vor- und Nachnamen bei den Autoren sind immer eindeutig Mittels field werden die entsprechenden Elemente oder

Attribute identifiziert Mittels xpath (siehe später!) wird der genaue Pfadausdruck

angegeben, unter dem das entsprechende field innerhalb der Dokumenthierarchie gefunden werden kann

Page 46: 1 Teil I Datenmodelle Kapitel 7: Semistrukturierte Modelle.

46

Polymorphe Konsistenzbedingungen (2) Schlüsselbedingung:

<key name=“papierSchlüssel“><field xpath=“bib/paper/@id“/>

</key>Das Attribut id in paper dient als Schlüssel. Schlüssel sind eindeutig und können referenziert werden.

Fremdschlüsselbedingung:<keyref name=“papierFremdschlüssel“ refer=“papierSchlüssel“>

<field xpath=“bib/paper/@references“/></keyref>Ergänzend zum bisherigen Schema: references ist eine Liste von Papieren, die vom Papier aus referenziert werden, d.h. in dessen Literaturverzeichnis auftauchen. Beachte: Mit refer bezieht man sich auf das name-Attribut

einer Schlüsselbedingung, nicht auf das Schlüsselfeld! Die Werte in references müssen also immer unter den

Schlüsseln zu den Papieren zu finden sein.

Page 47: 1 Teil I Datenmodelle Kapitel 7: Semistrukturierte Modelle.

47

Beispiel-Schema<!-- XMLSchema für eine Literaturdatenbank --><schema>

<!-- Globales Wurzelelement bib --><element name="bib">

<complexType><element name="paper" minOccurs="0" maxOccurs="unbounded">

<complexType><attribute name="id" type="ID" use="required"/><sequence>

<element name="author" type="authorType" maxOccurs="unbounded"/><element name="year" type="string"/><element name="publisher" type="string" minOccurs="0"/><element name="references" type="listOfPapers" minOccurs="0"/>

</sequence></complexType>

</element></complexType>

</element>

<!-- XMLSchema für eine Literaturdatenbank --><schema>

<!-- Globales Wurzelelement bib --><element name="bib">

<complexType><element name="paper" minOccurs="0" maxOccurs="unbounded">

<complexType><attribute name="id" type="ID" use="required"/><sequence>

<element name="author" type="authorType" maxOccurs="unbounded"/><element name="year" type="string"/><element name="publisher" type="string" minOccurs="0"/><element name="references" type="listOfPapers" minOccurs="0"/>

</sequence></complexType>

</element></complexType>

</element>

Page 48: 1 Teil I Datenmodelle Kapitel 7: Semistrukturierte Modelle.

48

Beispiel-Schema (2)<!-- Reine Typdefinitionen --><simpleType name="listOfPapers" base="ID" derivedBy="list"/>

<complexType name="authorType"><sequence>

<element name="firstname" type="string" minOccurs="0" maxOccurs="unbounded"/><element name="lastname" type="string"/>

</sequence><attribute name="age" type="humanAge" use="optional"/>

</complexType>

<complexType name="extendedAuthorType"><extension base="authorType">

<sequence><element name="email" type="string" minOccurs="0" maxOccurs="1"/>

</sequence><attribute name="homepage" type="simpleURLType" use="optional"/>

</extension></complexType>

<!-- Reine Typdefinitionen --><simpleType name="listOfPapers" base="ID" derivedBy="list"/>

<complexType name="authorType"><sequence>

<element name="firstname" type="string" minOccurs="0" maxOccurs="unbounded"/><element name="lastname" type="string"/>

</sequence><attribute name="age" type="humanAge" use="optional"/>

</complexType>

<complexType name="extendedAuthorType"><extension base="authorType">

<sequence><element name="email" type="string" minOccurs="0" maxOccurs="1"/>

</sequence><attribute name="homepage" type="simpleURLType" use="optional"/>

</extension></complexType>

Page 49: 1 Teil I Datenmodelle Kapitel 7: Semistrukturierte Modelle.

49

Beispiel-Schema (3)

<simpleType name="humanAge" base="unsignedShort"><maxInclusive value="200"/> </simpleType>

<simpleType name="simpleURLType" base="string"><pattern value="http://([^/?#]*)?([^?#]*)(\?([^#]*))?(#(.*))?"/> </simpleType>

<simpleType name="humanAge" base="unsignedShort"><maxInclusive value="200"/> </simpleType>

<simpleType name="simpleURLType" base="string"><pattern value="http://([^/?#]*)?([^?#]*)(\?([^#]*))?(#(.*))?"/> </simpleType>

Page 50: 1 Teil I Datenmodelle Kapitel 7: Semistrukturierte Modelle.

50

Beispiel-Schema (4)<!-- Konsistenzbedingungen -->

<unique name="eindeutigerAutorenName"><field xpath="bib/paper/author/firstname"/><field xpath="bib/paper/author/lastname"/>

</unique>

<key name="papierSchlüssel"><field xpath="bib/paper/@id"/>

</key>

<keyref name="papierFremdschlüssel" refer="papierSchlüssel"><field xpath="bib/paper/@references"/>

</keyref>

</schema>

<!-- Konsistenzbedingungen -->

<unique name="eindeutigerAutorenName"><field xpath="bib/paper/author/firstname"/><field xpath="bib/paper/author/lastname"/>

</unique>

<key name="papierSchlüssel"><field xpath="bib/paper/@id"/>

</key>

<keyref name="papierFremdschlüssel" refer="papierSchlüssel"><field xpath="bib/paper/@references"/>

</keyref>

</schema>

Page 51: 1 Teil I Datenmodelle Kapitel 7: Semistrukturierte Modelle.

51

Bewertung von XML-Schema Syntax und Ausdruckskraft von XML-Schema sind sehr

umfangreich: Mit XML-Schema können Datenbasis-Schemata natürlicher

als mit DTDs spezifiziert werden. Es kann viel mehr Semantik in einem Schema eingefangen

werden als mit DTDs. Einzige Schwäche: wenig Vielfalt bei Konsistenzbedingungen.

XML-Schema wird jedoch noch nicht weitläufig unterstützt, während DTDs bereits zum Kernstandard von XML gehören.

Mehr zu XML-Schema im Web: http://www.w3.org/TR/xmlschema-0/ Einführung http://www.w3.org/TR/xmlschema-1/ Teil I: Strukturen http://www.w3.org/TR/xmlschema-2/ Teil II: Datentypen

Page 52: 1 Teil I Datenmodelle Kapitel 7: Semistrukturierte Modelle.

52

Kapitel 7.3: Anfragesprachen

Page 53: 1 Teil I Datenmodelle Kapitel 7: Semistrukturierte Modelle.

53

Polymorphe Operatoren in XML Xpath (2.0)

Hierarchischer Adressierungs- und Navigationsformalismus für XML-Dokumente

Deskriptive Pfadausdrücke im XML-Dokumentbaum Erlaubt einfache bis mittelkomplexe Anfragen In abgespeckter Form auch in anderen XML-Standards (vgl.

key in XML-Schema) XQuery (1.0)

Freie deskriptive Anfragen über XML-Dokumente Vorbild: SQL und OQL Baut auf XPath zur Adressierung/Navigation auf

Beides sind offene W3C-Standards und erfreuen sich reger Nutzung

Beide Standards sind aufeinander abgestimmt

Page 54: 1 Teil I Datenmodelle Kapitel 7: Semistrukturierte Modelle.

54

XPath: Pfadausdrücke (1) Pfadausdruck ist eine Folge

von Schritten. Ausgangspunkt ist ein

Kontextknoten. Schritte definieren Pfad(e)

durch XML-Dokumentbaum: In jedem Schritt werden

Folgeknoten ausgewählt, die einen Teilbaum aufspannen.

Endergebnis (= Pfadenden) ist eine Folge von Knoten oder einfachen Werten

Page 55: 1 Teil I Datenmodelle Kapitel 7: Semistrukturierte Modelle.

55

XPath: Pfadausdrücke (2) Grobstruktur eines Xpath-Pfadausdrucks:

/ Schritt_1 / Schritt_2 / ... / Schritt_n Jeder Schritt ist von der Bauart:

Achse:: Knotentest [Auswahlbedingung] Ausgehend vom Kontextknoten wird also in jedem Schritt

die Achse festgelegt, nach der wir von diesem Knoten aus weiter navigieren (z.B. zu einem Kind- oder Elternelement),

ein Knotentest vereinbart, der den Knotentyp einschränkt (z.B. Elemente eines bestimmten Namens), und

optional eine Auswahlbedingung angegeben, die die Auswahl an Knoten weiter einschränkt.

Die Ergebnisknoten bilden dann den Kontext für nächsten Schritt.

Page 56: 1 Teil I Datenmodelle Kapitel 7: Semistrukturierte Modelle.

56

Xpath: Achsen (1)

Kontextknoten

syntaktisch wie Kinder behandelt

Page 57: 1 Teil I Datenmodelle Kapitel 7: Semistrukturierte Modelle.

57

Xpath: Achsen (2)

Ausgangspunkt: der über Pfad erreichte Kontextknoten

Page 58: 1 Teil I Datenmodelle Kapitel 7: Semistrukturierte Modelle.

58

Xpath: Achsen (3)

Achse = Kontextknoten selbst: Pfad/self :: ...

Page 59: 1 Teil I Datenmodelle Kapitel 7: Semistrukturierte Modelle.

59

Xpath: Achsen (4)

Alle Attribute des Kontextknotens: Pfad/attribute :: ...

Page 60: 1 Teil I Datenmodelle Kapitel 7: Semistrukturierte Modelle.

60

Xpath: Achsen (5)

Alle Kindknoten: Pfad/child :: ...

Page 61: 1 Teil I Datenmodelle Kapitel 7: Semistrukturierte Modelle.

61

Xpath: Achsen (6)

Alle Nachfahren: Pfad/descendant :: ...

Weitere Achse: descendant-or-self = descendant ∪ self

Page 62: 1 Teil I Datenmodelle Kapitel 7: Semistrukturierte Modelle.

62

Xpath: Achsen (7)

Der Elternknoten: Pfad/parent :: ...

Page 63: 1 Teil I Datenmodelle Kapitel 7: Semistrukturierte Modelle.

63

Xpath: Achsen (8)

Alle Vorfahren: Pfad/ancestor :: ...

Page 64: 1 Teil I Datenmodelle Kapitel 7: Semistrukturierte Modelle.

64

Xpath: Achsen (9)

Alle nachfolgenden Geschwisterknoten: Pfad/following-sibling :: ...

Page 65: 1 Teil I Datenmodelle Kapitel 7: Semistrukturierte Modelle.

65

Xpath: Achsen (10)

Alle vorangehenden Geschwisterknoten: Pfad/preceding-sibling :: ...

Page 66: 1 Teil I Datenmodelle Kapitel 7: Semistrukturierte Modelle.

66

Xpath: Achsen (11)

Alle nachfolgenden Knoten: Pfad/following :: ...

Page 67: 1 Teil I Datenmodelle Kapitel 7: Semistrukturierte Modelle.

67

Xpath: Achsen (12)

Alle vorangehenden Knoten: Pfad/preceding :: ...

Page 68: 1 Teil I Datenmodelle Kapitel 7: Semistrukturierte Modelle.

68

XPath: Knotentests

Ausgangspunkt: Durch die Achse bestimmte Knotenmenge

außer Text!

Page 69: 1 Teil I Datenmodelle Kapitel 7: Semistrukturierte Modelle.

69

Abkürzungen

descendant-or-self::node()

Alle Kinder, die Elemente sindchild::node()

Alle Nachfolgeelemente und der Knoten selbstAm Anfang eines Pfades: Alle Elemente samt Wurzelknoten /

= parent::*

Fehlt node() oder @attribute, wird text() unterstellt

Page 70: 1 Teil I Datenmodelle Kapitel 7: Semistrukturierte Modelle.

70

XPath: Auswahlbedingungen Erlaubt komplexere Einschränkungen Liefert nur Unterknoten, für die Auswahlbedingung wahr ist Mögliche Ausdrücke

Pfadausdruck e (e = true, wenn e nicht-leere Ergebnismenge adressiert)

e1 op e2 mit op z.B. =, !=, <, >, <=, >= f(e1), z.B:

position(): Aktuelle Position in der Liste von Unterelementen( [n] ist Kurzform für [position() = n] )

last(): Anzahl aller Unterknoten des aktuellen Knotens count(Pfadausdruck): Anzahl der Unterknoten, für die der

Pfadausdruck wahr ist id(Pfadausdruck): Liefert alle Elemente, deren id-Attribute einem

der Ergebniswerte des Pfadausdrucks entsprechen. So ist eine Dereferenzierung von IDREF-ID-Paaren möglich.

Page 71: 1 Teil I Datenmodelle Kapitel 7: Semistrukturierte Modelle.

71

XPath: Beispiele (1)

bib

id=&o29paperid=&o24bookid=&o12paper

Founda-tions of Data-bases

title age=51author 1997year

Sergefirstname Abiteboullastname

age=40author pages

Victorfirstname Vianulastname 122first 133last

Nachname des Autors des zweiten Papiers:/ child:: bib / child:: paper [position()=2] / child:: author / child:: lastnameoder kurz: / bib / paper [2] / author / lastname

Page 72: 1 Teil I Datenmodelle Kapitel 7: Semistrukturierte Modelle.

72

XPath: Beispiele (2) Knotentest schränkt Auswahl unterhalb eines Knotens

weiter ein Nachnamen aller Autoren von Papieren

/ bib / paper / author / lastname Nachnamen aller Autoren

/ bib / * / author / lastname

Impliziert: / bib / paper / author / lastname / text() Alle Unterelemente von author ohne etwaig eingefügte

Zusatztexte zum Autor / bib / paper / author / node()

bib

paperbookpaper

title author 1997year

Sergefirstname Abiteboullastname

author pages

Victorfirstname Vianulastname 122first 133last

Page 73: 1 Teil I Datenmodelle Kapitel 7: Semistrukturierte Modelle.

73

XPath: Beispiele (3) Autor des Papiers mit Titel „Foundations of Databases“

paper [title = „Foundations of Databases“] / author Autoren-Nachname des Papiers mit id „o12“

paper [@id = „o12“] / author / lastname Alle Papiere und Bücher, die später als 1995 erschienen sind

/ bib / * [year > 1995] Alle Papiere mit mehr als einem Autor

paper [count(author) > 1] Das zweite Papier in unserer Bibliographie

/ bib / paper [position() = 2] oder / bib / paper [2] Alle Autoren

/ bib // author Alle Koautoren von „Serge Abiteboul“

/bib//author[lastname=„Abiteboul“]/parent::node()/author[lastname<>„Abiteboul“]

bib

paperbookpaper

title author 1997year

Sergefirstname Abiteboullastname

author pages

Victorfirstname Vianulastname 122first 133last

Page 74: 1 Teil I Datenmodelle Kapitel 7: Semistrukturierte Modelle.

74

XQuery Aktuell: Version 1.0 Baut auf XPath 2.0 auf Anfragen in Anlehnung an SQL/OQL:

Folge von Klauseln: spezifiziert deskriptiv, wie Endergebnis der Anfrage aussehen soll

XQuery-Implementierung kann Weg, wie man zum Endergebnis gelangt, selbst bestimmen (Optimierung)

Benutzerdefinierte Funktionen Erweitern der Anfrageklauseln zur Turing-vollständigen

Programmiersprache Ermöglichen von rekursiven Anfragen

Zwei mögliche Repräsentationen Leicht lesbare: FLWR-Ausdrücke (im Folgenden vorgestellt) XML-konforme Syntax: XQueryX

Page 75: 1 Teil I Datenmodelle Kapitel 7: Semistrukturierte Modelle.

75

XQuery: FLWR-Ausdrücke (1)

Sukzessives Binden jeweils einer Variablen an das Ergebnis eines Pfadausdrucks

Einmaliges Binden jeweils einer Variablen an das Ergebnis eines Pfadausdrucks (ggf. Menge).

Bedingungen an die gebundenen Variablen (Selektion).

An die Variablen gebundene Werte, die die Bedingung erfüllen, eingebettet in die gewünschte Form eines XML-Dokuments.

Grundmuster FLWR (gesprochen „flower“)

for Bindungsliste

let Bindungsliste

where Bedingung

return Ergebnis

Page 76: 1 Teil I Datenmodelle Kapitel 7: Semistrukturierte Modelle.

76

XQuery: FLWR-Audrücke (2) Syntax im Detail:

for var1 in ausdruck1, ..., varn in ausdruckn

let varn+1 := ausdruckn+1, ..., varn+m := ausdruckn+m

where bedingungs-ausdruck

order by ausdruck ascending/descending

return xml-ausdruck Sonderfälle:

for/let kann mehrfach auftreten Variablenbindungen können dann aufeinander aufbauen

for kann entfallen let kann entfallen where kann entfallen order by kann entfallen Geschachtelte Anfragen: überall wo Ausdruck erwartet wird

Page 77: 1 Teil I Datenmodelle Kapitel 7: Semistrukturierte Modelle.

77

bib

bookbookbook

Data on the Web

title author author

Serge

firstname

Abiteboul

lastname

Peter

firstname

Bunemann

lastname

XQuery: Beispiel (1)

author publisher

MorganKaufmann

name

...<Buch titel=„Data on the Web“ /><Buch titel=„Transaction Processing“ /><Buch titel=„Active Database Systems“ /><Buch titel=„SQL 1999“ /><Buch titel=„Practical Digital Libraries“ /><Buch titel=„Readings in Object Oriented Database Systems“ />...

...<Buch titel=„Data on the Web“ /><Buch titel=„Transaction Processing“ /><Buch titel=„Active Database Systems“ /><Buch titel=„SQL 1999“ /><Buch titel=„Practical Digital Libraries“ /><Buch titel=„Readings in Object Oriented Database Systems“ />...

Ergebnis

„Alle Bücher, die im Morgan-Kaufmann-Verlag veröffentlicht wurden.“„Alle Bücher, die im Morgan-Kaufmann-Verlag veröffentlicht wurden.“

for $b in /bib/bookwhere $b/publisher/name = „Morgan Kaufmann“return <Buch titel=„{$b/title}“ />

for $b in /bib/bookwhere $b/publisher/name = „Morgan Kaufmann“return <Buch titel=„{$b/title}“ />

Page 78: 1 Teil I Datenmodelle Kapitel 7: Semistrukturierte Modelle.

78

bib

bookbookbook

Data on the Web

title author author

Serge

firstname

Abiteboul

lastname

Peter

firstname

Bunemann

lastname

XQuery: Beispiel (2)

author publisher

Morgan-Kaufmann

name

...<Buch titel=„Data on the Web“>

<Autoren>Abiteboul Buneman Suciu</Autoren></Buch><Buch titel=„Transaction Processing“>

<Autoren>Gray Reuter</Autoren></Buch>...

...<Buch titel=„Data on the Web“>

<Autoren>Abiteboul Buneman Suciu</Autoren></Buch><Buch titel=„Transaction Processing“>

<Autoren>Gray Reuter</Autoren></Buch>...

Ergebnis

„Alle Bücher, die im Morgan-Kaufmann-Verlag veröffentlicht wurden, inklusive ihrer Autoren.“„Alle Bücher, die im Morgan-Kaufmann-Verlag veröffentlicht wurden, inklusive ihrer Autoren.“

for $b in /bib/booklet $a := $b/authorwhere $b/publisher/name = „Morgan Kaufmann“return <Buch titel=„{$b/title}“>

<Autoren>{$a/lastname}</Autoren></Buch>

for $b in /bib/booklet $a := $b/authorwhere $b/publisher/name = „Morgan Kaufmann“return <Buch titel=„{$b/title}“>

<Autoren>{$a/lastname}</Autoren></Buch>

Page 79: 1 Teil I Datenmodelle Kapitel 7: Semistrukturierte Modelle.

79

bib

bookbookbook

Data on the Web

title author author

Serge

firstname

Abiteboul

lastname

Peter

firstname

Bunemann

lastname

XQuery: Beispiel (3a)

author publisher

Morgan-Kaufmann

name

...<Paar>

<Autor>Buneman</Autor><Buch>Data on the Web</Buch>

</Paar><Paar>

<Autor>Abiteboul</Autor><Buch>Data on the Web</Buch>

</Paar>...

...<Paar>

<Autor>Buneman</Autor><Buch>Data on the Web</Buch>

</Paar><Paar>

<Autor>Abiteboul</Autor><Buch>Data on the Web</Buch>

</Paar>...

Ergebnis

„Alle Autoren-Bücher-Paare aus dem Morgan-Kaufmann-Verlag.“ (Join!)„Alle Autoren-Bücher-Paare aus dem Morgan-Kaufmann-Verlag.“ (Join!)

for $b in /bib/book, $a in /bib//authorwhere $b/publisher/name = „Morgan Kaufmann“ and $b/author = $areturn <Paar>

<Autor>{$a/lastname}</Autor><Buch>{$b/title}</Buch>

</Paar>

for $b in /bib/book, $a in /bib//authorwhere $b/publisher/name = „Morgan Kaufmann“ and $b/author = $areturn <Paar>

<Autor>{$a/lastname}</Autor><Buch>{$b/title}</Buch>

</Paar>

Einfacher Join

Page 80: 1 Teil I Datenmodelle Kapitel 7: Semistrukturierte Modelle.

80

bib

bookbookbook

Data on the Web

title author author

Serge

firstname

Abiteboul

lastname

Peter

firstname

Bunemann

lastname

XQuery: Beispiel (3b)

author publisher

Morgan-Kaufmann

name

...<Paar>

<Autor>Buneman</Autor><Buch>Data on the Web</Buch>

</Paar><Paar>

<Autor>Abiteboul</Autor><Buch>Data on the Web</Buch>

</Paar>...

...<Paar>

<Autor>Buneman</Autor><Buch>Data on the Web</Buch>

</Paar><Paar>

<Autor>Abiteboul</Autor><Buch>Data on the Web</Buch>

</Paar>...

Ergebnis

„Alle Autoren-Bücher-Paare aus dem Morgan-Kaufmann-Verlag.“ (Join!)„Alle Autoren-Bücher-Paare aus dem Morgan-Kaufmann-Verlag.“ (Join!)

for $b in /bib/book, $a in $b/authorwhere $b/publisher/name = „Morgan Kaufmann“return <Paar>

<Autor>{$a/lastname}</Autor><Buch>{$b/title}</Buch>

</Paar>

for $b in /bib/book, $a in $b/authorwhere $b/publisher/name = „Morgan Kaufmann“return <Paar>

<Autor>{$a/lastname}</Autor><Buch>{$b/title}</Buch>

</Paar>

Korrelierter Join

Page 81: 1 Teil I Datenmodelle Kapitel 7: Semistrukturierte Modelle.

81

bib

bookbookbook

Data on the Web

title author author

Serge

firstname

Abiteboul

lastname

Peter

firstname

Bunemann

lastname

XQuery: Beispiel (4)

author publisher

Morgan-Kaufmann

name

„Alle Autoren inklusive aller ihrer Bücher und Sortierung nach Autorname.“„Alle Autoren inklusive aller ihrer Bücher und Sortierung nach Autorname.“

for $a in distinct-values(/bib//author)order by $areturn <Autor>

<Name >{$a/lastname}</Name> <Buchliste>

{ for $b in /bib/book[author=$a]return <Buch titel=„{$b/title}“ /Buch> }

</Buchliste></Autor>

for $a in distinct-values(/bib//author)order by $areturn <Autor>

<Name >{$a/lastname}</Name> <Buchliste>

{ for $b in /bib/book[author=$a]return <Buch titel=„{$b/title}“ /Buch> }

</Buchliste></Autor>

...<Autor>

<Name>Abiteboul</Name><Buchliste>

<Buch titel=„Data on the Web“/><Buch titel=„Foundations of Databases“/>

</Buchliste></Autor>...

...<Autor>

<Name>Abiteboul</Name><Buchliste>

<Buch titel=„Data on the Web“/><Buch titel=„Foundations of Databases“/>

</Buchliste></Autor>...

Ergebnis

Verschachtelte Anfrage

Page 82: 1 Teil I Datenmodelle Kapitel 7: Semistrukturierte Modelle.

82

bib

bookbookbook

Data on the Web

title author author

Serge

firstname

Abiteboul

lastname

Peter

firstname

Bunemann

lastname

XQuery: Beispiel (5)

author publisher

Morgan-Kaufmann

name

„Alle Bücher mit der Anzahl ihrer Autoren, sortiert nach der Anzahl der Autoren.“„Alle Bücher mit der Anzahl ihrer Autoren, sortiert nach der Anzahl der Autoren.“

for $b in /bib/book/let $a := $b/authororder by count($a) descendingreturn <Buch titel=„{$b/title}“> {count($a)} </Buch>

for $b in /bib/book/let $a := $b/authororder by count($a) descendingreturn <Buch titel=„{$b/title}“> {count($a)} </Buch>

Aggregations-Funktion

...<Buch titel=„Data on the Web“> 3 </Buch><Buch titel=„Active Database Systems“> 3 </Buch><Buch titel=„Readings in Object Oriented Database Systems“> 3 </Buch><Buch titel=„Transaction Processing“> 2 </Buch><Buch titel=„SQL 1999“> 2 </Buch> <Buch titel=„Practical Digital Libraries“> 1 </Buch> ...

...<Buch titel=„Data on the Web“> 3 </Buch><Buch titel=„Active Database Systems“> 3 </Buch><Buch titel=„Readings in Object Oriented Database Systems“> 3 </Buch><Buch titel=„Transaction Processing“> 2 </Buch><Buch titel=„SQL 1999“> 2 </Buch> <Buch titel=„Practical Digital Libraries“> 1 </Buch> ...

Ergebnis

Page 83: 1 Teil I Datenmodelle Kapitel 7: Semistrukturierte Modelle.

83

bib

bookbookbook

Data on the Web

title author author

Serge

firstname

Abiteboul

lastname

Peter

firstname

Bunemann

lastname

XQuery: Funktionen (Beispiel) [1]

author publisher

Morgan-Kaufmann

name

„Die Funktion soll zu einem Autor alle Bücher oder sonstigen Schriftwerke finden, die dieser jemals verfasst hat. Sortiert werden soll zuerst nach dem Jahr (absteigend), danach nach dem Titel (alphabethisch = aufsteigend).“

„Die Funktion soll zu einem Autor alle Bücher oder sonstigen Schriftwerke finden, die dieser jemals verfasst hat. Sortiert werden soll zuerst nach dem Jahr (absteigend), danach nach dem Titel (alphabethisch = aufsteigend).“

define function werkliste($autor as element author) as node*{

for $x in /bib/*where some $e in $x/author satisfies $e = $autororder by $x/year descending, $x/titlereturn {$x}

{

define function werkliste($autor as element author) as node*{

for $x in /bib/*where some $e in $x/author satisfies $e = $autororder by $x/year descending, $x/titlereturn {$x}

{

for $a in /bib//authorreturn <Autor>

<Name>{$a/lastname}</Name><Werkliste>

{werkliste($a)}</Werkliste>

</Autor>

for $a in /bib//authorreturn <Autor>

<Name>{$a/lastname}</Name><Werkliste>

{werkliste($a)}</Werkliste>

</Autor>

Funktionsdeklarationi.d.R. im Prolog eines XQuery-Blockes

Funktionsaufrufbeliebig innerhalb einer XQuery-Definition

Page 84: 1 Teil I Datenmodelle Kapitel 7: Semistrukturierte Modelle.

84

bib

bookbookbook

Data on the Web

title author author

Serge

firstname

Abiteboul

lastname

Peter

firstname

Bunemann

lastname

XQuery: Funktionen (Beispiel) [2]

author publisher

Morgan-Kaufmann

name

define function werkliste($autor as element author) as node*{

for $x in /bib/*where some $e in $x/author satisfies $e = $autororder by $x/year descending, $x/titlereturn {$x}

{

define function werkliste($autor as element author) as node*{

for $x in /bib/*where some $e in $x/author satisfies $e = $autororder by $x/year descending, $x/titlereturn {$x}

{

Funktionsname(werkliste)

Parametername($autor)

Parametertyp(author-Element)

Rückgabetyp(immer Liste!, hier:

Liste beliebiger Knoten)

Kardinalität(„*“ = 0..∞)

(1) Binde x an alle Kind- Knoten von bib (2) Schränke Auswahl ein auf:

{x | ∃e {∈ x/author}: e=$autor}

(3) Sortiere nach (2) gefilterte x absteigend1. nach Jahr2. nach Titel

(4) Gib die Liste der gefilterten x aus.

Die Klammern „{…}“ kennzeichnen einen sog. berechneten Konstruktor.So werden nicht die Originalknoten sondern vollständige, rekursive Kopien (sog. „Deep-Copies“) mit neuen Knoten-Identitäten zurückgeliefert!In den meisten Fällen ist der Unterschied zu einem direkten Konstruktor (ohne Klammern) aber vernachlässigbar (so auch hier!)

Page 85: 1 Teil I Datenmodelle Kapitel 7: Semistrukturierte Modelle.

85

bib

bookbookbook

Data on the Web

title author author

Serge

firstname

Abiteboul

lastname

Peter

firstname

Bunemann

lastname

XQuery: Funktionen (Beispiel) [3]

author publisher

Morgan-Kaufmann

name

„Die Funktion soll zu einem Autor alle Bücher oder sonstigen Schriftwerke finden, die dieser jemals verfasst hat. Sortiert werden soll zuerst nach dem Jahr (absteigend), danach nach dem Titel (alphabethisch = aufsteigend).“

„Die Funktion soll zu einem Autor alle Bücher oder sonstigen Schriftwerke finden, die dieser jemals verfasst hat. Sortiert werden soll zuerst nach dem Jahr (absteigend), danach nach dem Titel (alphabethisch = aufsteigend).“

define function werkliste($autor as element author) as node*{

for $x in /bib/*where some $e in $x/author satisfies $e = $autororder by $x/year descending, $x/titlereturn {$x}

{

define function werkliste($autor as element author) as node*{

for $x in /bib/*where some $e in $x/author satisfies $e = $autororder by $x/year descending, $x/titlereturn {$x}

{

for $a in /bib//authorreturn <Autor>

<Name>{$a/lastname}</Name><Werkliste>

{werkliste($a)}</Werkliste>

</Autor>

for $a in /bib//authorreturn <Autor>

<Name>{$a/lastname}</Name><Werkliste>

{werkliste($a)}</Werkliste>

</Autor>

...<Autor>

<Name>Abiteboul</Name><Werkliste>

<book><title>Data on the Web<title/>...<paper>...<title>A Logical View of Structured Files</title>...

...</Werkliste>

</Autor>...

...<Autor>

<Name>Abiteboul</Name><Werkliste>

<book><title>Data on the Web<title/>...<paper>...<title>A Logical View of Structured Files</title>...

...</Werkliste>

</Autor>...

Ergebnis

Annahme: es existieren neben book-Knoten auch z.B. paper-Knoten unterhalb von bib