Knowledge Management im Bildungsbereich KMB: Teil 6 KMB Knowledge Management im Bildungsbereich Teil 6 Christian Cenker CSLearn Center for Computer Science Didactics and Learning Research Fachdidaktik‐ und Lernforschungszentrum Informatik http://cewebs.cs.univie.ac.at/mid‐kmb/_vo KMB – XML und Information • XML = Strukturierte Dokumente • XML = "Interpretierbare" Dokumente XML Dokumente – Text‐zentriert • von Menschen lesbarer Inhalt (XHTML, HTML5) • wenig strukturiert – Daten‐zentriert • stark strukturiert Ronald Bourret, XML and Databases, 1999‐2005 http://www.rpbourret.com/xml/XMLAndDatabases.htm#datavdocs Last visited: 2010/05/01 http://cewebs.cs.univie.ac.at/mid‐kmb/_vo 1 Knowledge Management im Bildungsbereich KMB: Teil 6 XML – Datenbanken Abfrage Transformation Darstellung http://dmsblog.burtongroup.com/data_management_strategie/WindowsLiveWriter/XQuery2.jpg XML – Datenbanken Übergang fließend XML – Dokument XML – Datenbank Dokumenten – Schema Datenbank – Schema Transformationsverluste Relationale Datenbank: Tabellenorientiert XML – Datenbank: Objektorientiert, "wilde" Struktur http://cewebs.cs.univie.ac.at/mid‐kmb/_vo 2 Knowledge Management im Bildungsbereich KMB: Teil 6 XML – Datenbanken • "Keine" Datentypen, alles ist Text (Encoding) – Datenintegrität? – Dokument Schema (DTD etc.) vorhanden? – Applikation errät Datentyp – BenutzerIn gibt Datentyp an • Kein Index • Keine binäre Daten – Base64 Mime Encoding – Hexadezimal Encoding – Externe, nicht geparste Entity (externe Datei) • "Missing Values" oder "Null" Daten – XML: Mehr Spezifikationsmöglichkeiten • Processing Instructions, Comments – diese können überall vorkommen SQL basierte Abfrage Relationale Datenbank XML Beispiel von http://www.rpbourret.com/xml/XMLAndDatabases.htm http://cewebs.cs.univie.ac.at/mid‐kmb/_vo 3 Knowledge Management im Bildungsbereich KMB: Teil 6 SQL Abfrage in XML <?xml version="1.0"?> <FlightInfo> <Introduction>The following flights are available:</Introduction> <SelectStmt>SELECT Airline, FltNumber,Depart, Arrive FROM Flights</SelectStmt> <Flight> <Airline>$Airline</Airline> <FltNumber>$FltNumber</FltNumber> <Depart>$Depart</Depart> <Arrive>$Arrive</Arrive> </Flight> <Conclusion>We hope one of these meets your needs</Conclusion> <Flights> </FlightInfo> <Flight> <Airline>ACME</Airline> <FltNumber>123</FltNumber> <Depart>Dec 12, 1998 13:43</Depart> <Arrive>Dec 13, 1998 01:21</Arrive> </Flight> ... </Flights> Beispiel von http://www.rpbourret.com/xml/XMLAndDatabases.htm Umwandlung: XML Relational Komplexes Element (Haupt‐)Tabelle mit primärem Schlüssel • Element mit gemischtem Inhalt Tabelle mit Link über primären Schlüssel der Haupttabelle • Attribute und einzeln vorkommende Elemente Datenspalte + Datentyp (vordefiniert, erraten,…) • Optionale Elemente Datenspalte mit NULL/Missing Value erlaubt • Attribute mit Aufzählungen oder mehrfache Elemente Eigene Tabelle mit Link über Schlüssel des Elters • Komplexe Kind‐Elemente Verkettung über primären Key des Elters Beispiel von http://www.rpbourret.com/xml/XMLAndDatabases.htm http://cewebs.cs.univie.ac.at/mid‐kmb/_vo 4 Knowledge Management im Bildungsbereich KMB: Teil 6 Umwandlung: Relational XML Tabelle ELEMENT • Primäre Schlüssel Attribute oder PCDATA Elemente • Datenspalten Attribute oder PCDATA Elemente • Fremdschlüssel rekursiv: Elemente Probleme • Namenskollisionen • Datentypen, Längen • XML Relational XML erzeugt Verschiedenes <Customer> <Name>ABC Industries</Name> <Address> <Street>123 Main St.</Street> <City>Fooville</City> <State>CA</State> <Country>USA</Country> <PostCode>95041</PostCode> </Address> </Customer> Beispiel von http://www.rpbourret.com/xml/XMLAndDatabases.htm SQL – Relationale Abfragesprache • Flache Datenstruktur Tabelle • Reguläre und homogene Daten – Jede Zeile hat gleich viele Spalten – Jede Spalte hat einen Eintrag (NULL erlaubt) • Ergebnisse von SQL sind wieder "einfach" • Zeilen sind nicht geordnet – Ordnung durch Inhalt In XML ist alles ganz anders! http://cewebs.cs.univie.ac.at/mid‐kmb/_vo 5 Knowledge Management im Bildungsbereich KMB: Teil 6 Xquery – XML Abfragesprache http://www.w3.org/TR/xquery/ • Zusammensetzbarkeit (Compositionality) – – Funktionale Sprache Alles ist eine Expression (Pfad, Vergleiche, Konsturktoren, Ergebnisse etc.) • Abgeschlossenheit (Closure ) bez. des Query‐Datenmodells • XML Schema konform • Xpath kompatibel • • Einfachheit (Simplicity) Vollständigkeit (Completeness) • Generell anwendbar (Generality) • Conciseness • Statische Analyse – – – – – – – Jede Abfrage erzeugt einen Ausdruck innerhalb des Modells Typen, Vererbung, Validierung ( Xquery als Schema Sprache) Typen, Kompromisse wegen XML Schema Jedes XML Dokument soll aus anderen erzeugt werden können Anwendbar auf jedes XML Dokument Anwendung von Operatoren (+,=,…) auf alle Elemente/Elementtypen Analyse der Abfrage vor Auswertung der Abfrage, um Fehler abzufangen Don Chamberlin : The need for an XML Query Language, http://www.ibm.com/developerworks/xml/library/x‐xqbook.html In: XQuery from the Experts, Howard Katz (ed). Pearson Education. 2004. ISBN 0321180607. XML – Xquery und XPath XQuery is to XML what SQL is to database tables. XQuery was designed to query XML data. Xquery Abfragesprache für XML Daten XLink Hyperlinks aus XML Dokumenten heraus XPointer Hyperlinks in XML Dokumente hinein XSLT Transformationen von XSL XPath Einfache Navigation in XML Dokumenten http://w3schools.com: Einfache, freie Online‐Kurse http://cewebs.cs.univie.ac.at/mid‐kmb/_vo 6 Knowledge Management im Bildungsbereich KMB: Teil 6 Kurse auf http://w3schools.com XQuery – Beispiel Document node Element node Attribute node Atomic value <?xml version="1.0" encoding="ISO‐8859‐1"?> <bookstore> <book category="COOKING"> <title lang="en">Everyday Italian</title> <author>Giada De Laurentiis</author> <year>2005</year> <price>30.00</price> </book> <book category="CHILDREN"> <title lang="en">Harry Potter</title> <author>J K. Rowling</author> <year>2005</year> <price>29.99</price> </book> <book category="WEB"> <title lang="en">XQuery Kick Start</title> <author>James McGovern</author> <author>Per Bothner</author> <author>Kurt Cagle</author> <author>James Linn</author> <author>Vaidyanathan Nagarajan</author> <year>2003</year> <price>49.99</price> </book> <book category="WEB"> <title lang="en">Learning XML</title> <author>Erik T. Ray</author> <year>2003</year> <price>39.95</price> </book> </bookstore> http://cewebs.cs.univie.ac.at/mid‐kmb/_vo http://w3schools.com for $x in doc("books.xml")/bookstore/book where $x/price>30 order by $x/title return $x/title doc("books.xml") doc("books.xml")/bookstore/book doc("books.xml")/bookstore/book where $x/price>30 order by $x/title return $x/title Function Path FLOWR Expressions <title lang="en">Learning XML</title> <title lang="en">XQuery Kick Start</title> doc("books.xml")/bookstore/book[price>30] Predicate doc("books.xml")/bookstore/book[price>30]/title <title lang="en">XQuery Kick Start</title> <title lang="en">Learning XML</title> 7 Knowledge Management im Bildungsbereich KMB: Teil 6 XQuery – HTML Ausgabe http://w3schools.com <ul> { for $x in doc("books.xml")/bookstore/book/title order by $x <ul> return <li>{$x}</li> <li><title lang="en">Everyday Italian</title></li> } <li><title lang="en">Harry Potter</title></li> </ul> <li><title lang="en">Learning XML</title></li> <li><title lang="en">XQuery Kick Start</title></li> </ul> <ul> { for $x in doc("books.xml")/bookstore/book/title order by $x <ul> return <li>{data($x)}</li> <li>Everyday Italian</li> } <li>Harry Potter</li> </ul> <li>Learning XML</li> <li>XQuery Kick Start</li> </ul> XQuery – QuickRef XML Knoten‐Konstruktoren document { expr } element name { expr } element { expr } expr attribute name { expr } attribute { expr } expr text { expr } comment { expr } processing‐instruction { expr } expr namespace name { expr } Xquery Expressions (FLOWR) for $var at $pos in expr let $var := expr order by expr ascending, descending, empty, least, empty, greatest where expr return expr Namespaces (eingebaut) fn http://www.w3.org/2003/11/xpath‐functions xdt http://www.w3.org/2003/11/xpath‐datatypes xml http://www.w3.org/XML/1998/namespace xs http://www.w3.org/2001/XMLSchema xsi http://www.w3.org/2001/XMLSchema‐instance von http://xq.aromatic.org/quickref.xqy http://cewebs.cs.univie.ac.at/mid‐kmb/_vo 8 Knowledge Management im Bildungsbereich KMB: Teil 6 XQuery – QuickRef (Prolog) xquery version "1.0"; declare xmlspace strip|preserve; declare default collation "uri"; declare base‐uri "uri"; declare namespace prefix = "uri"; declare default element namespace "uri"; declare default function namespace "uri"; declare variable $name { expr }; declare variable $name as type { expr }; declare variable $name external; declare variable $name as type external; module prefix = "uri"; import module "uri"; import module "uri" at "hint"; import module namespace prefix = "uri"; import module namespace prefix = "uri" at "hint"; import schema "uri"; import schema "uri" at "hint"; import schema namespace prefix "uri"; import schema namespace prefix "uri" at "hint"; import schema default element namespace "uri"; import schema default element namespace "uri" at "hint"; declare validation lax|skip|strict; von http://xq.aromatic.org/quickref.xqy XQuery und XPath Ahnengalerie WURZEL Großelter Großelter Elter Elter Kind Kind Enkel Elter Elter Elter Kind Kind Kind Kind Enkel Enkel Enkel Enkel Ancestor vorher Parent jetzt Self nachher Sibling Child Descendant http://cewebs.cs.univie.ac.at/mid‐kmb/_vo Children 9 Knowledge Management im Bildungsbereich KMB: Teil 6 XPath – Quick and dirty http://www.w3.org/TR/xpath • Adressiert Teile eines XML Dokuments • Operiert auf der logischen Struktur des XML Dokuments • Kompakte, Nicht‐XML Syntax – Kann auch in URIs und XML Attributen verwendet werden • Pfadähnliche Notation – hierarchische Struktur eines XML Dokuments • Modelliert ein XML Dokument als einen Baum aus Knoten – Elementknoten, Attributknoten, Textknoten, Kommentarknoten etc. XPath – Quick and dirty http://www.w3.org/TR/xpath Achsen In XPath definierte Achsen self ancestor ancestor‐or‐self child descendant descendant‐or‐self following following‐sibling parent preceding preceding‐sibling attribute namespace http://cewebs.cs.univie.ac.at/mid‐kmb/_vo aktueller Knoten = Kontextknoten Vorfahren Vorfahren oder aktueller Knoten Kinder Nachfahren Nachfahren oder aktueller Knoten folgende Knoten mit Kindern folgende Geschwister Elter vorangehende Knoten vorangehende Geschwister Attribute des Kontextknotens Namensraum des Kontextknotens 10 Knowledge Management im Bildungsbereich KMB: Teil 6 XPath – Quick and dirty http://www.w3.org/TR/xpath Referenzknoten Achsen: Auswahl der Knoten self::node() parent::node() child::* following::* following‐sibling::* ancestor::* ancestor‐or‐self::* descendant::* descendant‐or‐self::* preceding::* preceding‐sibling::* Michael Derntl, Webtechnologien, Foliensatz 2009 XPath – Quick and dirty Auswahl der Knoten (Kurzformen) Expression nodename / // . .. @ Beschreibung alle Kinder des Knoten alle Knoten ab der Wurzel alle Knoten ab dem Kontextknoten (inklusive) aktueller Knoten (=Kontextknoten) Elter des aktuellen Knoten Attribute Beispiele bookstore /bookstore bookstore/book //book bookstore//book //@lang http://cewebs.cs.univie.ac.at/mid‐kmb/_vo alle Kinder des Elements 2 bookstore die Wurzel bookstore / am Anfang heißt absoluter Pfad alle Elemente book, die Kinder von bookstore sind alle Elemente book alle Elemente book, die Nachkommen von bookstore sind alle Attribute mit Namen lang 11 Knowledge Management im Bildungsbereich KMB: Teil 6 XPath – Quick and dirty Achsen Auswahl der Knoten Expression //B/ancestor::C Beschreibung alle Vorfahren C von allen B //C/descendant::*/D alle Kinder D von Nachfahren von allen C /A//*/. /child::A/descendant‐or‐self::node()/child::*/self::node() //A[@x='4']/.. /descendant‐or‐self::node()/child::A[attribute::x='4']/parent::node() //D/B/following‐sibling::C/attribute::x alle Attribute x von einem C, das ein folgendes Geschwister von einem B ist, dieses B ist Kind irgendeines D ist /A/*[4]/preceding‐sibling::*[1] das erste vorangehende Geschwister des vierten Kindes des Wurzelelements Kurzformen /A //A . .. @a /child::A /descendant‐or‐self::node()/child::A self::node() parent::node() attribute::a Michael Derntl, Webtechnologien, Foliensatz 2009 XPath – Quick and dirty Auswahl der Knoten – Wildcards Expression * @* node() Beschreibung jeder Element‐Knoten jeder Attribute‐Koten jeder Knoten Beispiele /bookstore/* //* //title[@*] alle Kind‐Knoten des Elements bookstore alle Elements des Dokuments alle Elemente title, die ein Attribut haben Auswahl mehrerer Pfade //book/title | //book/price alle Elemente title UND price von allen E. book //title | //price alle Ellemente title UND price im Dokument /bookstore/book/title | //price alle Elemente title des Elementes /bookstore/book UND alle Elemente price im Dokument http://cewebs.cs.univie.ac.at/mid‐kmb/_vo 12 Knowledge Management im Bildungsbereich KMB: Teil 6 XPath – Quick and dirty Prädikate /bookstore/book[1] das erste Element book, das Kind von bookstore ist Vorsicht: [0] ↔ [1] Problematik (W3C‐Standard: [1]) /bookstore/book[last()] das letzte Element book, das Kind von bookstore ist /bookstore/book[last()‐1] das letzte Element book, das Kind von bookstore ist /bookstore/book[position()<3] die ersten beiden Elemente book, Kinder von bookstore //title[@lang] alle Elemente title, die ein Attribut namens lang besitzen //title[@lang='eng'] alle Elemente title mit Attrribut namens lang und Wert 'eng' /bookstore/book[price>35.00] alle Elemente book von bookstore mit Element price mit Wert größer als 35.00 /bookstore/book[price>35.00]/title alle Elemente title von Elementen book von bookstore, die ein Element price mit einem Wert größer als 35.00 haben XPath – Quick and dirty Operatoren | entweder oder //book | //cd alle book und cd Elemente + ‐ * div mod Addition Subtraktion Multiplication Division Modulo 6 + 4 6 ‐ 4 6 * 4 8 div 4 17 mod 3 10 2 24 2 2 = != < <= > >= ist gleich ungleich kleiner als kleiner gleich größer als größer gleich price=9.80 price!=9.80 price<9.80 price<=9.80 price>9.80 price>=9.80 true wenn price=9.80 true wenn price nicht 9.80 ist true wenn price kleiner als 9.80 ist true wenn price ≤ 9.80 true wenn price größer als 9.80 true wenn price ≥ 9.80 or and not logisches Oder logisches Und logisches Nicht price=9.8 or price=9.7 true wenn … price>9.0 and price<9.9 true wenn … not(price>9.0) true wenn … http://cewebs.cs.univie.ac.at/mid‐kmb/_vo 13 Knowledge Management im Bildungsbereich KMB: Teil 6 XPath – Quick and dirty Funktionen für XPath, XQuery und XSLT last() : number position() : number count(node‐set) : number index‐of((item,item,...),searchitem) : number id(object) : node‐set name(node‐set) : string oder name() : string boolean(expression) : boolean not(boolean) : boolean string(node‐set?) : string concat(string, string+) : string starts‐with(string, string) : boolean contains(string, string) : boolean substring(string, number, number) : string http://www.w3schools.com/xpath/xpath_functions.asp Quellen – Xquery und XPath Allgemeines • Ronald Bourret: XML and Databases, http://www.rpbourret.com/xml/XMLAndDatabases.htm, Copyright 1999‐2005, Data versus Documents, http://www.rpbourret.com/xml/XMLAndDatabases.htm#datavdocs • Ronald Bourret: Mapping DTDs to Databases, http://www.rpbourret.com/xml/DTDToDatabase.htm, 2000‐2005 • Ronald Bourret: XML Database Products, http://www.rpbourret.com/xml/XMLDatabaseProds.htm, 2000‐2010 • Don Chamberlin :The need for an XML Query Language, http://www.ibm.com/developerworks/xml/library/x‐xqbook.html In: XQuery from the Experts, Howard Katz (ed) Don Chamberlin, Denise Draper, Mary Fernandez, Michael Kay, Jonathan Robie, Michael Rys, Jerome Simeon, Jim Tivy, and Philip Wadler. ISBN 0321180607, 2004, Pearson Education. • Dave Pawson: XQuery 1.0: An XML Query Language, http://www.dpawson.co.uk/xquery/xquery.html, 2009 http://www.dpawson.co.uk/xquery/: Xquery Wikibook: http://en.wikibooks.org/wiki/XQuery Xquery in the browser: http://www.xqib.org/ Xquery development Tools: http://www.xqdt.org/ • Michael Kay: Using XSLT and XQuery for life‐size applications, http://xtech06.usefulinc.com/schedule/paper/13 Conference: XTech 2006: “Building Web 2.0” — 16‐19 May 2006, Amsterdam, The Netherlands • Michael Kay: Schema‐Aware Queries and Stylesheets, http://www.stylusstudio.com/schema_aware.html, 2006 • Joris Graaumans: Usability of XML Query Languages, Ph.D Thesis, University of Utrecht, 2005. ISBN 90‐393‐4065‐X • XML Version 1.1 Grundlagen, Uni Hannover (Hrsg), http://www.rrzn.uni‐hannover.de/buch.html?&no_cache=1&titel=xml, 2005 • RRZN Skripten: http://www.rrzn.uni‐hannover.de/buecher.html W3C • XQuery 1.0 and XPath 2.0 Functions and Operators, http://www.w3.org/TR/xpath‐functions/, W3C Recommendation 23 January 2007 • XQuery 1.0 and XPath 2.0 Data Model (XDM), http://www.w3.org/TR/xpath‐datamodel/, W3C Recommendation 23 January 2007 • XML Path Language (XPath) 2.0, http://www.w3.org/TR/xpath20/, W3C Recommendation 23 January 2007 • Amaya Browser: http://www.w3.org/Amaya/, 11.3.1 is now released (9 December 2009). It supports HTML 4.01, XHTML 1.0, XHTML Basic, XHTML 1.1, HTTP 1.1, MathML 2.0, many CSS 2 features, and SVG. W3‐Schools • Gratis Online‐Schulungen, http://w3schools.com/ http://cewebs.cs.univie.ac.at/mid‐kmb/_vo 14 Knowledge Management im Bildungsbereich KMB: Teil 6 XLink und XPointer Links in einer XML‐Datei, die aus dieser heraus zeigen: <?xml version="1.0"?> <homepages xmlns:xlink="http://www.w3.org/1999/xlink"> <homepage xlink:type="simple" xlink:href=http://www.w3schools.com> W3Schools</homepage> <homepage xlink:type="simple" xlink:href=http://www.w3.org>W3C</homepage> </homepages> Pointer in die Datei cdlist.xml, auf das 5. Element mit der ID="rock": href=http://www.example.com/cdlist.xml#id('rock').child(5,item) http://www.w3.org/TR/xlink/ XML Linking Language (XLink) Version 1.0 W3C Recommendation 27 June 2001 http://cewebs.cs.univie.ac.at/mid‐kmb/_vo 15