Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Kapitel 7: Semistrukturierte Modelle

Ähnliche Präsentationen


Präsentation zum Thema: "Kapitel 7: Semistrukturierte Modelle"—  Präsentation transkript:

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

2 Motivation 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.

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

4 Kapitel 7.1: Der Beginn - OEM

5 Polymorphe Typen Typ Atomarer Typ oder Obj.
Atomare Typen string Polymorphe 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.

6 Bewertung Strukturelle Mächtigkeit gering
Set Obj Atomarer Typ Strukturelle Mächtigkeit gering Beschränkte aber mächtige strukturelle Orthogonalität

7 Object Exchange Model (OEM)
Veranschaulichung von Objekten als gerichtete Graphen object identifier bib &o1 complex object paper paper book references &o12 &o24 &o29 references references author pages author year author title http title publisher title author author author &o43 &o25 &o96 1997 last firstname atomic object firstname lastname first lastname &o243 &o206 “Serge” “Abiteboul” “Victor” 122 133 “Vianu”

8 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} } Object Exchange Model (OEM) Bib &o1 paper paper book references &o12 &o24 &o29 references references author pages author year author title http title author publisher title author author &o43 &o25 &o96 1997 last firstname firstname lastname first lastname &o243 &o206 “Serge” “Abiteboul” “Victor” 122 133 “Vianu”

9 Object Exchange Model (OEM)
Textuelle Darstellung 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} } { paper: { author: “Abiteboul”, author: { firstname: “Victor”, lastname: “Vianu”}, title: “Regular path queries …”, pages: { first: 122, last: 133 } } OEM ohne Ordnung!

10 Object Exchange Model (OEM)
Vergleich mit relationalen Daten row name phone “John” 3634 “Sue” “Dick” 6343 6363 { row: { name: “John”, phone: 3634 }, row: { name: “Sue”, phone: 6343 }, row: { name: “Dick”, phone: 6363 } }

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?”

12 Kapitel 7.2: XML

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

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/> Startmarkierung <author> <firstname> Serge </firstname> <lastname> Abiteboul </lastname> < > </ > address may be wrong! </author> Unterelemente Element author Freitext Endmarkierung

15 XML-Syntax (2) – XML-Attribut
XML-Attribut (engl. attribute): Name-Zeichenkettenwert-Paar Assoziiert mit einem Element Alternative Möglichkeit, Daten zu beschreiben Attribut <author <firstname> Serge </firstname> <lastname> Abiteboul </lastname> </author> Weitere denkbare Beschreibung derselben Daten: <author firstname=“Serge” lastname=“Abiteboul”

16 XML-Graph Veranschaulichung von Objekten als gerichtete Graphen
Objektidentifikator als Attribut im Knoten vermerkt Knoten sind markiert &o1 bib &o12 &o24 &o29 paper book paper pages author year 1997 author Serge Abiteboul firstname lastname Victor 122 133 firstname lastname Vianu first last Text im Knoten vermerkt

17 XML-Graph <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> XML-Graph &o1 bib &o12 &o24 &o29 paper book paper pages author year 1997 author Serge Abiteboul firstname lastname Victor 122 133 firstname lastname Vianu first last

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) HTMLXMLSGML Inhaltsangabe <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> XML <h1> bib </h1> <p> <i> Foundations of Databases </i> Serge Abiteboul <br> Addison Wesley, 1997 <p> ... HTML Präsentationsangabe

19 XML-Dokument XML-Dokument: Wohlgeformtes 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

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

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> 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)> ... ]> DTD

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)> ... ]> DTD

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 und Festlegung 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

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 vom Typ 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

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 aus mindestens einem author genau einem year und einem 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

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

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: REQUIRED zwingend 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

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: REQUIRED zwingend IMPLIED optional (Initialwert) paper besitzt ein Attribut id, eine OID, die zwingend mit einem eindeutigen Wert belegt werden muss <!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

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: REQUIRED zwingend IMPLIED optional (Initialwert) Ein author hat ein Attribut age, mit dem ihm eine Zeichenkette mit dem Wert für sein Alter zugewiesen werden kann (aber nicht muss!) <!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

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> XML <!DOCTYPE family [ <!ELEMENT family (person*)> <!ELEMENT person (name)> <!ELEMENT name (#PCDATA)> <!ATTLIST person id ID #REQUIRED mother IDREF #IMPLIED father IDREF #IMPLIED children IDREFS #IMPLIED> ]> DTD

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)> ]> 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 | )* ) > Referenzen können nicht eingeschränkt (typisiert) werden Alle Elementnamen sind global in einem Namensraum

32 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> XML-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)> ... ]> DTD

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

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

35 XML-Schemata: Beispiele
Beispiel für Elemente Weitere Beispiele <attribute name=“age” type=“string” use=“optional”/> <attribute name=“language” type=“string” use=“default” value=“de”/> Beispiel für Attribute <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> XML-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>

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

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“/>

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“/>

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)

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

41 Typhierarchien (2) Erweiterung Restriktion
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

42 Typhierarchien: Erweiterung von Typen (1)
Beispiel: <complexType name=“extendedAuthorType“> <extension base=“authorType“> <sequence> <element name=“ “ 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 ein optionales Attribut homepage

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=“ “ 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>

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: 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>

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

46 Polymorphe Konsistenzbedingungen (2)
Schlüsselbedingung: <key name=“papierSchlüssel“> <field </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 </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.

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>

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"> <element name=" " type="string" minOccurs="0" maxOccurs="1"/> </sequence> <attribute name="homepage" type="simpleURLType" use="optional"/> </extension> </complexType>

49 Beispiel-Schema (3) <simpleType name="humanAge" base="unsignedShort"> <maxInclusive value="200"/> </simpleType> <simpleType name="simpleURLType" base="string"> <pattern value=" </simpleType>

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 </key> <keyref name="papierFremdschlüssel" refer="papierSchlüssel"> <field </keyref> </schema>

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: Einführung Teil I: Strukturen Teil II: Datentypen

52 Kapitel 7.3: Anfragesprachen

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

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

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.

56 syntaktisch wie Kinder behandelt
Xpath: Achsen (1) Kontextknoten syntaktisch wie Kinder behandelt

57 Ausgangspunkt: der über Pfad erreichte Kontextknoten
Xpath: Achsen (2) Ausgangspunkt: der über Pfad erreichte Kontextknoten

58 Achse = Kontextknoten selbst: Pfad/self :: ...
Xpath: Achsen (3) Achse = Kontextknoten selbst: Pfad/self :: ...

59 Alle Attribute des Kontextknotens: Pfad/attribute :: ...
Xpath: Achsen (4) Alle Attribute des Kontextknotens: Pfad/attribute :: ...

60 Alle Kindknoten: Pfad/child :: ...
Xpath: Achsen (5) Alle Kindknoten: Pfad/child :: ...

61 Xpath: Achsen (6) Alle Nachfahren: Pfad/descendant :: ...
Weitere Achse: descendant-or-self = descendant ∪ self

62 Der Elternknoten: Pfad/parent :: ...
Xpath: Achsen (7) Der Elternknoten: Pfad/parent :: ...

63 Alle Vorfahren: Pfad/ancestor :: ...
Xpath: Achsen (8) Alle Vorfahren: Pfad/ancestor :: ...

64 Alle nachfolgenden Geschwisterknoten: Pfad/following-sibling :: ...
Xpath: Achsen (9) Alle nachfolgenden Geschwisterknoten: Pfad/following-sibling :: ...

65 Alle vorangehenden Geschwisterknoten: Pfad/preceding-sibling :: ...
Xpath: Achsen (10) Alle vorangehenden Geschwisterknoten: Pfad/preceding-sibling :: ...

66 Alle nachfolgenden Knoten: Pfad/following :: ...
Xpath: Achsen (11) Alle nachfolgenden Knoten: Pfad/following :: ...

67 Alle vorangehenden Knoten: Pfad/preceding :: ...
Xpath: Achsen (12) Alle vorangehenden Knoten: Pfad/preceding :: ...

68 Ausgangspunkt: Durch die Achse bestimmte Knotenmenge
XPath: Knotentests Ausgangspunkt: Durch die Achse bestimmte Knotenmenge außer Text!

69 descendant-or-self::node()
Abkürzungen = parent::* child::node() Alle Kinder, die Elemente sind descendant-or-self::node() Alle Nachfolgeelemente und der Knoten selbst Am Anfang eines Pfades: Alle Elemente samt Wurzelknoten / Fehlt node() wird text() unterstellt

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.

71 Founda-tions of Data-bases
XPath: Beispiele (1) bib id=&o12 id=&o24 id=&o29 paper book paper Founda-tions of Data-bases age=51 1997 age=40 title author year author pages Serge Abiteboul Victor Vianu 122 133 firstname lastname firstname lastname first last Nachname des Autors des zweiten Papiers: / child:: bib / child:: paper [position()=2] / child:: author / child:: lastname oder kurz: / bib / paper [2] / author / lastname

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 paper book title author 1997 year Serge firstname Abiteboul lastname pages Victor Vianu 122 first 133 last

73 bib paper book title author 1997 year Serge firstname Abiteboul lastname pages Victor Vianu 122 first 133 last 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 = „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“]

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

75 XQuery: FLWR-Ausdrücke (1)
Grundmuster FLWR (gesprochen „flower“) for Bindungsliste let Bindungsliste where Bedingung return Ergebnis 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.

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

77 XQuery: Beispiel (1) „Alle Bücher, die im Morgan-Kaufmann-Verlag veröffentlicht wurden.“ bib for $b in /bib/book where $b/publisher/name = „Morgan Kaufmann“ return <Buch titel=„{$b/title}“ /> book book book title author author author publisher ... <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 Data on the Web firstname lastname firstname lastname name Serge Abiteboul Peter Bunemann Morgan Kaufmann

78 XQuery: Beispiel (2) „Alle Bücher, die im Morgan-Kaufmann-Verlag veröffentlicht wurden, inklusive ihrer Autoren.“ bib for $b in /bib/book let $a := $b/author where $b/publisher/name = „Morgan Kaufmann“ return <Buch titel=„{$b/title}“> <Autoren>{$a/lastname}</Autoren> </Buch> book book book title author author author publisher ... <Buch titel=„Data on the Web“> <Autoren>Abiteboul Buneman Suciu</Autoren> </Buch> <Buch titel=„Transaction Processing“> <Autoren>Gray Reuter</Autoren> </Buch> ... Ergebnis Data on the Web firstname lastname firstname lastname name Serge Abiteboul Peter Bunemann Morgan- Kaufmann

79 XQuery: Beispiel (3a) „Alle Autoren-Bücher-Paare aus dem Morgan-Kaufmann-Verlag.“ (Join!) bib Einfacher Join for $b in /bib/book, $a in /bib//author where $b/publisher/name = „Morgan Kaufmann“ and $b/author = $a return <Paar> <Autor>{$a/lastname}</Autor> <Buch>{$b/title}</Buch> </Paar> book book book ... <Paar> <Autor>Buneman</Autor> <Buch>Data on the Web</Buch> </Paar> <Paar> <Autor>Abiteboul</Autor> <Buch>Data on the Web</Buch> </Paar> ... Ergebnis title author author author publisher Data on the Web firstname lastname firstname lastname name Serge Abiteboul Peter Bunemann Morgan- Kaufmann

80 XQuery: Beispiel (3b) „Alle Autoren-Bücher-Paare aus dem Morgan-Kaufmann-Verlag.“ (Join!) bib Korrelierter Join for $b in /bib/book, $a in $b/author where $b/publisher/name = „Morgan Kaufmann“ return <Paar> <Autor>{$a/lastname}</Autor> <Buch>{$b/title}</Buch> </Paar> book book book ... <Paar> <Autor>Buneman</Autor> <Buch>Data on the Web</Buch> </Paar> <Paar> <Autor>Abiteboul</Autor> <Buch>Data on the Web</Buch> </Paar> ... Ergebnis title author author author publisher Data on the Web firstname lastname firstname lastname name Serge Abiteboul Peter Bunemann Morgan- Kaufmann

81 Verschachtelte Anfrage
XQuery: Beispiel (4) „Alle Autoren inklusive aller ihrer Bücher und Sortierung nach Autorname.“ bib Verschachtelte Anfrage for $a in distinct-values(/bib//author) order by $a return <Autor> <Name >{$a/lastname}</Name> <Buchliste> { for $b in /bib/book[author=$a] return <Buch titel=„{$b/title}“ /Buch> } </Buchliste> </Autor> book book book title author author author publisher ... <Autor> <Name>Abiteboul</Name> <Buchliste> <Buch titel=„Data on the Web“/> <Buch titel=„Foundations of Databases“/> </Buchliste> </Autor> ... Ergebnis Data on the Web firstname lastname firstname lastname name Serge Abiteboul Peter Bunemann Morgan- Kaufmann

82 Aggregations- Funktion
XQuery: Beispiel (5) „Alle Bücher mit der Anzahl ihrer Autoren, sortiert nach der Anzahl der Autoren.“ bib Aggregations- Funktion for $b in /bib/book/ let $a := $b/author order by count($a) descending return <Buch titel=„{$b/title}“> {count($a)} </Buch> book book book title author author author publisher ... <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 Data on the Web firstname lastname firstname lastname name Serge Abiteboul Peter Bunemann Morgan- Kaufmann

83 XQuery: Funktionen (Beispiel) [1]
„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).“ bib define function werkliste($autor as element author) as node* { for $x in /bib/* where some $e in $x/author satisfies $e = $autor order by $x/year descending, $x/title return {$x} { Funktionsdeklaration i.d.R. im Prolog eines XQuery-Blockes book book book for $a in /bib//author return <Autor> <Name>{$a/lastname}</Name> <Werkliste> {werkliste($a)} </Werkliste> </Autor> title author author author publisher Data on the Web Funktionsaufruf beliebig innerhalb einer XQuery-Definition firstname lastname firstname lastname name Serge Abiteboul Peter Bunemann Morgan- Kaufmann

84 XQuery: Funktionen (Beispiel) [2]
Funktionsname (werkliste) Parametername ($autor) Parametertyp (author-Element) Rückgabetyp (immer Liste!, hier: Liste beliebiger Knoten) Kardinalität („*“ = 0..∞) bib (1) Binde x an alle Kind- Knoten von bib define function werkliste($autor as element author) as node* { for $x in /bib/* where some $e in $x/author satisfies $e = $autor order by $x/year descending, $x/title return {$x} { book book (2) Schränke Auswahl ein auf: {x | ∃e∈{x/author}: e=$autor} book (3) Sortiere nach (2) gefilterte x absteigend 1. nach Jahr 2. 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!) title author author author publisher Data on the Web firstname lastname firstname lastname name Serge Abiteboul Peter Bunemann Morgan- Kaufmann

85 XQuery: Funktionen (Beispiel) [3]
„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).“ bib define function werkliste($autor as element author) as node* { for $x in /bib/* where some $e in $x/author satisfies $e = $autor order by $x/year descending, $x/title return {$x} { book book book for $a in /bib//author return <Autor> <Name>{$a/lastname}</Name> <Werkliste> {werkliste($a)} </Werkliste> </Autor> title author author ... <Autor> <Name>Abiteboul</Name> <Werkliste> <book><title>Data on the Web<title/>... <paper>...<title>A Logical View of Structured Files</title> </Werkliste> </Autor> ... Ergebnis author publisher Data on the Web firstname lastname firstname lastname name Serge Abiteboul Peter Bunemann Morgan- Kaufmann Annahme: es existieren neben book-Knoten auch z.B. paper-Knoten unterhalb von bib


Herunterladen ppt "Kapitel 7: Semistrukturierte Modelle"

Ähnliche Präsentationen


Google-Anzeigen