XML Extensible Markup Language Datenmodell Schemabeschreibung Anfragesprachen 1
XML: Extensible Markup Language Datenmodell Schemabeschreibung Anfragesprachen 1
HTML-Datenmodell <UL> <LI> Curie <LI> Sokrates </UL> <LI> Mäeutik <LI> Bioethik </UL> = Kein Schema = Nur Insider können die beiden Listen interpretieren =Oben: Professoren =Unten: Vorlesungen = Wenig geeignet als Datenaustauschformat =Man muß irgendwie dann auch mitschicken, was damit gemeint ist = Verarbeitung von HTM-Daten =„Screen-scraping“ =Wrapper © A. Kemper / A. Eickler 2
Relationales Datenmodell Pers. Nr 2125 2126 2127 2133 2134 2136 2137 Professoren Name Rang Raum Sokrates C 4 226 Russel C 4 232 Kopernikus C 3 310 Popper C 3 52 Augustinus C 3 309 Curie C 4 36 Kant C 4 7 Vorl. Nr Vorlesungen Titel SWS 5001 Grundzüge 5041 Ethik 5043 Erkenntnistheorie 5049 Mäeutik 4052 Logik 5052 Wissenschaftstheorie 5216 Bioethik 5259 Der Wiener Kreis 5022 Glaube und Wissen 4630 Die 3 Kritiken 4 4 3 2 2 2 4 Gelesen Von 2137 2125 2126 2133 2134 2137 = Schema ist vorgegeben und man kann nur schema-konforme Daten einfügen (Problem Ausnahmen null-Werte) = Bedeutung der Daten wird durch das Schema definiert = Kein Datenaustauschformat © A. Kemper / A. Eickler 3
XML-Datenmodell = Liegt irgendwo dazwischen =HTML =Schema-los =Beliebige Daten, solange Syntax stimmt =Relationen =Schema =Keine Abweichungen = Semi-strukturierte Daten =Teilweise schematisch =Aber Ausnahmen =Wenn Schema, dann muss es eingehalten werden © A. Kemper / A. Eickler 4
Unsere Beispiel-Daten in XML. . . <Professoren> <Professor. In>Curie</Professor. In> <Professor. In>Sokrates</Professor. In> Semantische Tags (Marken): </Professoren> Geben die Bedeutung der Elemente an, immer paarweise <. . . > Element </. . . > <Vorlesungen> <Vorlesung>Mäeutik</Vorlesung> <Vorlesung>Bioethik</Vorlesung> </Vorlesungen> © A. Kemper / A. Eickler 5
XML-Daten mit Schema (DTD) <? xml version="1. 0" encoding='ISO-8859 -1'? > <!-- obige Zeile ist der Prolog, diese Zeile ist ein Kommentar --> <!-- Schema als DTD --> <!DOCTYPE Buch[ <!ELEMENT Buch (Titel, Autor*, Verlag)> <!ATTLIST Buch Jahr CDATA #REQUIRED> <!ELEMENT Titel (#PCDATA)> <!ELEMENT Autor (#PCDATA)> <!ELEMENT Verlag (#PCDATA)> ]> <!-- Wurzelelement--> <Buch Jahr="2001"> <Titel>Datenbanksysteme: Eine Einführung</Titel> <Autor>Alfons Kemper</Autor> <Autor>Andre Eickler</Autor> <Verlag>Oldenbourg Verlag</Verlag> © A. Kemper / A. Eickler </Buch> 6
Die hierarchische Struktur im Bild © A. Kemper / A. Eickler 7
© A. Kemper / A. Eickler 8
<? xml version="1. 0" encoding='ISO-8859 -1'? > <Universität Univ. Name="Virtuelle Universität der Großen Denker"> <Uni. Leitung> <Rektor>Prof. Sokrates</Rektor> <Kanzler>Dr. Erhard</Kanzler> </Uni. Leitung> <Fakultäten> <Fakultät> <Fak. Name>Theologie</Fak. Name> <Professor. In Pers. Nr="2134"> <Name>Augustinus</Name> <Rang>C 3</Rang> <Raum>309</Raum> <Vorlesungen> <Vorlesung Vorl. Nr="5022"> <Titel>Glaube und Wissen</Titel> <SWS>2</SWS> </Vorlesungen> </Professor. In> XMLDokument der Universität © A. Kemper / A. Eickler 9
<Fakultät> <Fak. Name>Physik</Fak. Name> <Professor. In Pers. Nr="2136"> <Name>Curie</Name> <Rang>C 4</Rang> <Raum>36</Raum> </Professor. In> <Professor. In Pers. Nr="2127"> <Name>Kopernikus</Name> <Rang>C 3</Rang> <Raum>310</Raum> </Professor. In> </Fakultät> <Fak. Name>Philosophie</Fak. Name>. . . </Fakultät> </Fakultäten> © A. Kemper / A. Eickler Im Browser 10
XML-Schema: mächtiger als DTDs <? xml version="1. 0" encoding='ISO-8859 -1'? > <xsd: schema xmlns: xsd="http: //www. w 3. org/2000/10/XMLSchema"> <xsd: element name="Universität" type="Uni. Info. Typ"/> <xsd: complex. Type name="Uni. Info. Typ"> <xsd: sequence> <xsd: element name="Uni. Leitung"> <xsd: complex. Type> <xsd: sequence> <xsd: element name="Rektor" type="xsd: string"/> <xsd: element name="Kanzler" type="xsd: string"/> </xsd: sequence> </xsd: complex. Type> </xsd: element> <xsd: element name="Fakultäten" type="Fakultäten. Typ min. Occurs=. . "/> </xsd: sequence> <xsd: attribute name="Univ. Name" type="xsd: string"/> </xsd: complex. Type> © A. Kemper / A. Eickler 11
<xsd: complex. Type name="Fakultäten. Typ"> <xsd: sequence> <xsd: element name="Fak. Name" type="xsd: string"/> <xsd: element name="Professor. In" min. Occurs="0" max. Occurs="unbounded"> <xsd: complex. Type> <xsd: sequence> <xsd: element name="Name" type="xsd: string"/> <xsd: element name="Rang" type="xsd: string"/> <xsd: element name="Raum" type="xsd: integer"/> <xsd: element name="Vorlesungen" min. Occurs="0" type="Vorl. Info"/> </xsd: sequence> <xsd: attribute name="Pers. Nr" type="xsd: ID"/> </xsd: complex. Type> </xsd: element> </xsd: sequence> </xsd: complex. Type> © A. Kemper / A. Eickler 12
<xsd: complex. Type name="Vorl. Info"> <xsd: sequence> <xsd: element name="Vorlesung" min. Occurs="1" max. Occurs="unbounded"> <xsd: complex. Type> <xsd: sequence> <xsd: element name="Titel" type="xsd: string"/> <xsd: element name="SWS" type="xsd: integer"/> </xsd: sequence> <xsd: attribute name="Vorl. Nr" type="xsd: ID"/> <xsd: attribute name="Voraussetzungen" type="xsd: IDREFS"/> </xsd: complex. Type> </xsd: element> </xsd: sequence> </xsd: complex. Type> </xsd: schema> © A. Kemper / A. Eickler 13
Verweise in XML-Dokumenten = XML ist „super“ für die Modellierung von Hierarchien = Entsprechen den geschachtelten Elementen = Genau das hatten wir in dem Uni-Beispiel Uni Fakultäten Professoren Vorlesungen © A. Kemper / A. Eickler 14
© A. Kemper / A. Eickler 15
Modellierung des Stammbaums = Kinder haben zwei Elternteile =Also kann man ein Kind nicht mehr als Sub-Element einer Person modellieren =Wem soll man es zuordnen (Vater oder Mutter) =Also muss man mit Verweisen (IDREF und IDREFS) „arbeiten“ © A. Kemper / A. Eickler 16
Graphische Darstellung des XMLDokuments © A. Kemper / A. Eickler 17
Familie. xml <!DOCTYPE Stammbaum [ <!ELEMENT Stammbaum (Person*)> <!ELEMENT Person (Name)> <!ELEMENT Name (#PCDATA)> <!ATTLIST Person id ID #REQUIRED Mutter IDREF #IMPLIED Vater IDREF #IMPLIED Kinder IDREFS #IMPLIED> ]> <Stammbaum> <Person id="a" Kinder="k ab"> <Name>Adam</Name> </Person> <Person id="e" Kinder="k ab"> <Name>Eva</Name> </Person> <Person id="k" Mutter="e" Vater="a"> <Name>Kain</Name> </Person> <Person id="ab" Mutter="e" Vater="a"> <Name>Abel</Name> </Person> © A. Kemper / A. Eickler </Stammbaum> 18
XML-Anfragesprache XQuery = Basiert auf Xpath, einer Sprache für Pfadausdrücke © A. Kemper / A. Eickler 19
Beispiel-Pfadausdrücke document("uni. xml")/Fakultäten/Fakultät[Fak. Name="Physik"] //Vorlesung document("uni. xml")/Fakultäten/Fakultät[2]//Vorlesung document("uni. xml")/Fakultäten/Fakultät[Fak. Name="Physik"]/ Professor. In/Vorlesungen/Vorlesung document("Stammbaum. xml")/Person[Name="Kain"] /@Vater->/Name document("uni. xml")//Vorlesung[Titel="Mäeutik"]/ @Voraussetzungen->/Titel 20 © A. Kemper / A. Eickler
© A. Kemper / A. Eickler 21
XML-Beispielanfrage <Vorlesungs. Verzeichnis> FOR $v IN document("uni. xml")//Vorlesung RETURN $v </Vorlesungs. Verzeichnis> <Vorlesung Vorl. Nr="5022"> <Titel>Glaube und Wissen</Titel> <SWS>2</SWS> </Vorlesung>. . . </Vorlesungs. Verzeichnis> © A. Kemper / A. Eickler 22
XML-Beispielanfrage <Vorlesungs. Verzeichnis> FOR $v IN document("uni. xml")//Vorlesung[SWS="4"] RETURN $v </Vorlesungs. Verzeichnis> <Vorlesungs. Verzeichnis> FOR $v IN document("uni. xml")//Vorlesung WHERE $v/SWS = "4" RETURN $v </Vorlesungs. Verzeichnis> © A. Kemper / A. Eickler 23
XML-Beispielanfrage <Vorlesungs. Verzeichnis. Nach. Fakultät> FOR $f in document("uni. xml")/Fakultäten/Fakultät RETURN <Fakultät> <Fakultäts. Name>$f/Fak. Name</Fakultäts. Name> FOR $v in $f/Professor. In/Vorlesungen/Vorlesung RETURN $v </Fakultät> </Vorlesungs. Verzeichnis. Nach. Fakultät> © A. Kemper / A. Eickler 24
XML-Beispielanfrage <Pofessoren. Stammbaum> FOR $p in document("uni. xml")//Professor. In, $k in document("Stammbaum. xml")/Person WHERE $p/Name = $k/Name RETURN <Prof. Mutter. Vater> <Prof. Name>$p/Name</Prof. Name> <Mutter. Name>$k/@Mutter->/Name</Mutter. Name> <Vater. Name>$k/@Vater->/Name</Vater. Name> </Prof. Mutter. Vater> </Pofessoren. Stammbaum> © A. Kemper / A. Eickler 25
XML-Beispielanfrage <Gefährdete. Personen> FOR $p in document("Stammbaum. xml")/Person[Name="Kain"] $g in document("Stammbaum. xml")/Person WHERE $p/@Vater->/@id = $g/@Vater->/@id AND $p/@Mutter->/@id = $g/@Mutter->/@id RETURN <Name>$g/Name</Name> </Gefährdete. Personen> <Name>Abel</Name> </Gefährdete. Personen> © A. Kemper / A. Eickler 26
XML-Beispielanfrage <Professoren> FOR $p in document("uni. xml")//Professor. In LET $l : = sum($p/Vorlesungen/Vorlesung/SWS) WHERE $l > 0 RETURN <Professor. In> <Prof. Name>$p/Name</Prof. Name> <Lehrbelastung>$l</Lehrbelastung> </Professor. In> SORTBY(Lehrbelastung DESCENDING) </Professoren> © A. Kemper / A. Eickler 27
XML-Beispielanfrage <Professoren> FOR $p in document("uni. xml")//Professor. In LET $v : = $p/Vorlesungen/Vorlesung WHERE count($v) > 1 RETURN <Professor. In> <Prof. Name>$p/Name</Prof. Name> <Lehrbelastung>sum($v/SWS)</Lehrbelastung> </Professor. In> SORTBY(Lehrbelastung DESCENDING) </Professoren> © A. Kemper / A. Eickler 28
XML-Beispielanfrage <Vorlesungs. Voraussetzungen. Verzeichnis> FOR $v in document("uni. xml")//Vorlesung RETURN <Vorlesung> <Nachfolger. Titel>$v/Titel</Nachfolger. Titel> <Voraussetzungen> FOR $e in $v/@Voraussetzungen-> RETURN <Vorgänger. Titel>$e/Titel</Vorgänger. Titel> </Voraussetzungen> </Vorlesungs. Voraussetzungen. Verzeichnis> © A. Kemper / A. Eickler 29
Übungen =Siehe auf Ilias © A. Kemper / A. Eickler 30
- Slides: 30