XML Datenmodelle Web Informationssysteme Wintersemester 2002/2003 Donald Kossmann Semistrukturierte Datenmodelle Beispiel: OEM (Objekt Exchange Model) Repräsentiere Dokument als annotierten Baum Knoten werden mit Ids, n, Werten annotiert Kanten werden mit Tagnamen annotiert Referenzen (IDREFs) werden mit Kanten repräsentiert Entwickelt 1995, vor XML! Modell sieht keine Ordnung vor! (Wieso?) Modell sieht keinen Mixed Content vor! (Wieso?) Modell kann XMLmäßig erweitert werden Attribute, Kommentare, PIs, Ordnung,... Siehe Lore Projekt in Stanford (Jenifer Widom) complex object OEM Beispielbaum Bib &o1 paper paper book &o12 &o24 &o29 page year http publisher &o43 &25 &96 1997 last firstname firstname lastname first lastname atomic object &243 &206 Serge Abiteboul Victor 122 133 Vianu XML Infoset Ordne zu jedem Information Item Properties zu Information Items ~ Knoten eines OEM Baums Es gibt insgesamt 11 Information Items Document, Element, Attribute,... Es gibt > 10 Properties, base URI, version, namespace,... Properties bestimmen ein InfoItem eindeutig Verschiedene InfoItems haben andere Properties Werte von Properties werden durch Schemavalidierung beeinflusst (Für uns nur Durchgangsstation für Xquery DM.) Beispiel <?xml version = 1.0?> <book price = 69.95 curr = EUR > <>Die wilde Wutz</> <>D.A.K.</> </book> Document InfoItem > Liste von InfoItems InfoItems der PIs, Comments, Wurzelelement Im Beispiel nur InfoItem von [book] Document Element > Element InfoItem Im Beispiel InfoItem von [book] Notation, Unparsed entitities:... Hier leer Base URI: URI des Dokumentes Vorsicht bei streaming data (z.b. SOAP Nachricht) Standalone: leer (ansonsten yes oder no ) Version: im Beispiel 1.0 Encoding scheme: default UTF8 1
Element InfoItem (z.b. [book]) space : falls Elementtype zu NS geh. im Beispiel leer Local name: im Beispiel book Prefix: im Beispiel leer : im Beispiel: [] und [] : im Beispiel: [price] und [curr] space : lokale NS Definitionen Im Beispiel leer Inscope spaces: anwendbare NS Defs,... BaseURI:... : im Beispiel: das Dokument InfoItem Element InfoItem [] Title hat als children ein Char Info Item (Text) (Ansonsten keine Überraschungen) Das Char Info Item hat die folgenden Properties Wert des Textes (Wilde Wutz) in ISO 10646 Code Whitespace handling des Elementes (yes or no) ist im Beispiel [] Attribute InfoItem (z.b. [price]) space, local name, prefix:... Normalized value: Wert nach Normalisierung Im Beispiel 69.95 Attribute : Nur DTD n erlaubt Im Beispiel: PCDATA References: Bei IDREFs, die referenzierten InfoItems Im Beispiel: leer Owner Element: Im Beispiel [book] Xpath + Xquery Datenmodell Erweiterung vom XML InfoSet Formale Grundlage: ordered trees (OEM + Ordnung) Entwickelt für Ergebnisse von Anfragen Anstatt 11 InfoItems 7 Knotentypen Erlaubt Sequenzen Wichtig für Ergebnisse von Anfragen Hat das Konzept eines Fehlers (ERROR) Unterstützt Identität eines Knotens (z.b. für Vergleiche) Ordnung von Knoten unterschiedlicher Dokumente Wesentlich eleganter als InfoSet Voll kompatibel mit XML Schema; eigenes Typsystem Vorsicht!!! Noch kein Standard. Letzter Stand: 8/02 Instanzen des Datenmodells Jede Instanz ist eine Sequence von Items Sequences sind Listen: Notation ( i1 i2... ) Sequences sind immer flachgeklopft ( 0 ( 1 2 ) 3 ) = ( 0 1 2 3 ) Items sind entweder Knoten oder Atomic Values Es gibt 7 Arten von Knoten (siehe später) Atomic Values sind Instanzen eines primitiven (oder abgeleiteten) n: keine Listen! Sequences mit einem Item gleich Item ( item ) = item Erstes Item einer Sequence hat den Index 1. (Nicht 0!) Knoten und Accessors 7 n von Knoten Document, Element, Attribute, space Processing Instruction, Comment, Text (Unexpanded Entity Reference, DTD, Unparsed Entity, Notation InfoItems fehlen) Jeder Knoten hat 11 Accessors (~ Property) Nodekind: z.b. Document : z.b. Book StringValue, typedvalue: siehe später BaseURI,,,, space: wie IS : Instanz des Typsystems UniqueID: siehe später Jeder Knoten hat Constructoren 2
Beispiel <?xml version = 1.0?> <bo:book price = 69.95 lang = DE EN xmlns:bo = http://www.book.com > <>Die wilde Wutz</> <>D.A.K.</> <>N.N.</> </bo:book> Annahme: Schema in www.book.com fordert unqualifizierte Attribute und Subelemente Document Node Nodekind document BaseURI http://www.amazon.com StringValue whitespace dvalue ( [book] [whitespace]) spaces UniqueID (?) Element Node: [book] Element Node: [] Nodekind element Nodekind element http://www.book.com : book BaseURI http://www.amazon.com BaseURI http://www.amazon.com StringValue whitespace StringValue Die wilde Wutz dvalue () dvalue ( Die wilde Wutz ) ( [document] ) ( [book] ) ( [] [1] [2] ) ( [text] ) ( [price] [lang] ) ( ) spaces ( [bo] ) spaces ( ) any oder Book.com:Book (PSV) any oder xsd:string (PSV) UniqueID ( 3 ) UniqueID ( 7 ) Attribute Node: [lang] space Node: [bo] Nodekind attribute Nodekind namespace lang bo BaseURI BaseURI StringValue DE EN StringValue http://www.book.com dvalue ( DE EN ) oder ( DE EN ) (PSV) dvalue ( [book] ) spaces spaces anysimple oder xsd:string* (PSV) UniqueID ( 5 ) UniqueID (?) 3
String Value vs. d Value Daumenregel: String Value entsteht durch Concatenation der String Values der Text Kinder Whitespace steckt in Text Knoten (s. [book]) String Value, > d Value Durch Schemavalidierung!!! Beispiele DE EN, anysimple > ( DE EN ) DE EN, xsd:string* > ( DE EN ) Allerdings kann man vom d Value nicht auf den String Value schließen. Wieso??? Node ID, Equality, Order DM ordnet jedem Knoten eine ID zu ID bestimmt den Knoten eindeutig Vergleiche in Xquery verwenden somit die ID ID für totale Ordnung von Knoten Innerhalb eines Dokumentes: prefix Zwischen Dokumenten: Implementationsabhängig aber konsistent Wenn Knoten k1 von Dokument d1 kleiner als Knoten k2 von Dokument d2, dann sind alle Knoten von Dokument d1 kleiner als alle Knoten von d2 DM in Baumrepräsentation Typsystem 1. document Angelehnt an XML Schema Komplexe n 2. Text (WS) 3. book 4. namespace 6. lang 8.... Simple n any ist die Mutter aller n Inhalt von Elementen: Subtyp von any Inhalt von Attributen: Subtyp von anysimple Simple vs. Atomic 5. price 7. Text (WS) 9. Text Krücke gegen List n Error Fazit War bis August noch eine gültige Instanz des Datenmodells und gültiges itemeiner Sequence ( 1 2 3 ERROR ) = ( ERROR ) Ist jetzt verschwunden...??? OEM: saubere Theorie, idealisiert semistrukt. Nicht mächtig genug für XML In der akademischen Welt geblieben InfoSet: Einfaches Prinzip Nicht ausreichend für Anfragebearbeitung Xpath/Xquery Datenmodell Saubere Theorie aus der OEM Tradition Klares Mapping zum InfoSet (s. Übung) Kein klares Mapping zu DOM (s. Kapitel 5) (Wir halten uns an Xpath/Xquery Datenmodell) 4
Übungsaufgaben Betrachten Sie eine (komplizierte) book Instanz (aus Kapitel 1) und repräsentieren Sie diese in den drei Datenmodellen. Validieren Sie die book Instanz mit einem book Schema (nehmen Sie eine komplizierte Version mit Defaultwerten und spaces) und repräsentieren Sie die validierte Instanz in den drei Datenmodellen. Wie kann man generell das InfoSet auf das Xquery DM abbilden und umgekehrt? Gehen Sie die wichtigsten Properties der folgenden InfoItems durch: Document, Element, Attribute. 5