Polymorphe Typen in (1) Object Exchange Model (). Motivation: Historische Entwicklung, alternatives semistrukturiertes Datenmodell. Manche Ansätze im Folgenden basieren auf. Thema der folgenden Folien. Atomare Typen string Polymorphe Typen Obj ::= sel: Typ Set ::= {Obj Typ Atomarer Typ oder Obj. Objekt: Sammlung atomarer oder zusammengesetzter Datenelemente. Selektor (Attribut) identifiziert jede Komponente nicht-eindeutig. Set: Menge von Objekten. Datenbankeinsatz: Semistrukturierte Datenmodelle 1 Datenbankeinsatz: Semistrukturierte Datenmodelle 2 Polymorphe Typen in (2) Object Exchange Model () Objekt-Typ: Wiederholtes Vorkommen des gleichen Selektors möglich. Verweise von unterschiedlichen Positionen aufs gleiche Objekt möglich. Objekt-Identifier. Veranschaulichung von Objekten als gerichtete Graphen. complex object paper bib &o1 paper references &o12 &o24 &o29 references references year title http title publisher title object identifier pages &o43 &o96 &o25 firstname lastname 1997 atomic object firstname lastname first last Serge Abiteboul &o243 Victor &o206 Vianu 122 133 Datenbankeinsatz: Semistrukturierte Datenmodelle 3 Datenbankeinsatz: Semistrukturierte Datenmodelle 4
bib: &o1 { paper: &o12 {, : &o24 {, paper: &o29object Exchange Model () { : &o52 Abiteboul, : &o96 { firstname: &o243 Victor, lastname: &o206 Vianu, title: &o93 Regular path queries with constraints, references: &o12, references: &o24, Bib pages: &o25 { first: &o64 122, last: &o92 133 &o1 firstname Serge &o43 Abiteboul 1997 paper paper references &o12 &o24 &o29 references references year title http title publisher title lastname &o243 Victor &o96 &o206 Vianu pages &o25 firstname lastname first last 122 133 Object Exchange Model () Textuelle Darstellung bib: &o1 { paper: &o12 {, : &o24 {, paper: &o29 { : &o52 Abiteboul, : &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 Datenbankeinsatz: Semistrukturierte Datenmodelle 5 Datenbankeinsatz: Semistrukturierte Datenmodelle 6 Object Exchange Model () Bewertung Textuelle Darstellung bib: &o1 { paper: &o12 {, : &o24 {, paper: &o29 { : &o52 Abiteboul, : &o96 { firstname: &o243 Victor, lastname: &o206 Vianu, title: &o93 Regular path queries with constraints, references: &o12, references: &o24, pages: &o25 { first: { paper: &o64{ : 122, last: Abiteboul, &o92 133 : { firstname: Victor, lastname: Vianu, title: Regular path queries, pages: { first: 122, last: 133 ohne Ordnung! Set Obj Atomarer Typ Strukturelle Mächtigkeit gering. Beschränkte, aber mächtige strukturelle Orthogonalität. Datenbankeinsatz: Semistrukturierte Datenmodelle 7 Datenbankeinsatz: Semistrukturierte Datenmodelle 8
Unterschiede zu Dokumenttypdefinition Reihenfolge, kein, Markierung der Kanten, nur ein atomarer Typ, Objekt-Identifier. Dokumenttypdefinition (DTD) ist im wesentlichen Menge von Regeln/Grammatik, DTD gibt vor, was für Markup (an welcher Stelle genau im Dokument des Typs) vorkommen darf. z Datenbankeinsatz: Semistrukturierte Datenmodelle 9 Datenbankeinsatz: Semistrukturierte Datenmodelle 10 Beispiel: Bookstore DTD Well-Formed vs. Valid <!ELEMENT store ()*> <!ELEMENT (title,+,price?)> <!ATTLIST genre CDATA #REQUIRED> <!ELEMENT title (#PCDATA)> <!ELEMENT ( name (firstname,lastname))> <!ELEMENT price (#PCDATA)> <!ELEMENT name (#PCDATA)> wohlgeformt (well-formed) ein Dokument besitzt geordnete syntaktische Eigenschaften, gültig (valid) Ein Dokument ist wohlgeformt und folgt einem a priori gegebenen, formalisiert in einer Dokumenttypdefinition (DTD). Datenbankeinsatz: Semistrukturierte Datenmodelle 11 Datenbankeinsatz: Semistrukturierte Datenmodelle 12
-ta I: DTD Eine DTD definiert kontextfreie Grammatik für -Dokumente. Einschränkung von Elementen und Attributen auf definierte Auswahl und Struktur. <bib> <paper id= o12 > <title> Foundations of Databases </title> <> <firstname> Serge </firstname> <lastname> Abiteboul </lastname> </> <year> 1997 </year> <publisher> Addison Wesley </publisher> </paper> </bib> <!ELEMENT paper (title, +, year, publisher?)> ]> DTD DTD Deklaration von Elementen Beschreibt die Einschränkungen des Inhalts eines Elements <!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. <!ELEMENT paper (+, year, publisher?)> ]> DTD Datenbankeinsatz: Semistrukturierte Datenmodelle 13 Datenbankeinsatz: Semistrukturierte Datenmodelle 14 DTD Deklaration von Elementen (2) Beschreibt die Einschränkungen des Inhalts eines Elements <!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 <!ELEMENT paper (+, year, publisher?)> ]> DTD Datenbankeinsatz: Semistrukturierte Datenmodelle 15 DTD Deklaration von Elementen (3) Beschreibt die Einschränkungen des Inhalts eines Elements <!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 <!ELEMENT paper (+, year, publisher?)> ]> DTD Datenbankeinsatz: Semistrukturierte Datenmodelle 16
DTD Deklaration von Elementen (4) Beschreibt die Einschränkungen des Inhalts eines Elements <!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, genau einem year und einem optionalen publisher in genau dieser Reihenfolge. <!ELEMENT paper (+, year, publisher?)> ]> DTD Datenbankeinsatz: Semistrukturierte Datenmodelle 17 DTD Deklaration von Elementen (5) Beschreibt die Einschränkungen des Inhalts eines Elements <!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 <!ELEMENT paper (+, year, publisher?)> ]> DTD Datenbankeinsatz: Semistrukturierte Datenmodelle 18 DTD Deklaration von Attributen Name-Zeichenkettenwert-Paar Assoziiert mit einem Element <!ATTLIST Element Attributname1 Typ1 Zusatz1 Attributname2 > Typ: CDATA Zeichenkette ID OID IDREF Referenz IDREFS Menge von Referenzen Zusatz: REQUIRED zwingend IMPLIED optional (Initialwert) <!ELEMENT paper (+, year, publisher?)> DTD Deklaration von Attributen (2) Name-Zeichenkettenwert-Paar Assoziiert mit einem Element <!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 muß. <!ELEMENT paper (+, year, publisher?)> ]> DTD Datenbankeinsatz: Semistrukturierte Datenmodelle 19 Datenbankeinsatz: Semistrukturierte Datenmodelle 20 ]> DTD
DTD Deklaration von Attributen (3) Name-Zeichenkettenwert-Paar Assoziiert mit einem Element <!ATTLIST Element Attributname1 Typ1 Zusatz1 Attributname2 > Typ: CDATA Zeichenkette ID OID IDREF Referenz IDREFS Menge von Referenzen Zusatz: REQUIRED zwingend IMPLIED optional (Initialwert) Ein hat ein Attribut age, mitdem ihm eine Zeichenkette mit dem Wert für sein Alter zugewiesen werden kann (aber nicht muß). <!ELEMENT paper (+, year, publisher?)> DTD OIDs und Referenzen (1) 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> ]> DTD Datenbankeinsatz: Semistrukturierte Datenmodelle 21 </family> Datenbankeinsatz: Semistrukturierte Datenmodelle 22 <!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 DTD OIDs und Referenzen (2) Keine Konsistenzbedingungen à la Person kann nicht gleichzeitig Vater und Mutter sein. father-attribut kann nur auf Männer verweisen. Primär- vs. Sekundärstruktur Attribut vom Typ ID ist innerhalb eines Dokuments eindeutig, IDREF ist eine Referenz auf eine ID, Parser prüft referentielle Integrität, keine Einschränkung des Typs. Datenbankeinsatz: Semistrukturierte Datenmodelle 23 Datenbankeinsatz: Semistrukturierte Datenmodelle 24
Rekursion in 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 Datenbankeinsatz: Semistrukturierte Datenmodelle 25 Datenbankeinsatz: Semistrukturierte Datenmodelle 26 Werkzeuge (2) Datenbankeinsatz: Semistrukturierte Datenmodelle 27 Datenbankeinsatz: Semistrukturierte Datenmodelle 28
Werkzeuge (4) Datenbankeinsatz: Semistrukturierte Datenmodelle 29 Datenbankeinsatz: Semistrukturierte Datenmodelle 30 Datenbankeinsatz: Semistrukturierte Datenmodelle 31 Datenbankeinsatz: Semistrukturierte Datenmodelle 32
Datenbankeinsatz: Semistrukturierte Datenmodelle 33 Datenbankeinsatz: Semistrukturierte Datenmodelle 34 Bewertung von weisen bei der Definition eines s 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. Datenbankeinsatz: Semistrukturierte Datenmodelle 35 Datenbankeinsatz: Semistrukturierte Datenmodelle 36 z
Anwendungen (1) Anwendungen (2) Bis jetzt: Herangehensweise eher kontemplativ, Modellierung stand im Vordergrund. Jetzt: Arbeiten mit -Dokumenten. Es muß leicht möglich sein, -basierte Anwendungen zu entwickeln. Standards, die auf aufbauen. Fortsetzung des Kochrezept-Beispiels: Anwendungsunabhängig: Wieviele Zutaten enthält das aktuelle Kochrezept? Anwendungsspezifisch: System, das Rezept vorschlägt, Dialogstruktur, Abbildung von Präferenzen auf Rezeptauswahl. Anwendungsspezifisch erfordert Programmierung, erfordert Anwendungswissen. Datenbankeinsatz: Semistrukturierte Datenmodelle 37 Datenbankeinsatz: Semistrukturierte Datenmodelle 38 Anwendungs Processor, Application Prozedurale Mechanismen; zwei Schnittstellen: DOM ( Document Object Model ) objektorientierte Sicht auf -Dokumente. SAX-API ( Simple API for ) Callback-Mechanismus. XSLT ( Extensible Stylesheet Language ), Querysprachen wie z. B. XQuery Query- und Transformationsmechanismen für -Dokumente, deklarativ. Aufruf für -Dok. -Processor (-Engine) Application Callback- Methoden DOM- Methoden -Engine validiert auch. DOM: Anwendung hält Kontrolle über den Ablauf. Callback-Methoden: -Processor hält Kontrolle. Datenbankeinsatz: Semistrukturierte Datenmodelle 39 Datenbankeinsatz: Semistrukturierte Datenmodelle 40
DOM: Document Object Model Objektorientierte Sicht auf -Dokumente und Dokumentbestandteile, Baumstruktur. Alle Dokumentbestandteile, nicht nur Elemente. Methoden erlauben das Navigieren im Baum und das Manipulieren des Baums. Keine Aussagen über die konkrete Implementation der Objekte, nur Methodeninterface wird spezifiziert. DOM-Anwender muß sich Klassenbibliothek besorgen, die er verwenden kann. lastname title The Autobiography of Benjamin DOM Illustration store price title price 8.99 firstname Franklin The Gorgias Plato name 9.99 Datenbankeinsatz: Semistrukturierte Datenmodelle 41 Datenbankeinsatz: Semistrukturierte Datenmodelle 42 DOM Illustration (Forts.) store-element sei gegeben. Verwendung von DOM-Methoden Programmiersprache Java im folgenden Beispiel: Node store = ; Nodelist s = store.getelementsbytagname( ) int i = 0; Node n = s.item(i); lastname DOM weitere Klassen Illustration The Autobiography of store title price < nationality= firstname U.S. inventory nationality =U.S. <first-name>benjamin</first-name> > 8.99 <last-name>franklin</last-name> </> Datenbankeinsatz: Semistrukturierte Datenmodelle 43 Datenbankeinsatz: Semistrukturierte Datenmodelle 44
DOM weitere Klassen Attribute und Methoden von Node Beispiele: Document inventory; inventory = ; Nodelist s = inventory.getelementsbytagname( ); Element a = (Element) s.item(0); AttributeList al = a.attributes(); Attribute attr = al.item(0); String av = (String) attr.getvalue(); previoussibling attributes nodename nodetype nodevalue parentnode haschildnodes childnodes firstchild childnodes.item(0) lastchild ownerdocument nextsibling length Datenbankeinsatz: Semistrukturierte Datenmodelle 45 Datenbankeinsatz: Semistrukturierte Datenmodelle 46 DOM Manipulationsmethoden Manipulationsmethoden von Node store insertbefore 8.99 lastname title The Autobiography of price title price firstname Benjamin Franklin The Gorgias Plato name 9.99 Node Plato = ; Node Franklin = ; n = removechild(plato); n2 = insertbefore(n, Franklin); replacechild appendchild removechild Datenbankeinsatz: Semistrukturierte Datenmodelle 47 Datenbankeinsatz: Semistrukturierte Datenmodelle 48
DOM Zusammenfassung DOM Ausblick Objektorientierte Sicht auf -Dokumente, Unterschiedliche Objekttypen entsprechen unterschiedlichen -Konzepten (z. B. Elemente, Attribute), Methoden zur Traversierung und Manipulation des Dokument-Baums. (Proprietäre) Methoden, die zusätzliche Funktionalität bieten, z. B. Anwendung von (XSL-)Stylesheets. Es gibt zahlreihe Implementierungen, d. h. Möglichkeiten, wie man mit DOM arbeiten kann, z. B.: Java (+ -Parser), JavaScript und Web-Browser. Datenbankeinsatz: Semistrukturierte Datenmodelle 49 Datenbankeinsatz: Semistrukturierte Datenmodelle 50 Event-basiertes Vorgehen (SAX) (1) SAX = Simple API for. -Engine geht durch das Dokument. Immer wenn dabei bestimmtes Ereignis eintritt, z. B. Anfang eines neuen Elements wird erkannt, wird entsprechende Callback-Methode aufgerufen (falls vorhanden). D. h. -Engine hat Kontrolle über den Ablauf. 8.99 lastname Illustration Event-basierter Ansatz The Autobiography of store title price firstname Benjamin Franklin startelement( store, ) startelement( ) startelement( title ) characterdata( The Auto, ) endelement( title, ) startelement(, ) Datenbankeinsatz: Semistrukturierte Datenmodelle 51 Datenbankeinsatz: Semistrukturierte Datenmodelle 52
8.99 lastname Illustration Event-basierter Ansatz The Autobiography of store title price firstname Benjamin Franklin startelement( store, ) startelement( ) startelement( title ) characterdata( The Auto, ) endelement( title, ) startelement(, ) Erläuterung der Illustration Events sind das Vorkommen der -spezifischen Konstrukte, z. B. Elemente, Text-Bestandteile, Kommentare. <item/> äquivalent zu <item></item>. Datenbankeinsatz: Semistrukturierte Datenmodelle 53 Datenbankeinsatz: Semistrukturierte Datenmodelle 54 Beispiel (1) Zählen der -Elemente. Beispiel-Code: int count = 0; void zaehlen(void *userdata, const char *name, const char **atts) { if (!strcmp(name, )) // String-Vergleich in C++ count++; void donothing( ) { return; Beispiel-Code (Forts.): Beispiel (2) int main() { _SetElementHandler (parser, zaehlen, donothing); if (!_Parse(parser, buf, len, done)) cout << count; Datenbankeinsatz: Semistrukturierte Datenmodelle 55 Datenbankeinsatz: Semistrukturierte Datenmodelle 56
Event-basiertes Vorgehen (SAX) (2) Event-basiertes Vorgehen (SAX) (3) Schnittstelle der Callback-Methoden ist standardisiert, Implementierung ist anwendungsspezifisch. Anwendungsprogrammierer schreibt und läßt nur Callback-Methoden registrieren für Ereignisse, an denen er interessiert ist. Reihenfolge der Events ist fest vorgegeben, wir können nicht z. B. auf Breitensuche umschalten. Datenbankeinsatz: Semistrukturierte Datenmodelle 57 Datenbankeinsatz: Semistrukturierte Datenmodelle 58 SAX Verhalten im Fehlerfall Ausblick Werden Events trotzdem ausgelöst, wenn Dokument fehlerhaft? Ja. Implementierung, die das abfängt, aber recht einfach zu realisieren. auf hinteren Teil des Kapitels. Bis hierhin: Übersicht /Wiederholung von Mechanismen für Anwendungs prozedural. Deklarativer Zugriff Mittel der Wahl; Datenunabhängigkeit. z Datenbankeinsatz: Semistrukturierte Datenmodelle 59 Datenbankeinsatz: Semistrukturierte Datenmodelle 60