Spezielle Kapitel aus Informationssysteme: XML und Datenbanken (1KV) 365.011, WS 2008/2009 Univ.-Doz. Dr. Siegfried REICH Salzburg Research Forschungsgesellschaft m.b.H. Jakob Haringer Straße 5/III | 5020 Salzburg, Austria T +43.662.2288-211 | F +43.662.2288-222 | M [email protected] http://www.salzburgresearch.at/ Grundmotivation für diese LVA 1/4 | | | Austausch und Verarbeitung von XML-Daten ist in auf allen Ebenen von Web-Anwendungen essentiell. Dabei kommen unterschiedlichste Technologien und Konzepte zum Einsatz: Web-Services/SOAP als Protokoll bzw. Schnittstelle, AJAX um auch bei Web-Anwendungen Desktop-artiges Ansprechverhalten zu haben, REST als Architekturstil der Umsetzung, und natürlich Datenbanken zur Speicherung, Abfrage, usw. Die Lehrveranstaltung setzt den Schwerpunkt auf die Datenhaltung in (nativen) XML Datenbanken. Ziel der Lehrveranstaltung ist es, | | die technischen Konzepte und gestalterischen Möglichkeiten von XML für Datenbanken darzustellen. In Abstimmung mit anderen Lehrveranstaltungen liegt der Schwerpunkt liegt dabei auf der Datenhaltungsschicht insbesondere von nativen XMLDBMS. 2 Grundmotivation für diese LVA 2/4 | | Content Management: Inhalte werden zunehmend "bunter", d.h., streng typisierte, strukturierte Daten werden verstärkt mit unstrukturierten (oder nicht explizit strukturierten) Unternehmensdaten vermengt. Man spricht dabei auch von Enterprise-Content-Management (in Analogie zu Enterprise Resource Planning). Systeme (DBMS genauso wie CMS) stehen daher vermehrt vor der Frage, die Verarbeitung von unterschiedlichsten Formen von "Content" zu unterstützen. 3 Grundmotivation für diese LVA 3/4 | Was zeichnet "Content" aus? [NüMa08] | | | | | | | | | Oft hierarchische Struktur (z.B. im Unterschied zu relationalen Strukturen) Strukturiert vs. unstrukturiert ("Datensatz" vs. "Fließtext mit Markup") Grobgranular vs. feingranular (Detaillierungsgrad der Modellierung) Zugriffsrechte Versionierung Worflow, d.h., Content wird verarbeitet (Locking, Abfolge von Verarbeitungsschritten, usw.) Präsentation, wobei eine strikte Trennung zwischen Inhalten und Layout oft nicht sinnvoll ist (z.B. <BOLD> als Betonung in einem Blog oder Aspekte der Dramaturgie z.B. in zeitabhängigen Medien) Identität via URIs Content-Anwendungen (Web-CMS, Digital Asset ManagementSysteme, Blogs, WIKIs, usw.) müssen dem Rechnung tragen. 4 Grundmotivation für diese LVA 4/4 | | | Java Content Repository (JCR) beispielsweise ist ein Standard, der eine abstrakte Schnittstelle zur Verarbeitung von Content definiert. XML ist ein etabliertes Format zur Beschreibung von Content in vielerlei Hinsicht, z.B. bezogen auf die Inhalte, aber auch auf die Verarbeitung, usw. Diese Lehrveranstaltung befasst sich mit XML als Form der Repräsentation von Content und wie sie mit DBMS verarbeitet werden kann. 5 XML und Datenbanken vs. Datenbanken und XML | XML und Datenbanken | | | XML erlaubt auch semi-strukturierte Daten (also solche mit unregelmäßiger Struktur); DBMS sind etablierte Systeme zum Speichern, Abfragen, etc. großer Datenmengen. Welche Speicherungstechniken existieren für XML Dokumente? Welche Indizierungsmechanismen sind geeignet? Wie können XML Dokumente in Datenbanken abgebildet werden? Datenbanken und XML | | "Klassische" (relationale) DBMS werden erweitert, um mit den neuen Anforderungen von XML Dokumenten umgehen zu können. Welche Anforderungen stellt XML an DBMS? Wie müssen DBMS erweitert werden, um XML Dokumente verwalten zu können 6 Struktur und Inhalte der LVA 1. Formalia 2. Dokumente und Daten: Markup, XML (Standards), XML Document Model 3. XML und Datenmodellierung: konzeptionelles Modell, DTD und Schema, Entwurf von XML Vokabularen 4. Relationale DBMS und XML 5. Native XML DBMS: Berkeley DBMS, eXist 6. Navigation, Abfragen und Manipulation: XPath, XQuery 7. Performanz 7 FORMALIA 8 Aufbau der LVA 1. Blockvorlesungen als Einführung in Technologien (Dokumente und Markup, XML Modellierung, native XML Datenbanken, usw.), 9. Oktober und 13. Oktober 2008 2. Erstellen einer Semesterarbeit (siehe dazu auch weiter unten; Thema bitte bis 24. Oktober 2008 bekannt geben; Abgabe bis 31. Dezember 2008) 3. 12. Jänner 2009, 12:45 - 14:00, Raum MZ 005 B: Präsentation ausgewählter Arbeiten, Klausur | | Bewertung: 50% Semesterarbeit, 50% Klausur http://www.bioinf.jku.at/teaching/ws2008/spk-wda/ 9 Aufgabenstellung 1/3 | Erstellen einer Semesterarbeit, d.h. ENTWEDER A) Schriftliche Ausarbeitung eines Themas aus dem Bereich "XML und Datenbanken" ODER B) Entwickeln eines Prototyps | Formal | | | | Rund 10 Seiten inkl. Deckblatt Name(n), Matrikelnummer, Studienkennzahl, Seitennummerierung Maximal zwei StudentenInnen pro Arbeit Bei B) | Freie Wahl der technischen Umsetzung; kurze (~10 Seiten) Beschreibung: der wesentlichen Entwurfsentscheidungen, der Architektur, der/des DTD/Schemas, des DB-Schema, von relevanten Implementierungsdetails, der Bildschirmdialoge, etc. 10 Bewertung - Schriftliche Arbeit 2/3 | THEMENBEARBEITUNG (40/100) | | | | | | | | Erfassen und Darstellen der Problemstellung Abgrenzen bzw. Darstellen von Querbeziehungen zu verwandten Themen Logik und Struktur der Gliederung ("roter Faden") Herausarbeiten der Kernfragestellungen, Kernaspekte Definitionen und Argumentationen Zusammenfassung und Darstellung des Ergebnisses bzw. der Schlussfolgerungen Trennung von Beschreibung und Eigenbewertung | EIGENBEWERTUNG (20/100) | | | | STIL DER DARSTELLUNG (10/100) | | | | | | Eigene Wertungen, Gedankengänge Eigene Lösungsansätze, Ideen Eigene Abbildungen Klarheit, Lebendigkeit, Verständlichkeit, Verwendung von Beispielen Visualisierung Zitaten- und Quellenverweise Sprache, Stil Wiss. Ausdrucksweise FORM (10/100) | | | Übersichtlichkeit von Darstellung und Abbildung Rechtschreibung, Grammatik Äußere Form LITERATURRECHERCHE (20/100) | | | Umfang der Literaturverweise Auswertung und Einarbeiten in das Dokument Verknüpfen der verschiedenen Quellen 11 Bewertung - Software Prototyp 3/3 | ENTWURFSENTSCHEIDUNG (20/100) | | | ARCHITEKTUR (20/100) | | | DTD/Schema, DB-Schema, relevante Implementierungsdetails, Bildschirmdialoge, etc. STIL DER DARSTELLUNG (10/100) | | | Darstellen der Komponenten, Schnittstellen, Schichten Klare Definition von Protokollen, APIs, etc. IMPLEMENTIERUNG (40/100) | | Erfassen und Darstellen der Problemstellung bzw. Spezifikation, Definition von Einschränkungen Beschreiben der Vorgehensweise (Prozessmodell) Klarheit, Lebendigkeit, Verständlichkeit, Verwendung von Beispielen Visualisierung FORM (10/100) | | | Übersichtlichkeit von Darstellung und Abbildungen Rechtschreibung, Grammatik Äußere Form 12 DOKUMENTE und DATEN Markup, XML (Standards), XML Document Model 13 XML - Kurzübersicht | Typen von Markup | | | Markup = "Textauszeichnung" Der Begriff "markup" kommt aus der Typesetting Community Kein Markup ("Rohdaten"), z.B. theextensiblemarkuplanguage(xml)istheuniversalformatforstructured documentsanddataontheweb.xmlin10pointsexplainsxmlbriefly.thecurre ntw3crecommendationsarexml1.0,feb'98,namespaces,jan'99,andassocia tingstylesheets,jun'99,andxslt/xpath,nov'99.thexmlactivitystateme ntexplainsthew3c'sworkonthistopicinmoredetail. | Selbst für den Menschen schwer verarbeitbar, Software zur Verarbeitung zu entwickeln ist wenig zielführend 14 Präsentationsmarkup | | Separierung von Einheiten, durch Leerzeichen, Zeilenumbrüche, Einrückungen, usw. Z.B. XML The Extensible Markup Language (XML) is the universal format for structured documents and data on the Web. XML in 10 points explains XML briefly. The current W3C Recommendations are - XML 1.0, Feb '98, - Namespaces, Jan '99, and - Associating Stylesheets, Jun '99, - and XSLT/XPath, Nov '99. The XML Activity Statement explains the W3C's work on this topic in more detail. 15 Prozedurales Markup | Z.B. | | | XML .sk 3 a;.in +10 -10;.ls 0;.cp 2 The Extensible Markup Language (XML) is the universal format for structured documents and data on the Web. XML in 10 points explains XML briefly. ... .sk3 = drei Zeilen überspringen .in +10 -10 = indent 10 Spalten von links, 10 rechts ... 16 Deskriptives Markup | Z.B., <TITLE>XML</TITLE> <P>The Extensible Markup Language (XML) is the universal format for structured documents and data on the Web. <ANCHOR id=1>XML in 10 points</ANCHOR> explains XML briefly.</P> ... | | Entwicklung von Software zur Verarbeitung macht Sinn: Felder sind klar abgegrenzt, miteinander verknüpft (über Hyperlinks beispielsweise), man kann sie individuell ansprechen, usw. Die Elementtypen haben aber noch keine (maschinenlesbare) Bedeutung (im Sinne des "Semantic Web" - Web 3.0). 17 HTML und XML | HTML - Hypertext Markup Language <H1>Car for Sale</H1> <P align="center">1957 Chevy Bel Air</P> <BR><I>MINT</I> condition <BR>only 55,000 miles | XML - EXtensible Markup Language <sale-item> <type>Car</type> <model>1957 Chevy Bel Air</model> <cond>MINT</cond> <mileage>55,000</mileage> </sale-item> | | XML selbst schreibt nicht die zu verwendenden Elemente vor ( DTD oder Schema, siehe unten) Trennung von Inhalt und Präsentation (so gut das halt geht ...) 18 Was ist XML? | | | | | Eine Meta-Sprache, also eine Sprache zur Beschreibung von Sprachen XML := HTML - Präsentation + eigene Tags "Das ASCII des WWW" "Lingua Franca des Web" ... 19 XML-basierte Markupsprachen | | | | | MDL - Movie Description Language NewsML - http://www.newsml.org/ HL7 - http://www.hl7.org im Gesundheitsbereich Dublin Core - http://dublincore.org/ XBRL - Extensible Business Reporting Language, http://www.xbrl.org/ | DocBook - http://www.docbook.org/ | XHTML - http://www.w3.org/MarkUp/ | ... Branchen- bzw. anwendungsspezifisch, d.h., die Bedeutung der Elementtypen ist für die jeweilige Domäne normiert 20 GML, SGML, XML, HTML, XHTML, SMIL, WML, ... | GML | | | | General Markup Language Auch: Goldfarb, Mosher, Lorie -> GML :-) Ende der 60er Jahre entwickelt SGML | | | | | | Standard Generalized Markup Language Ähnliche Ideen wie GML Seit 1986 ISO Standard (ISO 8879) Document-Type-Definition (DTDs) legen fest wie Dokumente aussehen SGML standardisiert die Beschreibung (nicht die Dokumenttypen) SGML Konstrukte werden auch zur Definition von Hypermedia Dokumenten verwendet (HyTime - Hypermedia/time-based Structuring Language, ISO/IEC 10744, 1992) 21 Zeitliche Entwicklung von GML, SGML, XML, Web, ... XML 1997 1992 1986 1960 HTML World Wide Web Standard Generalised Markup Language (SGML) Generalised Markup (The) Internet In Anlehnung an [Bra98] 22 "Heutige" Sicht auf XML | ... unter Berücksichtigung der jeweiligen Communities (in Erweiterung zu [FlKo2006]): Programmiersprachen Datenbanken Software Engineering XML Workflow InternetNetworking Contentmanagement | Die globale Sicht fehlt allerdings in den einzelnen Communities! 23 Das W3C | | | | Gründung am CERN im Oktober 1994 mit dem Ziel, Protokolle bzw. Standardisierung und damit Interoperabilität im Web voranzutreiben Drei Trägerinstitutionen: MIT (U.S.A.), ERCIM (Europa) und Keio (Japan) Das W3C entwickelt keine Standards, sondern es entstehen "Recommendations", die dann aber von Werkzeugen unterstützt werden und damit Verbreitung erreichen Prozess der Entwicklung 1. 2. 3. 4. 5. | | Notes Working Drafts Candidate Recommendations Proposed Recommendations W3C Recommendations Siehe auch http://www.w3.org/ Warum ist das wichtig? Weil manche Fragestellungen rund um XML sich in unterschiedlichen "Reifestadien" des W3C befinden. 24 Datenrepräsentation | | | Layout-orientiert: troff, TeX, Postscript, PDF, usw. Strukturorientiert: SGML, XML, LaTeX, usw. Relationale Strukturen: SQL 25 Metadaten ... | Können bezogen sein | | | auf die Struktur: beschrieben wird die Struktur und die Beziehungen der Elemente untereinander. Man könnte auch Schema sagen bzw. Dokumenttyp auf die Semantik: was ist die Bedeutung der einzelnen Elemente? Ontologie: hat verschiedene Ausprägungen (von der Taxonomie bis zur "foundational Ontologie"). Wesentlich (für unsere Zwecke hier) ist die Akzeptanz in einer Domäne/Community (und nicht "nur" von einem Player). Auch andere Bezüge werden verwendet | | Sogenannte "Catalog-Metadata" verweisen auf Daten, die zum Lokalisieren, Auffinden, usw. der eigentlichen Daten verwendet werden. Dublin Core etwa fällt in diese Kategorie. Mapping/Integration Metadata: wie können verschiedene Repräsentationen zusammengeführt werden 26 Metaklassen, Klassen, Instanzen SGML/XML 1 DTD/Schema Dokumente einige viele Metaklasse Klasse Instanzen SGML (ISO 8879) XML docbook.dtd HTML.dtd SMIL.dtd WML.dtd BSML.dtd charlesGoldfarb.book times.newspaper index.html someMovie.smil horoscope.wml 27 HTML, SMIL, WML, etc. ... | | | ... sind Dokumenttypen! http://www.somewhere.com/index.html ist ein konkretes Dokument (= eine Instanz), die dem Dokumenttyp HTML entspricht XML ist eine "vereinfachte" Variante von SGML | | | Begin- UND Endtags müssen immer vorhanden sein Eine DTD ist nicht unbedingt notwendig (siehe auch "well-formed XML" bzw. Schemasprachen) Viele begleitende Standards, z.B. XSL zur Präsentation, etc. 28 XML Dokumente | DTDs in XML sind | | | | | (streng) hierarchisch beschreiben keine Datentypen (außer Character) erlauben das Referenzieren von Elementen (mit ID und IDREF) XML Dokumente können an jeder Stelle im Dokument Unicode Zeichen enthalten XML Dokumente können "well-formed" oder "valid" sein: | well-formed: | | | | Das Dokument beginnt mit <?xml version="1.0"> Alle Elemente sind einem Wurzelelement untergeordnet Alle nicht-leeren Dokumente haben Begin- und End-Tags valid: | Das Dokument ist wohl geformt und entspricht einer DTD oder einem Schema. 29 DTD und Instanz … <!ELEMENT OHP <!ELEMENT MESSAGESET <!ENTITY % allMessNames (MESSAGESET)> (MESSAGE, MESSAGE*)> "CONTEXTCREATE | CONTEXTCREATED | LINKCREATE | LINKCREATED | …> (MESSAGEHEADER, (%allMessNames;))> (SENDER?, RECEIVER?, SERIAL, RETURNSERIAL?, <!ELEMENT MESSAGE <!ELEMENT MESSAGEHEADER SESSION?, ACCOUNT?, MNAME, PROTOCOL, CERT?, CONTEXTIDSET, PERFORMATIVE?)> <!ELEMENT SENDER (#PCDATA)> … DTD Instanz <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE OHP SYSTEM "http://www.ifs.unilinz.ac.at/~sre/ohp/ohpxml/Darmstadt.dtd"> <OHP> <MESSAGESET> <MESSAGE> <MESSAGEHEADER> <SENDER>Steve's Audio-Contour-RetrievalApp</SENDER> <RECEIVER>Jon's LS</RECEIVER> <SERIAL>S001</SERIAL> <SESSION>session1</SESSION> <ACCOUNT>[email protected]</ACCOUNT> … 30 Elemente und Attribute | Element | | | | Knoten im Baum Kann Teilbäume enthalten oder leer sein Subknoten können mehrfach vorhanden sein Attribut | | Gehört zu einem Element Existiert nur einmal pro Knoten 31 Attribute oder Elemente? | Elemente können Attribute haben: <!ELEMENT country (population?, city*)> <!ATTLIST country name CDATA #REQUIRED> ... oder <!ELEMENT country (name, population?, city*)> | Gegen Attribute spricht, dass ... | | | | Elemente (hierarchische) Struktur definieren (und Attribute nicht) Attribute keine Mehrfachwerte haben können. Und: falls sie Mehrfachwerte haben sollten, ist es wahrscheinlich ohnehin besser, sie als Elementtypen zu modellieren Die Programmierung oft aufwändiger ist Dafür spricht, dass ... | Die Verwendung von Elementtypen in größeren Dokumentgrößen resultiert 32 DTD: Elemente und Attribute | Inhalte von Elementen: | | | | | (#PCDATA): Zeichenketten (parseable character data) EMPTY: kein Inhalt (als "Marker" zu verwenden) (#PCDATA | elem1 | elem2 ...)* gemischter Inhalt aus Zeichenketten und vorgegebenen Elementen ANY: Alle Kombinationen sind erlaubt Attribute: | | | | | | | ID, IDREF(S): IDs, die in einem Dokument eindeutig sind und mit einem Buchstaben beginnen ENTITY: meist externe Ressourcen (z.B. Bilddokument) CDATA: Zeichenkette, die unverändert bleibt NMTOKEN: Namen (die nicht eindeutig sein müssen) NOTATION: Nicht-XML Daten (word): Zeichenkette "word"; auch (w1 | w2 | w3 ...) Enumeration #REQUIRED, #IMPLIED, #FIXED: notwendig, nicht notwendig, vorgegeben 33 Beispiel CDATA | | Ein XML Parser analysiert die Inhalte von Elementen oder Attributen. Falls dort "<" oder ähnliche Steuerzeichen vorkommen, müssen diese als Entitäten dargestellt werden (z.B. "lt" für low-than, d.h. "<"). Oder man verwendet CDATA (Beginn mit "<![CDATA", Ende mit "]]>"): <script> <![CDATA[ function decide (x, y) { if (x > y && y > 0) then { return x; } } ]]> </script> 34 Gruppierung von XML Elementen | | | Sequenz (A, B): A und B müssen in der angegebenen Reihenfolge im Dokument vorkommen Alternative (A | B): entweder A ODER B müssen im Dokument auftreten Wiederholung: | | | | | A: 1-maliges Vorkommen von A A?: 0 oder 1-maliges Vorkommen von A A+: 1 oder n-maliges Vorkommen von A A*: 0 oder n-maliges Vorkommen von A Auch Kombination bzw. Schachtelung ist möglich <!ELEMENT adresse (ort, plz, ((strasse, nummer) | postfach))> 35 Verknüpfung XML und HTML | Sogenannte "XML Data Islands" können verwendet werden, um XML Dokumente in HTML einzubetten. <HTML><BODY> <XML ID="xmlParts" SRC="parts.xml"></XML> <TABLE DATASRC=#xmlParts> <TR> <TD><DIV DATAFLD="partnumber"></DIV></TD> <TD><DIV DATAFLD="$text"></DIV></TD> </TR> </TABLE> <?xml version="1.0" ?> </BODY></HTML> <parts> <part> <partnumber>X12334-125</partnumber> <description>Oil Filter</description> <quantity>$24.99</quantity> </part> ... 36 Namensräume 1/2 | | Notwendig bei (Wieder-)Verwendung derselben Bezeichner für Tags (z.B. beim Zusammenführen von Dokumenten) Ermöglichen auch die Verwendung verschiedener Dokumenttypen in einem Dokument, z.B. Verwendung von MathML in einem XHTML Dokument: <html xmlns="http://www.w3.org/TR/xhtml1/strict" xml:lang="en" lang="en"> <head><title>A Math Example</title></head> <body> <p>The following as MathML markup:</p> <math xmlns="http://www.w3.org/TR/REC-MathML"> <apply><log/> <logbase><cn> 3 </cn></logbase> <ci> x </ci> </apply> </math> </body> </html> Wiederverwendung Modularität Erweiterbarkeit 37 Namensräume 2/2 | Global eindeutige Namen, "title" wird beispielsweise in zwei Kontexten verwendet <h:html xmlns:xdc="http://www.xml.com/books" xmlns:h="http://www.w3.org/1999/xhtml"> ... <h:head><h:title>Book Review</h:title></h:head> ... <xdc:bookreviews> <xdc:title>XML: A Primer</xdc:title> </xdc:bookreviews> ... </h:html> 38 DTD und XML Schema 1/2 | | Die Entwicklung von XML Schema(-Sprachen) begann etwa 1998 als XML vermehrt zur Darstellung komplexer, typisierter Datenmodelle verwendet wurde (und nicht "nur" für Markup von Dokumenten). Nachteile von DTDs | | | DTDs sind keine XML Dokumente, verwenden eine eigene Syntax (stammt noch von SGML her) Sie verfügen über wenige, eingeschränkte Datentypen ID, IDREF(S): als Referenzen nur bedingt geeignet Erweiterungen | | | Aus dem Bereich Multimedia Modellierung z.B. HyTime (ISO/IEC 10744, sehr komplex) Aus dem Bereich der Datenbanken, z.B. XML Schemasprachen Vorteile von XML Schema | | | | Verwendet XML Syntax Zahlreiche vordefinierte Datentypen Erweiterung um eigene Datentypen möglich Flexibleres Konzept für Referenzen/Schlüssel 39 DTD und XML Schema 2/2 | | | Oft ist die Definition von Bedingungen für Aufbau der Dokumentenstruktur sinnvoll, z.B. Anzahl bestimmter Elemente Oder Datentypen für Elemente und Attribute sollen explizit definiert werden z.B. Integer, Float, URL Oder man möchte eigene Typen definieren, auch ableiten (Objektorientierung / Vererbung) Beispiel: XML DTD <!ELEMENT stueckpreis (#PCDATA)> und XML-Schema <xs:element name="stueckpreis" type="Waehrung" /> wobei <xs:simpleType name="Waehrung"> <xs:restriction base="xs:decimal"> <xs:minInclusive value="0"/> <xs:fractionDigits value="2" /> </xs:restriction> </xs:simpleType> 40 Ziele von XML Schema [KST02] | Wiederverwendung | | Konsistenz | | Eindeutigkeit, Schüssel, Fremdschlüssel Struktur | | | | Schemadokumentation, Modularisierung, Erweiterung Komplexe Datentypen Kardinalitäten Elementdeklarationen Datentypen | | vordefinierte eigene 41 Vordefinierte Typen (http://www.w3.org/TR/xmlschema-2/#built-in-datatypes) 42 XML Schema: eigene Datentypen | Simple Typen | Durch Einschränkung ("Restriktion") bestehender Typen, z.B. Wertebereiche <xsd:simpleType name="Waehrung"> <xsd:restriction base="xsd:decimal"> <xsd:minInclusive value="0" /> <xsd:fractionDigits value="2" /> </xsd:restriction> </xsd:simpleType> | Komplexe Typen | Z.B. durch sequentielles Aneinanderreihen bei einer "Adresse" <xsd:complexType name="Adresse"> <xsd:sequence> <xsd:element name="strasse" type="xsd:string" /> <xsd:element name="url" type="xsd:anyUrl" minOccurs="0" /> <xsd:element name="land" type="Land" /> ... </xsd:sequence> </xsd:complexType> 43 XML Schema: Weiteres | Konsistenzregeln | | Wiederverwendbarkeit und Erweiterbarkeit | | | Definieren von Querbezügen, d.h. Schlüssel und Fremdschlüssel; auch Null-Werte können definiert werden ("nil") Mit "<include>" Konstrukten können andere Schemata eingebunden werden Dokumentation direkt im Schema möglich ("<documentation>") Weitere Schemaansätze | | | | XML Schema ist eine W3C Empfehlung RELAX NG Schematron XML Data Reduced (XDR) 44 XML Schema: Beispiel 1/4 | Ein einfaches XML Dokument <?xml version="1.0"> <book> <title>Web Engineering</title> <author>Gerti Kappel, Birgit Pr&ouml;ll, Sigi Reich, Werner Retschitzegger</author> <publisher>dpunkt Verlag</publisher> <price>39.90</price> <year>2003</year> </book> 45 XML Schema: Beispiel 2/4 | Eine einfache DTD <?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE book [ <!ELEMENT book (title, author, publisher, price, year) > <!ELEMENT author (#PCDATA)> <!ELEMENT title (#PCDATA)> <!ELEMENT publisher (#PCDATA)> <!ELEMENT price (#PCDATA)> <!ELEMENT year (#PCDATA)> ] > 46 XML Schema: Beispiel 3/4 | Ein einfaches Schema <?xml version="1.0" encoding="ISO-8859-1"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.somewhere.com" xmlns="http://www.somewhere.com"> <xsd:element name="book"> <xsd:complexType> <xsd:sequence> <xsd:element name="title" type="xsd:string“ /> <xsd:element name="author" type="xsd:string“ /> <xsd:element name="publisher" type="xsd:string“ /> <xsd:element name="price" type="xsd:float“ /> <xsd:element name="year" type="xsd:integer“ /> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:schema> 47 XML Schema: Beispiel 4/4 | Verweis auf DTD <?xml version="1.0"?> <!DOCTYPE book SYSTEM "http://www.somewhere.com/dtds/book.dtd"> <book> ... | Verweis auf Schema <?xml version="1.0"?> <book xmlns="http://www.somewhere.com" xlmns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.somewhere.com book.xsd"> <title>Web Engineering</title> ... 48 DTD vs. Schema 1/2 DTD Schema Eigene XML Datentypen String-artig Viele vordefinierte Typen Reihenfolge Elemente durch Komma separiert <xs:sequence> Nein Ja Ja Ja Nein (nur bei Attrib.) Ja Benutzerdef. Datentypen Nein Ja Ableiten von Datentypen Nein Ja Aufzählen von Attributen <length>, etc. Syntax Namensräume Kardinalität Defaultwerte Wertebereiche 49 DTD vs. Schema 2/2 | Vorteile von DTDs | | | Relativ schnell und einfach zu erstellen D.h. vor allem zur Erstellung einfacher Dokumente gut geeignet (dokumentenzentriert) Vorteile von XML Schema | | | | vielfältige vordefinierte Datentypen Komplexe, auch selbstdefinierte Datentypen Möglichkeit zur Darstellung von Integritätsbedingungen, sowie XMLSyntax D.h. mehr Modellierungsmöglichkeiten 50 XML Schema und Alternativen | Neben XML Schema gibt es auch andere Schemasprachen, um strukturelle Metadaten darzustellen | | RELAX NG (http://www.relaxng.org/): einfacher als XML Schema, mathematische Basis Schematron (http://xml.ascc.net/resource/schematron/schematron.html): dient "lediglich" der Validierung von Dokumenten; Ergänzung zu bestehenden Schemasprachen (und weniger eine Konkurrenz) 51 Die XML Familie | | | | | | | | | XML Namespaces: Separierung, um Namenskonflikte zu vermeiden, zu modularisieren XML Schema: Definition eigener Datentypen, erweiterte Validierungsmechanismen, etc. XSLT (Extensible Style Sheet Language Transformations): Transformation Xinclude (XML Inclusions): Zusammenführen von Dokumenten XLink (XML Linking Language): Verknüpfungen zwischen Dokumenten XPath (XML Path Language): Lokalisierung spezieller Elemente oder Attribute XPointer (XML Pointing Language): Referenzieren durch „Hineinzeigen“ in einzelne Dokumente bzw. deren Elemente/Attribute XQuery (XML Query Language): Abfragesprache ... Tutorials zu diesen und anderen unter http://www.w3schools.com/ 52 XML Document Model | | | XML DOM ist eine Graphstruktur sowie ein plattform- und sprachunabhängiges API zur Manipulation von XML Dokumenten Der Zugriff erfolgt daher über Programmiersprachen/Skriptsprachen wie Java, Javascript, usw. Wesentliche Klassen sind Document, Element, Attr und Text; Node ist eine abstrakte Klasse, die die Basis bildet. HTTPRequest, um URLs zu prüfen, Inhalte zu laden, usw. ... <script type="text/javascript"> var xmlDoc; var books; xmlDoc=loadXMLDoc("bookrep.xml"); books=xmlDoc.getElementsByTagName("book"); for (i=0;i<books.length; i++) { xmlDoc.write("Buch" + books.item(i).text + " <br>"); } ... 53 XML und DATENMODELLIERUNG: Konzeptionelles Modell, DTD und Schema, Entwurf von XML Vokabularen 54 Vorgehensweise - Entwurf von XML Vokabularen | Die Frage ist, wie man zu einem XML Vokabular (i.e., einem Schema oder auch einer DTD) kommt: 1. XML Vokabular aus einem relationalen Schema heraus entwickeln | Verschiedene Verfahren, z.B. Williams et al. 2000: zuerst Entitäten, dann Attribute, dann Beziehungen als XML-Elemente abbilden. 2. Neuentwurf von XML Schemata | Z.B. Abbildungsverfahren nach Kleiner & Lipeck 2002, Entitäten aus ERModell als (zunächst leere) XML Elementtypen; Attribute auf Elementtypen zugeordnet, usw. 3. Ableitung aus Instanzen | | | Aus existierenden XML Dokumenten (Fragmenten) Schwierigkeit liegt vor allem darin, dass man oft nicht weiß, ob das vorliegende Instanzenset ausreichend aussagekräftig ist. Auch Toolunterstützung, z.B. Exchanger XML "Infer Schema", DTD-Miner, usw. 55 Beispiel Exchanger Lite - Schema ableiten <countries> <country iso2="af" id="c01"> <name>Afganistan</name><city>Kabul</city><city>Kandahar</city></country> <country iso2="al" id="c02"> <name>Albania</name><population>3600000</population></country> ... </countries> | Schema <?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> <xs:element name="countries"> <xs:complexType> <xs:sequence> <xs:element maxOccurs="unbounded" ref="country"/> </xs:sequence> </xs:complexType> http://www.exchangerxml.com </xs:element> ... <xs:element name="population" type="xs:integer"/> </xs:schema> 56 Beispiel DTD und Instanz | Beispiel DTD für Reviews, die ANY verwendet, also beliebige Strukturen, die in der DTD definiert sind. EMPTY kann z.B. dazu verwendet werden, anzuzeigen, dass die Inhalte katalogisiert wurden (als "Marker"). <!ELEMENT <!ELEMENT <!ELEMENT <!ELEMENT ... | review ANY> catalogued EMPTY> title (#PCDATA | ital | bold | under)*> author (salutation?, given, family, suffix?)> Beispielinstanz <review>This is a <ital>really</ital>interesting book. <title>A<bold>Bold</bold> Tale of <ital>Three</ital> Towns</title> <author><salutation>Dr.</salutation> <given>Bob</given> <family>Smith</family></author> <catalogued/> </review> 57 XML auf allen Schichten 1/2 | | | Präsentationsschicht: XUL, XSLT, usw. Geschäftsprozessschicht: BPMN Persistenzschicht, Datenhaltung [KST02] XML im Kontext der Systemarchitektur: in der Präsentationsschicht (links) und der Persistenzschicht (rechts oben) 58 XML auf allen Schichten 2/2 | Beispiele für die Verwendung von XML: | | | | | | | XML Serialisierung zur Kommunikation/zum Datenaustausch AJAX (Javascript, HTTP und XML) Komplexe Berechnungen mit XQuery, Verknüpfungen mit XLink Orchestrierung von Web Services mit BPEL Zugriff von SQL aus mit SQL/XML Formatierung von XML mit XSLT ... 59 Präsentationsschicht | Technologien wie z.B. XML user interface language (XUL): | | | | Anwendung als Definitionssprache zur Beschreibung von Benutzerschnittstellenkomponenten, z.B. in Firefox Beispiel: <?xml version="1.0"?> <?xml-stylesheet href="chrome://global/skin/" type="text/css"?> <window id="main" title="Hello World" width="300" height="300" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.i s.only.xul"> <caption label="Hello World"/> <button label="I am a button!"/> </window> XSLT (siehe die folgenden Folien) ... 60 Weiterverarbeitung und Präsentation mit XSL | XSL meint genau genommen drei Standards [Dea02]: | | | | XML Path Language (XPath) zur Adressierung von Teilen eines XML Baums, XSL Transformations (XSLT) zur Weiterverarbeitung von XML Inhalten, und XSL-FO (formating objects), für Aspekte des Layouts Zur Unterstützung der Abbildung von Interaktion - vor allem im Web existiert ein weiterer Standard: XForms 61 Verschiedene Layouts mit XSLT 1/5 | | | XSLT verwendet XPath für das Pattern Matching, d.h., XSLT verwendet XPath um Teile des XML-Quelldokuments mit sogenannten Templates zu verbinden. Spezifikation: http://www.w3.org/TR/xml-stylesheet/ Unterschiedliche Unterstützung durch Browser 62 Verschiedene Layouts mit XSLT 2/5 | Beispiel: bookrep.xml <?xml version="1.0" encoding="ISO-8859-1"?> <?xml-stylesheet type="text/xsl" href="bookrep.xsl"?> <!DOCTYPE bookrep [ <!ELEMENT bookrep (book*)> <!ELEMENT book (title, author, publisher, price, year)> <!ELEMENT title (#PCDATA)> ... <!ENTITY ouml "&#246;" > ... ]> <bookrep> <book> <title>Web Engineering</title> <author>Gerti Kappel, Birgit Pr&omul;ll, Werner Retschitzegger, Sigi Reich</author> <publisher>dpunkt Verlag</publisher> <price>39.90</price> <year>2003</year> </book> <book> ... </bookrep> 63 Verschiedene Layouts mit XSLT 3/5 | Beispiel: bookrep.xsl <?xml version="1.0" encoding="ISO-8859-1"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <html> <body> <h2>Buchliste</h2> <table border="1"> <tr bgcolor="#99ccff"> <th align="left">Title</th> <th align="left">Autor(en)</th> </tr> <xsl:for-each select="bookrep/book"> <tr> <td><xsl:value-of select="title"/></td> <td><xsl:value-of select="author"/></td> </tr> </xsl:for-each> </table> </body> </html> </xsl:template> </xsl:stylesheet> 64 Verschiedene Layouts mit XSLT 4/5 | Default-Layout (links) und spezielles Layout mit Style Sheet unter Mozilla und unter Safari (rechts) 65 Verschiedene Layouts mit XSLT 5/5 | | | XSLT kann am Client verwendet werden (z.B. direkt im Browser, oder auch mit Hilfe von Javascript); Oder auch am Server, z.B. mit ASP oder auch den entsprechenden Java Bibliotheken. Vorteil der Lösung am Server ist die größere Plattformunabhängigkeit und auch "Entlastung" des Clients 66 Geschäftsprozessschicht 1/3 | | | | | | Ziel ist es, Abläufe möglichst deklarativ zu spezifizieren (anstelle zu programmieren). Z.B. mit der Business Process Execution Language (BPEL) BPEL geht zurück auf WFSL (IBM) und XLANG (Microsoft) Unterstützt "programming in the large" also eher die high-level Interaktionen von Prozessen (Zustände, Zustandsveränderungen, usw.) Die Interaktion von Geschäftsprozessen, d.h., von verschiedenen Aufrufen von Web Services wird koordiniert WSDL (Web Services Definition Language) zur Beschreibung der Schnittstelle(n) zum Webservice (plus Port-Types und Partner-Link-Roles) als erster Schritt Die eigentliche BPEL Beschreibung inkludiert | | | | Prozessdeklaration Deklaration der Partnerlinks Variablen Prozessschritte und deren Abfolge 67 Geschäftsprozessschicht 2/3 | Beispiel mit BPEL (siehe z.B. http://www.oracle.com/technology/pub/listings/matjaz_bpel2_src.html): <?xml version="1.0" encoding="utf-8"?> <process name=“OrderBook“ ...> <partnerLinks> <partnerLink name="Client" ... <partnerLink name=“BookStore" ... <variables> <variable name="userRequest" messageType="tns:userRequest"/> <sequence> <!-- Receive the initial request from client --> <receive partnerLink="Client“ portType="buy:BuyBookPT" ... /> Auch andere Ablaufkonstrukte wie <flow> oder <switch>, usw. 68 Geschäftsprozessschicht 3/3 | | BPMN (Business Process Modeling Notation) ist eine graphische Notation (als Begleitstandard zu BPEL). Ziel ist es, eine für Domainexperten verständliche Sichtweise zu unterstützen, siehe z.B. eClarus Business Process Modeler Grafik siehe http://en.wikipedia.org/wiki/Image:BPMN-AProcesswithNormalFlow.jpg 69 XML und der Entwurfsprozess 1/2 | Generelle Vorgehensweise [KST02]: das logische Modell bildet dabei die Schnittstelle zu Anwendungen Konzeptionelles Schema UML, ER Logisches Schema DTD, XML Schema Physisches Schema Produktspezifisches rel./oo DB-Schema, Indexstrukturen, etc. 70 XML und der Entwurfsprozess 2/2 | Einbinden eines bestehenden DBMS [KST02] Bestehende Anwendungen XML-basierte Anwendungen Bestehendes logisches Schema Logisches XML Schema Abbildungsprozess Bestehendes DBMS 71 Datenzentriert vs. Dokumentenzentriert 1/4 | Welches DBMS soll verwendet werden? Legacy-Daten in DBMS vorhanden? (Relationen im DBMS werden als XML "exportiert") | XML als Austauschformat? ("nur" die Hierarchie von XML-Elementen wird übertragen, nicht die DTD) | XML Dokumente, die in DBMS verwaltet werden sollen? (XML Dokumente, die in einem DBMS gespeichert werden) data-centric vs. document-centric [BOU05] | Hintergrund der Unterscheidung ist oft auch die Verarbeitung durch (maschinelle) Prozesse (data-centric) bzw. durch den Menschen (document-centric) | 72 Datenzentriert vs. Dokumentenzentriert 2/4 | Datenzentriertes XML-Dokument | | | | | Daten sind strukturiert, fein-granular und getypt, sehr stark anwendungsorientierte Schemata, z.B. Fahrplan, Börsenkurs, Bestellung, Telefonbuch Element-Ordnung ist unwichtig (d.h., "Müller" kommt nach "Huber", weil alphabetisch sortiert; bei Umsortierung ändert sich die Semantik nicht) Dokumente sind einheitlich und einfach strukturiert Struktur wird meist durch ein Schema (z.B. DTD, XML Schema) festgelegt Dokumentenzentriertes XML-Dokument (auch "textzentriert") | | | Daten sind semistrukturiert, grob-granular und ungetypt, oft kein Schema vorhanden, z.B. Gebrauchsanweisungen, Skripten, etc. Element-Ordnung ist wichtig, gemischter Inhalt kommt vor Struktur oft nicht oder nur durch generisches Schema fixierbar | Oft Mischform ("semi-structured") 70% der relevanten Geschäftsinformationen liegen in Textdokumenten, d.h. sind "dokumentenzentriert" [SCH03, pp. 65] 73 Datenzentriert vs. Dokumentenzentriert 3/4 | Warum die Unterscheidung? | | | Wichtig für den Entwurf einer DTD oder eines XML Schemas Wichtig für den Entwurf von Abfragesprachen Bestehende Entwurfsmethoden erzeugen meist datenzentrierte Schemata 74 Datenzentriert vs. Dokumentenzentriert 4/4 <order orderno="4711"> <customerno>8596</customerno> <orderitem posNr="1"> <productno>14896612</productno> <items>2</items>... </orderitem>... </order> <FAQ> <SECTION>INTRODUCTORY QUESTIONS with answers. <Q>What is SGML, briefly?</Q> <A>SGML is an abbreviation...</A> Datenzentriertes XML Dokumentenzentriertes XML Mischform ...<CHAPT ID="intro"><HEADING>The Publishing Process and Derived Requirements for Workflow Management Systems<LABEL ID="chProcessAndRequirements"> </HEADING> <HEADER><IDX>Publishing Process</IDX> and <IDX>Requirements</IDX></HEADER> <P>Electronic Publishing is ...</P> </CHAPT> 75 Zusammenfassung 1/2: generelle Vorgehensweise | Konzeptioneller Entwurf | | Z.B. ER-Diagramm: Entitäten, Attribute, Beziehungen Logischer Entwurf (in XML) | | Umsetzung aus konzeptionellem Entwurf Attribute vs. Elemente: <book genre=„security“> ... vs. <book><genretype>security</genretype></book> Beide Varianten möglich; zum Teil "Geschmackssache" bzw. Stilfrage | | Physische Schicht (im DBMS) | | | | Relationen: z.B. als "Sequence" oder als "Komplex", d.h., zusammengesetztes Element Dokumente "aggregieren" Entitäten und Elemente "Collections" aggregieren Dokumente Definition von Indizes Programmierung, Einbindung in Web-Architekturen, ... 76 Zusammenfassung 2/2: generelle Vorgehensweise | Architekturebenen für Datenbanken (oben) und Dokumentverarbeitung (unten): konzeptionelle, logische und physische Ebene Konzeptionelle Ebene (ER Modell, ...) Konzeptionelle Ebene (SGML, XML, ...) Logische Ebene (Relationen, ...) Logische Ebene (Dokumentenmodelle) Physische Ebene (Konkretes Modell) Physische Ebene (Instanzen) 77 RELATIONALE DBMS und XML 78 Warum XML und relationale DBMS? | | | | Geschäftsanwendungen erfordern transaktionsgesteuertes Verarbeiten von XML (mit mehreren Benutzern, Backup & Recovery, usw.) XML kann als Repräsentation des Datenmodells verwendet werden, XQuery ist eine mächtige Sprache Unternehmen verwenden in der Regel bereits relationale Systeme, mehr als ein System zu betreiben ist kostenaufwändig (Lizenzen, Know-how, usw.) Daher | | | Integration von XML in relationale DBMS Publizieren von relationalen Tabellen als XML ... 79 XML-Enabled DBMS: Relationale Systeme | | Oracle: Unterstützung für XML seit der Version 9i MS SQL Server | | | Mittlerweile Unterstützung vorhanden SQL-Nähe bleibt (siehe weiter unten) DB2 Viper (http://www.ibm.com/developerworks/db2/library/techarticle/dm-0602saracco/) integriert XML und relationales Modell; mittlerweile auch "Viper 2", DB2 9.5 pureXML als natives DBMS, http://www.ibm.com/db2/xml - XML Dokumente werden nicht in Tabellen "geshreddert"/keine (De-)Komposition) 60% bessere Performanz im Vergleich zu Viper | Auch Derby mit XML u.v.a.m. 80 MS-SQL und XML 1/4 | | Unterstützung ab SQL Server 2005 (davor als "large objects") XML-Datentyp als zusätzlicher Standard-Datentyp, Beispiel: USE example CREATE TABLE xmltab (id INTEGER NOT NULL PRIMARY KEY, xml_column XML) | Hierbei wird die Spalte "id" verwendet, um jede Tabellenreihe eindeutig zuzuordnen. Einfügen von Elementen: USE example INSERT INTO xmltab VALUES(1, ´<?xml version „1.0“?> <book><author> … </book>´) | Dabei wird das XML Dokument beim Einfügen auf Korrektheit geprüft und als "large object" gespeichert. Aus Performanzgründen ist daher das Erstellen eines Index für die Spalte xmltab notwendig USE example CREATE PRIMARY INDEX XML i_xml_column on xmltab (xml_column) 81 MS-SQL und XML 2/4 | Sekundärindizes können erstellt werden, um die Performanz auch bei Abfragen auf die Struktur sicherzustellen, z.B.: USE example CREATE xml INDEX i_xml_column_path ON xmltab (xml_column) USING XML INDEX i_xml_column FOR PATH) | Spalten können durch Verweis auf Schema typisiert werden USE example CREATE TABLE xml_booktab (id INTEGER, xml_book XML (BookSchema)); | Abfragen aus SQL heraus, z.B. mit XPath SELECT pk, xCol FROM docs WHERE xCol.exist ('/book[@genre = "security"]') = 1 Zugrunde liegendes XML Dokument <book genre="security" publicationdate="2002" ISBN="0-7356-1588-2"> <title>Writing Secure Code</title> <author><first-name>Michael</first-name><last-name>Howard</lastname></author> <author><first-name>David</first-name><last-name>LeBlanc</lastname></author> <price>39.99</price></book> 82 MS-SQL und XML 3/4 | Schemata können für eine ganze "Collection" von XML Dokumenten spezifziert werden, z.B. USE example CREATE XML SCHEMA COLLECTION Books AS N´<?xml version=„1.0“ encoding=„UTF-16“?> <xsd:schema elementFormDefault=„unqualified“ attributeFormDefault=„unqualified“ xmlns:xsd=„http://w3.org/2001/XMLSchema“ > <xsd:element name=„books“> … </xsd:schema>´; | Auch ALTER und DROP SCHEMA für Änderungen 83 MS-SQL und XML 4/4 | Um Abfrageergebnisse von Relationen als XML Dokument darzustellen, ist die Verwendung der FOR XML Klausel notwendig USE example SELECT book.author FROM book FOR XML RAW | Ergebnis ... <row author=„Kappel“ /> <row author=„Retschitzegger“ /> ... | | Im "AUTO" Modus erfolgt die Rückgabe des Ergebnisses als geschachtelter Baum; "PATH" erlaubt eine XPATH-artige Abfrage XPATH und XQuery werden über die Systemfunktionen xml.value, xml.query, xml.exist und xml.modify unterstützt. Eine XPATH/XQuery Anfrage dient dabei als Input, wird verarbeitet und liefert einen Wert (value), eine XML Instanz (query) bzw. 0/1 (exist) zurück. 84 Zusammenfassung RDBMS und XML | | | | Relationale DBMS bieten mittlerweile ein breites Spektrum an XML Funktionalität an (beinahe "native") Abbildung ist komplex und aufwändig Daher sind RDBMS basierende Implementierungen oft nicht besonders performant Dokumente wieder herzustellen ist schwierig (weil von RDBMS wieder auf XML abgebildet werden muss) Eher für hoch-strukturierte Daten geeignet Weniger gut geeignet für gemischte Inhalte | Meist wird in der Praxis (jedoch) bereits ein (relationales) DBMS vorhanden sein, sodass man die angebotenen Features verwenden wird (statt auf ein natives Produkt zurückzugreifen) 85 NATIVE XML DBMS 86 Anwendungsszenarien 1. Generieren von XML Dokumenten aus Datenbanken (generell): um Informationen aus DBMS für andere Anwendungen zur Verfügung zu stellen 2. Generieren von XML Dokumenten für ein definiertes Schema: in der Praxis häufig anzutreffen, weil für eine bestimmte Anwendung Daten zur Verfügung gestellt werden müssen; könnte auch durch XSLT Konversion des Ergebnisses aus (1) erfolgen 3. Speichern von XML Dokumenten in DBMS: strukturspezifisch, generell, usw. 4. Austausch von Datenbankinhalten (in föderierten DBMS): XML als Austauschformat 87 "Native" XML Datenbanken 1/3 | | | Der Begriff "native" wurde ursprünglich von Software AG für das Produkt "Tamino" geprägt; Grundidee ist, dass das Datenbankmodell selbst XML entspricht, d.h., die "natürliche Struktur" der Inhalte inhärent unterstützt; Vergleich RDBMS Modell vs. XML Modell [Haro05, Sch03]: Relationales DBMS XML DBMS Enthält Tabellen; flach (manche Systeme erlauben Schachtelung, aber nicht in beliebiger Tiefe) Enthält "Collections", hierarchische beliebig tiefe Struktur Eine Tabelle enthält Records, die einem gemeinsamen Schema entsprechen Eine Collection enthält XML Dokumente, die demselben Schema entsprechen Ein Record ist eine ungeordnete Liste von Werten Ein XML Dokument ist ein Baum (von Knoten) Eine SQL Query hat als Ergebnis ein ungeordnetes Set von Records Eine XQuery hat als Ergebnis eine geordnete Liste von Knoten Schema ist verpflichtend Schema ist optional, auch mit offenen Elementen (z.B. ANY in DTD) Kommentare und Verarbeitungsanweisungen sind überall im Dokument erlaubt (Deklaration nicht erforderlich) 88 "Native" XML Datenbanken 2/3 | | Die (physische) Implementierung von XML ist davon unabhängig (z.B. als hierarchisches System oder als objektorientiertes System); eXist (http://www.exist-db.org/) beispielsweise | | | organisiert XML Dateien in "Collections" (als indizierte B+ Baumstruktur) Bietet Schnittstellen zu XSLT, REST/SOAP/XML-RPC, Java, usw. Unterstützt XQuery, XUpdate, usw. Relationale Welt XML Welt Dateneinheit Tabelle XML-Dokumente Abfragen SQL XQuery, XPath Ergebnisse Tabelle XML 89 "Native" XML Datenbanken 3/3 | | Generell können native DBMSs unterschieden werden in solche, die a. Dokumentenbasiert speichern und solche, die b. Knotenbasiert speichern | Erstere haben den Vorteil, dass sie (ganze) Dokumente 1:1 speichern und wiedergeben können (z.B. auch auf der Ebene ob ´‘´ für Attribute verwendet wurden oder ´“´; oder Leerzeichen zwischen Tags, Entity Auflösung, usw.). Die Performanz beim Suchen von ganzen Dokumenten ist meist besser; | Letztere besitzen Vorteile beim Suchen/Finden/Updaten von einzelnen Knoten/Fragmenten Speicherformat und Granularität | "Intaktes" XML wird gespeichert: Dokumente werden geparst und 1:1 gespeichert, 100% round-tripping fähig (z.B. für Dokumentationszwecke wichtig); Granularität ist XML-Dokument (ausgenommen für read-only Dokumente, wo eine Aufsplittung in Teilobjekte (Knoten) möglich ist) | Feine Granularität: Adressierbarkeit & Concurrency-Level liegen auf Elementebene 90 Zwei Beispiele für "native"-XML DBMS | Berkeley DB XML | | | Berkeley DB XML ist eine sogenannte eingebettete Datenbank ("embedded DBMS") mit Programmierschnittstellen zu C, C++, Java, ... Ursprünglich von Sleepycat Software entwickelt und 2006 von Oracle aufgekauft (und als open source freigegeben) http://www.oracle.com/technology/software/products/berkeley-db/xml/ eXist | | eXist-db ist ein Open-Source native XML-DBMS http://exist.sourceforge.net/download.html 91 Berkeley DB XML - Einleitung | | Berkeley DB XML (BDB XML) ist ein XML Aufsatz für die Oracle Berkeley DB BDB XML ist eine "embedded database", also eine Art "XMLLibrary" (ohne Daemon-Prozess) im Unterschied zu einem DBMSServer (mit Login, Zugriff über Netzwerk, etc.). Die Anwendung selbst wird zum Server, ein leichteres Deployment ist der Vorteil | Die Anwendung ist aber auch weniger offen für allgemeine Queries, etc. Anwendung dort, wo vor allem die Speicherung im Vordergrund steht | | | Download von http://www.oracle.com/technology/software/products/berkeleydb/xml/index.html Zurzeit (Okt 2008) ist die aktuelle Version 2.4.13 92 Architektur von "Embedded DBMS" | Typische Web-Architektur (in Anlehnung an [Bri06]) ... web server web browser processor (PHP, CGI, ASP, ...) database server DB driver database files DB driver | ... und Architektur der Berkeley DB XML web server web browser processor (PHP, CGI, ASP, ...) BDB XML lib database files 93 Berkeley DB XML baut auf Berkeley DB auf [Bri06] Berkeley DB XML XML Indexer XQuery Engine Document Parser Berkeley DB DB File Access Replication Transactions Locking Caching Logging 94 Ein einfaches Beispiel | Ein XML Dokument, das Bücher beschreibt <book isbn="0-470-01554-3"> <title>Web Engineering</title> <author>Gerti Kappel, Birgit Pr&ouml;ll, Werner Retschitzegger, Siegfried Reich</author> <publisher>Wiley</publisher> <price>49.90</price> <year>2006</year> </book> | Prompt-Anweisungen oder: openContainer booksrep.dbxml dbxml> createContainer booksrep.dbxml dbxml> addIndex "" title node-element-equality-string dbxml> addIndex "" isbn unique-node-attribute-equality-string dbxml> putDocument bookrep.xml ../../XMLs/bookrep.xml f dbxml> query 'collection("booksrep.dbxml")/bookrep/book[title="Web Engineering"]' dbxml> print <book isbn="0-470-01554-3"> <title>Web Engineering</title> ... 95 Screenshot 96 Berkeley DBXML Konzepte 1/3 1. 2. 3. | Container werden in sogenannten "Environments" verwaltet (physisch im Wesentlichen als Verzeichnisse verwaltet) "Container" dienen als "Datenbanken", die die Inhalte von XML Dateien verwalten Pro Environment werden Parameter wie | | | | Speichergröße, Caching, etc. Locking pro Datenbank ("Container") oder Environment-übergreifendes Locking usw. festgelegt Beispiel sreich$ mkdir theDocuverse sreich$ ./install/bin/dbxml -c -h theDocuverse dbxml> quit sreich$ ll theDocuverse/ total 165792 -rw-r----- 1 sreich staff -rw-r----- 1 sreich staff -rw-r----- 1 sreich staff 24576 966656 83894272 -c create Container 2 Aug 22:33 __db.001 2 Aug 22:33 __db.002 2 Aug 22:33 __db.003 sreich$ ./install/bin/dbxml -t -h theDocuverse Joined existing environment -t transaction mode; mit "start" kann dann explizit eine Transaktion gestartet werden 97 Berkeley DBXML Konzepte 2/3 | Es gibt zwei Typen von Containern: 1. "WholeDoc" speichert Dokumente exakt so, wie sie übergeben wurden; 2. "Node" verarbeitet das Inputdokument und legt es in einer eigenen Struktur ab. | Angabe des Container-Typen bei der Erzeugung des Containers | | | | dbxml> createContainer booksrep.dbxml d d = document, n = node-type und der Defaultwert "Node" performt meist schneller beim Abfragen von einzelnen Knoten "WholeDoc" ist effizienter, wenn ganze Dokumente abgefragt werden. Auch können damit byte-by-byte Repräsentationen direkt verwaltet werden Operationen auf Container | | | | | putDocument getDocuments removeDocument query ... 98 Berkeley DBXML Konzepte 3/3 | Dokumente bestehen aus | | | | | Name Inhalt Metadaten (beliebige Key/Value Paare, die einem URI hinzugefügt werden) Dokumente werden zu Containern hinzugefügt, von dort wieder gelöscht, ersetzt oder modifiziert. Dokumente können validiert werden, dies geschieht aber nur beim Einfügen in den Container (d.h., wenn Dokumente danach geändert werden, kann es sein, dass sie nicht mehr einer DTD oder einem Schema entsprechen und das System das würde das nicht erzwingen) 99 Zusammenhang Environment, Container, Document [Bri06] Environment1/ Container1.dbxml Doc 1 Log 1 Container2.dbxml Doc 2 Log 2 Doc 1 Log 3 Log 4 Log 5 Doc 2 Log 6 100 Indizierung 1/8 | | | Indizes werden auf Container-Ebene definiert, d.h., gelten für alle Dokumente eines Containers Indizes können für Elemente, Attribute oder Metadaten definiert werden Syntax: [uniqueness]-{path-type}-{node-type}-{key-type}-{syntax-type} | | Elemente werden durch "-" getrennt, die Reihenfolge ist beliebig Zum Beispiel unique-node-metadata-equality-string | | Uniqueness: optionales Attribut, das sicherstellt, dass bei der Generierung des Index oder auch Updates die zugrunde liegenden Inhalte auf Eindeutigkeit geprüft werden. Path-Type: entweder "node" oder "edge". Edge merkt sich auch den (Hierarchie-)Kontext eines Element-Types. Dies kann sinnvoll sein, wenn derselbe Name für einen Knoten an unterschiedlichen Stellen im Dokument vorkommt und oft abgefragt wird. 101 Indizierung 2/8 | Beispiel: <Synset fileVersion="1.0" pos="n"> <Id>14861</Id> <WnOffset version="2.1" pos="n">02772480</WnOffset> <LexFileNum>06</LexFileNum> <SsType>n</SsType> <Word lexId="0">baseball</Word> <Word lexId="0">baseball game</Word> <Gloss>a ball used in playing baseball ...</Gloss> <SearchKeys> <Word>ballgame</Word> </SearchKeys> </Synset> | "Word" kommt auf zwei Ebenen vor. Eine Abfrage mit Path-Type "node" würde alle drei selektieren, dann müsste gefiltert werden; mit Type "edge" wird der gesamte Kontext (= "Pfad") indiziert und nur die relevanten Elemente werden retourniert. 102 Indizierung 3/8 | | | Node-Type: drei mögliche Werte: element, attribute oder metadata. Kommentare können nicht indiziert werden. Key-Type: erlaubt die Optimierung eines Index für die geplanten Abfragen. "equality" beispielsweise erlaubt den Vergleich eines Indexwertes mit einem bestehenden Wert; "presence" prüft auf Existenz; "substring" optimiert für Abfragen, die z.B. ein "contains" enthalten; "substring" erfordert mehr Speicherplatz als die anderen beiden Typen. Syntax-Type: spezifiziert den Datentyp des zu indizierenden Objekts, dies ist vor allem für Vergleiche relevant (z.B. wie wird ein Datum repräsentiert?). Erlaubte Werte sind none, anyURI, base64Binary, boolean, date, dateTime, dayTimeDuration, ... 103 Indizierung 4/8 | Listen aller Indizes dbxml> listIndexes Index: unique-node-attribute-equality-string for node {}:isbn Index: unique-node-metadata-equality-string for node {http://www.sleepycat.com/2002/dbxml}:name Index: node-element-equality-string for node {}:title 3 indexes found. | Beispiel dbxml> addIndex "" Word node-element-equality-string "" Word kein Namespace Name des Elements ... | | Hinzufügen oder Ändern von Indizes kann jederzeit erfolgen. Man sollte beachten, dass dies "teuer" sein kann, weil alle Dokumente neuindiziert werden müssen 104 Indizierung 5/8 | Default Index dbxml> addIndex node-element-equality-string | | | ... für jene Situation, wo man im Vorhinein nicht genau weiß, welche Elemente indiziert werden sollen Query-Plan: BDB XML erstellt vor jeder Query einen Plan zur Abarbeitung. Darin enthalten sind sämtliche verwendete Indizes. Dieser Plan kann (als XML) ausgegeben und analysiert werden. Beispiel: abgefragt werden sollen alle Bücher, deren Titel das Wort "Web" enthält. dbxml> queryplan 'collection("booksrep.dbxml")/bookrep/book[contains(title, "Web")]' <XQuery> <QueryPlanToAST> <NodePredicateFilterQP uri="" name="#tmp5"> <StepQP axis="child" name="book" nodeType="element"> ... 105 Indizierung 6/8 | Ursprünglich ist der Index auf "equality", d.h. "Vergleiche" definiert dbxml> addIndex node-element-equality-string | Bei der Abfrage kann der Index daher nicht berücksichtigt werden, der Queryplan zeigt das an (indem kein Indexeintrag vorkommt). dbxml> queryplan 'collection("booksrep.dbxml")/bookrep/book[contains(title, "Web")]' <XQuery><QueryPlanToAST> <NodePredicateFilterQP uri="" name="#tmp5"> <StepQP axis="child" name="book" nodeType="element"> <StepQP axis="child" name="bookrep" nodeType="element"> <SequentialScanQP container="booksrep.dbxml" nodeType="document"/></StepQP> </StepQP> <ValueFilterQP comparison="substring"> <StepQP axis="child" name="title" nodeType="element"> <VariableQP name="#tmp5"/></StepQP> <Sequence> <AnyAtomicTypeConstructor value="Web" typeuri="http://www.w3.org/2001/XMLSchema" typename="string"/> </Sequence> </ValueFilterQP></NodePredicateFilterQP></QueryPlanToAST></XQuery> 106 Indizierung 7/8 | | Daher wird auch ein Index auf "substring" definiert dbxml> addIndex "" title node-element-substring-string Der aktualisierte Queryplan verwendet den neuen Index. dbxml> queryplan 'collection("booksrep.dbxml")/bookrep/book[contains(title, "Web")]' <XQuery> <QueryPlanToAST> <ParentOfChildJoinQP> <ValueFilterQP comparison="substring"> <ValueQP container="booksrep.dbxml" index="node-elementsubstring-string" operation="substring" child="title" value="Web"/> <Sequence> <AnyAtomicTypeConstructor value="Web" typeuri="http://www.w3.org/2001/XMLSchema" typename="string"/> </Sequence> </ValueFilterQP> ... 107 Indizierung 8/8 | Zusammenfassend: | | Indizierung ist (noch) ein mühsamer Prozess, mit viel Handarbeit und damit potentiell fehleranfällig bzw. wartungsaufwändig. Default-mäßig sollten eher zuviele Indizes angelegt werden bzw. bei Updates/Wartungsarbeiten aktualisiert werden. 108 Andere Kommandos | Verbosity für Loggingdetails (Level und Kategorie als Parameter) dbxml> setVerbose 2 2 | Hilfe dbxml> help setVerbose | Ergebnisse des letzten Kommandos im Detail dbxml> print | Transaktionen: starten mit Parameter "-t" mk084020179183:dbxml-2.4.13 sreich$ ./install/bin/dbxml -t dbxml> transaction Transaction started dbxml> commit Transaction committed dbxml> abort Transaction aborted | ... 109 Schnittstellen zu Programmiersprachen | | | | | C++ Python Java Perl PHP 110 eXist DBMS - Einleitung | | | Download von http://exist.sourceforge.net/download.html Zurzeit (Aug 2008) ist die aktuelle Version 1.2.4 ("Rennes") eXist implementiert XQuery fast vollständig (99% der offiziellen Testsuite), d.h. XQuery 1.0 und XPath 2.0 | eXist Anwendungen können in XQuery-Module strukturiert werden | Anwendungen werden als Kombination von XQuerySkripten erstellt (mit Verwendung von XSL) | Ein Java-Binding existiert 111 Anwendungen in eXist entwickeln | | | XQuery ist nicht "nur" eine Abfragesprache, sondern eine funktionale Programmiersprache, mit der man auch Anwendungsentwicklung machen kann. eXist baut stark auf XQuery auf, z.B. werden Module für HTTP Request/Response-Handling zur Verfügung gestellt, usw. Sogenannte XQuerylets fungieren als selbstständige Komponenten eXist bietet drei Arten, wie man XQueries verarbeiten kann: | | | XQueryServlet: das Servlet liest ein XQuery-Skript vom Dateisystem, führt es aus und gibt das Ergebnis als HTTP Response zurück (ähnlich zu JSP oder PHP). XQueryGenerator: ist in Apache Cocoon integriert. Die Funktionsweise ist ähnlich wie beim XQueryServlet, aber das Ergebnis wird in die Cocoon-Pipeline geliefert. REST Server: XQueries können als binäre Dokumente (Mime-Type: application/xquery) gespeichert werden und werden bei einer HTTP Anfrage (GET, POST, etc.) direkt geladen und ausgeführt. 112 Beispiel XQuery mit eXist 1/5 | Nummer erraten (http://localhost:8080/exist/xquery/guessv2.xql) xquery version "1.0"; import module namespace request="http://exist-db.org/xquery/request"; import module namespace session="http://exist-db.org/xquery/session"; import module namespace util="http://exist-db.org/xquery/util"; declare function local:random($max as xs:integer) as empty() { let $r := ceiling(util:random() * $max) cast as xs:integer return ( session:set-attribute("random", $r), session:set-attribute("guesses", 0) ) }; Eine neue Zufallszahl wird generiert und in session gespeichert; die Anzahl der Rateversuche wird auf Null gesetzt. 113 Beispiel XQuery mit eXist 2/5 declare function local:guess($guess as xs:integer, $rand as xs:integer) as element() { let $count := session:get-attribute("guesses") + 1 return ( session:set-attribute("guesses", $count), if ($guess lt $rand) then <p>Your number ({$guess}) is too small!</p> else if ($guess gt $rand) then <p>Your number ({$guess}) is too large!</p> else let $newRandom := local:random(100) return <p>Congratulations! You guessed the right number ({$guess}) with {$count} tries. Try again!</p> ) }; Der Rateversuch ("Benutzerinputzahl") wird geprüft und eine HTML-kodierte Antwort zurückgegeben (zu hoch, zu niedrig). Bei Identität wird eine neue Zahl generiert. 114 Beispiel XQuery mit eXist 3/5 declare function local:main() as node()? { session:create(), let $rand := session:get-attribute("random"), $guess := xs:integer(request:get-parameter("guess", ())) return if ($rand) then if ($guess) then local:guess($guess, $rand) else <p>No input!</p> else local:random(100) }; Die Hauptfunktion/-schleife: falls $rand gesetzt ist, wird geprüft, ob der Input des Benutzers ($guess) passt; falls nicht gesetzt, wird eine neue Zufallszahl generiert. 115 Beispiel XQuery mit eXist 4/5 <html> <head><title>eXist Example Number Guessing</title></head> <body> <form action="{session:encode-url(request:get-uri())}"> <table border="0"> <tr> <th colspan="2">Guess a number (0..100)</th> </tr> <tr> <td>Number:</td> <td><input type="text" name="guess" size="3"/></td> </tr> <tr> <td colspan="2" align="left"><input type="submit"/></td> </tr> </table> </form> { local:main() } <p><small>View <a href="guessv2.xql?_source=yes">source code</a></small></p> </body> </html> Einbettung in ein HTML-Form Konstrukt 116 Beispiel XQuery mit eXist 5/5 | Kommentare | | | | | {local:main()}: Hauptschleife Im Action-Element wird eine Session übergeben oder erzeugt: {session:encode-url(request:get-uri())} local:main() speichert die Session-Variablen "Benutzerinputzahl" und "Anzahl der Versuche" Falls noch nicht generiert, wird eine Zufallszahl erzeugt local:guess prüft, ob richtig geraten wurde und gibt einen HTML String (als Element) zurück 117 Indizes in eXist 1/2 | eXist verwendet System-interne und benutzerdefinierte Indizes | | | | | Strukturindizes: auf Elemente, Knoten, Attribute, etc. Range Indizes: auf Werte bezogen Volltextindizes: auf den Volltext der Inhalte NGram Indizes: splittet den zu indizierenden Text in Blöcke von (defaultmäßig) 3 Buchstaben, "love" z.B. in "lov", "ove", "ve_", "e_m", "_me" (wo "_" für "Blank" steht). Der Vorteil liegt in einem schnellen Finden von Teilketten. Spatial Indizes: im Testversuch, es geht um räumliche Abfragen 118 Indizes in eXist 2/2 | What is the optimal number of documents in a collection? With current eXist versions you have to find a compromise between query speed and update costs: storing all documents into a single collection results in fast queries. The drawback is that removing or replacing documents can become really slow! On the other hand, using one collection per document would guarantee that document updates run in linear time, but the query overhead would be considerable. So if you need reasonable fast updates, the recommendation is to keep the number of documents in one collection below 2000 or so. Otherwise, if you never delete documents, you can easily store some 100,000 docs into one collection.We plan to redesign the current index organization in the coming months. | http://atomic.exist-db.org/HowTo/Troubleshooting/CollectionSize Indiz dafür, dass in manchen Bereichen bei nativen XML Datenbanken noch Fingerspitzengefühl notwendig ist 119 Beispiele der Anwendungsentwicklung mit eXist | eXist bietet folgende Schnittstellen zur Anwendungsentwicklung an 1. 2. 3. 4. 5. XQuery als Abfrage und Programmiersprache (siehe erstes Beispiel) REST-Style API XML:DB Schnittstelle XML-RPC Schnittstelle SOAP Schnittstelle 120 REST 1/6 Einleitung | | | REST steht für REpresentational State Transfer und wurde von Roy Fielding definiert (http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm) REST ist keine Technologie, sondern ein "architectural style" bzw. ein Pattern, das Standardtechnologien verwendet (HTTP, URI, Mime-Types, etc.) Eckmerkmale von REST (siehe z.B. http://www.infoq.com/articles/rest-introduction) 1. 2. 3. 4. 5. Jede Ressource verfügt über eine ID Die IDs werden verlinkt HTTP Standard-Methoden werden verwendet Ressourcen können mehrere Repräsentationen haben Die Kommunikation erfolgt zustandslos 121 REST 2/6 IDs | Ressourcen und IDs | | | | | http://www.example-parts.com/parts listet alle "Parts" http://www.example-parts.com/parts?colour=green alle grünen Teile http://www.example-parts.com/parts/123 Teil mit der Nr. 123 http://www. example-parts.com/orders/2008/03 Aufträge März 2008 Alle Ressourcen können eindeutig angesprochen werden, ohne dass jedoch tatsächlich interne IDs weitergegeben werden (bzw. über die interne Repräsentation nichts bekannt ist) 122 REST 3/6 Verlinkung | Ergebnis der Abfrage „http://www.example-parts.com/parts“ <?xml version="1.0"> <parts xmlns=""...> <part ID="123" xlink:href="http://www.exampleparts.com/parts/123" /> <part ID="124" xlink:href="http://www.exampleparts.com/parts/124" /> ... | Die IDs werden verlinkt, d.h. die Detailbeschreibung für "Part 123" wird im nächsten Schritt geholt: http://www.example-parts.com/parts/123 Ergebnis ist eine Detailbeschreibung, z.B. als XML 123 REST 4/6 Standard-Methoden | REST Kommandos sollen direkt auf den HTTP Primitiven aufbauen, d.h.: GET Liste aller Teile PUT put (mit ID): update part POST ein Teil hinzufügen DELETE ein Teil löschen analog für andere Elemente | Entspricht auch der (gewünschten) Semantik des HTTP Protokolls Resource Method Representation Status Codes* Instance, e.g. part, order GET Instance format 200, 301, 410 Instance PUT Instance format 200, 301, 400, 410 Instance DELETE N/A 200, 204 All GET List format 200, 301 All POST List format 201, 400 * HTTP Status Codes: http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html 124 REST 5/6 Mehrfache Repräsentation | Über extra Parameter des Clients kann die spezifisch gewünschte Repräsentation angefragt werden: GET /customers/123 HTTP/1.1 Host: example-parts.com Accept: application/specific-xml-format Ergebnis in einem (firmenspezifischen) XML Format | Oder GET /customers/123 HTTP/1.1 Host: example-parts.com Accept: application/text/x-vcard Ergebnis als VCard 125 REST 6/6 Zustandslose Kommunikation | In REST bedeutet dies, dass Zustand entweder in den Ressourcen verankert ist oder am Client gehalten wird (nicht jedoch am Server aus Skalierungsgründen) | Zusammenfassung | | | REST ist der Grundstil des Web, verwendet daher auch alle Charakteristika des Web (Zustandslosigkeit, Proxies/Caching, Zugriffsrechte, Plattformunabhängigkeit/Standards, usw.); jede Ressource verfügt über eine URI ( auch im Sinne des Semantic Web, die unmittelbare Adressierbarkeit jeder Ressource ist daher gegeben) SOAP/Web Services, etc. (als Alternativen) haben eine höhere Komplexität, verwenden die Web-Grundbausteine (HTTP, URIs, etc.) lediglich als Plattform Der REST-Style wird beispielsweise häufig bei ATOM-Anwendungen (RSS-Feeds) angewandt 126 REST-Style mit eXist | | eXist verfügt über einen eingebauten Webserver ("Jetty") Eingehende Anfragen werden als Pfade zu "Collections" interpretiert, z.B.: | | | | | | http://localhost:8080/exist/rest/db/ shakespeare/plays/hamlet.xml zeigt das Stück "Hamlet" in der "Shakespeare-Collection" http://localhost:8080/exist/rest/db zeigt alle "Collections" (in Firefox) GET, PUT (neue Ressource bzw. ersetzend), DELETE und POST Der HTTP Authentifizierungsmechanismus wird verwendet, ohne Angabe von Benutzern wird im "guest" Modus gearbeitet 127 REST und GET | | | | Zusätzliche Parameter möglich, siehe http://exist.sourceforge.net/devguide_rest.html Beispiel: Alle Elemente vom Typ <SPEECH> in der Collection /db/shakespeare mit "Juliet" als <SPEAKER>, 5 Ergebnisse beginnend bei Nr. 3: http://localhost:8080/exist/rest/db/shakespeare?_query=// SPEECH[SPEAKER=%22JULIET%22]&_start=3&_howmany=5 Ergebnis <exist:result xmlns:exist="http://exist.sourceforge.net/NS/exist" exist:hits="118" exist:start="3" exist:count="5"> <SPEECH> <SPEAKER>JULIET</SPEAKER> <LINE>And stint thou too, I pray thee, nurse, say I.</LINE> </SPEECH> ... </exist:result> 128 REST-Style mit eXist | Anstelle XQL Dateien aus dem Dateisystem heraus auszuführen, können auch (binäre) Skripte gespeichert und direkt via URL aufgerufen werden REST style Datei guessv2.xql wird auf den Server geladen ( z.B. /db/guessv2.xql) | Aufruf als http://localhost:8080/exist/rest/db/guessv2.xql | Mime-Type muss "application/xquery" sein, der Rückgabewert des Inhalts "text/html": 1. Mime-Type im Java Admin Client prüfen 2. Eine Zeile nach den Import-Statements einfügen, sodass der Browser weiß, dass das Ergebnis als HTML dargestellt werden kann: declare option exist:serialize "method=xhtml mediatype=text/html"; | 129 eXist und XML:DB API 1/2 | | Das XML:DB API (http://xmldb-org.sourceforge.net/) ist ein standardisiertes API für XML Datenbanken. Apache Xindice beispielsweise implementiert diese Schnittstelle (http://xml.apache.org/xindice/) Wesentliche Komponenten sind | | | | | Driver: Interface zur jeweiligen Datenbanken Collection: ein (hierarchischer) Container für Resources und SubCollections Resource: XMLResource und BinaryResource als zwei mögliche Typen Service: zur Abfrage, zum Verwalten einer Collection, usw. Dieses API ist die typische Art und Weise mit eXist Anwendungen zu entwickeln 130 eXist und XML:DB API 2/2 public class QueryExample { public static void main(String args[]) throws Exception { String driver = "org.exist.xmldb.DatabaseImpl"; Class cl = Class.forName(driver); Database database = (Database)cl.newInstance(); DatabaseManager.registerDatabase(database); Collection col = DatabaseManager.getCollection( "xmldb:exist://localhost:8080/exist/xmlrpc/db"); XPathQueryService service = (XPathQueryService) col.getService("XPathQueryService", "1.0"); service.setProperty("indent", "yes"); ResourceSet result = service.query(args[0]); ResourceIterator i = result.getIterator(); while(i.hasMoreResources()) { Resource r = i.nextResource(); System.out.println((String)r.getContent()); } } } 131 eXist und XML-RPC 1/3 | | XML-RPC ist ein remote-procedure-call mit XML als Austauschformat (vergleichbar zu SOAP/WebServices, aber wesentlich "simpler" gehalten http://www.xmlrpc.org/) Beispiel: XmlRpc.setEncoding("UTF-8"); XmlRpcClient xmlrpc = new XmlRpcClient(url); xmlrpc.setBasicAuthentication("guest", "guest"); Hashtable options = new Hashtable(); options.put("indent", "yes"); ... Vector params = new Vector(); params.addElement(args[0]); params.addElement(options); String xml = (String)xmlrpc.execute("examples.getStatename", params); System.out.println(xml); ... 132 eXist und XML-RPC 2/3 | | XML-RPC: remote procedure call mit HTTP als Trägerprotokoll Beispiel-Request mit XMLRPC (http://www.xmlrpc.com/) POST /RPC2 HTTP/1.0 User-Agent: Frontier/5.1.2 (WinNT) Host: betty.userland.com Content-Type: text/xml Content-length: 181 <?xml version="1.0"?> <methodCall><methodName>examples.getStateName</methodName> <params><param><value><i4>40</i4></value></param> </params> </methodCall> 133 eXist und XML-RPC 3/3 | Antwort HTTP/1.1 200 OK Connection: close Content-Length: 158 Content-Type: text/xml Date: Fri, 17 Jul 1998 19:55:08 GMT Server: UserLand Frontier/5.1.2-WinNT <?xml version="1.0"?> <methodResponse> <params> <param> <value><string>South Dakota</string></value></param> </params> </methodResponse> 134 eXist und SOAP 1/2 | | SOAP (simple object access protocol) ist zwar mächtiger (und vor allem komplexer) als XML-RPC, aber durch gute Werkzeugunterstützung an sich leichter zu verwenden; eXist verwendet Apache Axis als SOAP toolkit; public class GetDocument { public static void main(String[] args) throws Exception { QueryService service = new QueryServiceLocator(); Query query = service.getQuery(); String session = query.connect("guest", "guest"); byte[] data = query.getResourceData(session, DBBroker.ROOT_COLLECTION + "/shakespeare/plays/hamlet.xml", true, false, false); System.out.println(new String(data, "UTF-8")); query.disconnect(session); } } 135 eXist und SOAP 2/2 | Auszug aus query.wsdl, der Web Services Schnittstelle (auch verfügbar als http://localhost:8080/exist/services/Query?WSDL) <element name="query"> <complexType> <sequence> <element name="sessionId" type="xsd:string"/> <element name="xpath" type="xsd:string"/> </sequence> </complexType> </element> 136 eXist und WebDAV 1/2 | | WebDAV fügt einige Anfragetypen zum HTTP Protokoll hinzu, die vor allem das gemeinsame Nutzen und Bearbeiten von Dateien ermöglichen. eXist unterstützt WebDAV (siehe auch http://www.webdav.org/) Anfragetyp Beschreibung PROPFIND Listing eines Verzeichnisses inkl. Metadaten MKCOL Legt ein Verzeichnis an COPY, MOVE Kopieren und Verschieben von Dateien LOCK, UNLOCK Sperren/Entsperren von Dateien PROPPATCH Ändern von Metadaten-Attributen einer Datei 137 eXist und WebDAV 2/2 | Zugriff via | | Web: http://localhost:8080/exist/webdav/db Oder auch direkt via Dateisystem, z.B. OS X oder auch Windows XP (eigener Client "webfldrs.msi", Enfold Desktop Client, NetDrive) 138 NAVIGATION, ABFRAGEN UND MANIPULATION: XPath, XQuery 139 Dokumente und Daten | | | | Entkopplung von Speicherung und Anwendungen als wesentliches Prinzip von DBMS Abfragesprachen als Schnittstelle Unterscheidung in lesende und schreibende Abfragesprachen Bei XML sind erstere bereits weit entwickelt (XQuery) Unterschiedliche Anforderungen [KST02]: Dokumentenverarbeitung Volltextsuche, Links, Reihenfolge, etc. Datenbanken und Datenaustausch Komplexe Anfragen, Joins, etc. Abfragesprache Semistrukturierte Daten, Datenintegration Flexibilität hinsichtlich Struktur, fehlende Informationselemente, etc. 140 Abfragesprachen: XQuery als Standard | Generell können zwei Typen von Ansätzen für Abfragesprachen unterschieden werden | | | Baumschablonen ("template-based", ein Ausschnitt eines Baums wird auf den gesamten Baum "gematcht"; ODER und NICHT sind schwer zu realisieren) und Pfadausdrücke (Knotenmengen werden identifiziert, indem man Pfade dazu definiert) Existierende Ansätze | | | | | XPath XQuery XQL XML-QL ... XQL XPointer XPath XSL SQL XML-QL XQL-99 Navigation, Pfadausdrücke Quilt OQL Ausdrücke Variablen-Bindung, flexible Strukturierung der Ausgabe XQuery 141 XPath [KM03] | | | | Empfehlung des W3C aus dem Jahre 1999 Grundidee ist Teile eine XML Dokuments zu adressieren Modell: Knoten sind Elemente, Kanten sind Subelementbeziehungen Drei grundlegende Konstrukte | | | Pfadausdrücke: /wurzel/baum/ast/blatt[text() = "Raupe"], z.B. "/hotel/adresse/ort" meint z.B. alle Ortsnamen aus der Hoteladresse Logische und mathematische Verknüpfungen (and, or, <, +, -, usw.) Funktionsaufrufe (text(), boolean contains(string, string) ergibt TRUE wenn das zweite Argument eine Teilzeichenkette des ersten ist, usw.) 142 Navigationsachsen in XPath [SCH03] preceding ancestor following parent preceding-sibling self following-sibling child descendant 143 XPath 1.0 und XPath 2.0 | | | | XPath 2.0 baut auf XML-Schema auf XPath 1.0 ist mengenorientiert, XPath 2.0 ist sequenzorientiert (Mengen haben keine Duplikate) XPath 2.0 unterstützt Referenzen XPath 2.0 ist W3C Recommendation, http://www.w3.org/TR/xpath20/ 144 XQuery | | | | Basiert auf "Quilt", breite Unterstützung Mittlerweile DIE Abfragesprache für XML Vom W3C definiert, von allen wesentlichen Herstellern unterstützt; durch sich oft ändernde Syntax hinken manche Implementierungen nach Sogenannte FLWOR (sprich: "Flower") Ausdrücke FOR $v IN pfad LET $v = pfad WHERE bedingung ORDER BY RETURN <element>$v</element> | | | Typkonzept von XML-Schema Mengenoperatoren UNION, INTERSECT, EXCEPT, etc. Es gibt auch eine XML Notation: XQueryX, d.h., Abfragen selbst sind XML Dokumente 145 XQuery | XQuery | | | | integriert XPath und XML-Schema Verfügt über eine (eigene) Skriptsprache Unterstützt Modularisierung, die Definition eigener Funktionen Unterstützt das Abfragen mehrerer Container 146 XQuery Beispiel [KST02] (1) <kunden> FOR $k in doc("k.xml")//käufer LET $b=count($k//bestellung[datum>2001-01-01]) WHERE $b>0 RETURN <kunde> $k/name, $k/vorname, <anzahl>$b</anzahl> </kunde> </kunden> Abfrage: Alle Käufer, die mindestens eine Bestellung nach dem 1.1.2001 abgegeben haben (2) FOR/LET $k Karl Meier Andreas Schmidt Petra Bauer Variablenbindung $b 0 1 5 WHERE $k Karl Meier Andreas Schmidt Petra Bauer Abfrage $b 0 1 5 FALSE TRUE TRUE (3) Ergebnis <kunden> <kunde> <name>Schmidt</name> <vorname>Andreas</vorname> <anzahl>1</anzahl> </kunde> ... Bauer 147 XQuery Beispiel mit Berkeley DB XML 1/2 | Unter Windows gibt's beispielsweise <oXygen/> als Werkzeug, das XQueries mit DB XML direkt unterstützt (siehe http://www.oxygenxml.com/berkeley.html). Frühere Versionen wurden auch von Stylus unterstützt (http://www.stylusstudio.com/dbxml.html) | Beispiel <person id="6641"> <name> <last>Brown</last> <first>Jim</first> <middle>Austin</middle> <nick>Big</nick> </name> <age>24</age> <phone> <office>612-555-0091</office> <home/> </phone> <street> Attn: Jim Brown Pleax Systems, Inc. 18520 25th Ave </street> <city>Minneapolis</city> <state>MN</state> <sex>male</sex> <hobby>boats</hobby> <hobby>carpentry</hobby> </person> 148 XQuery Beispiel mit Berkeley DB XML 2/2 | Container erzeugen, Dokument hinzufügen, Abfrage starten: dbxml> createContainer person Creating node storage container dbxml> putDocument person '../../berkeley-test-scriptsdata/person.xml' f Document added, name = person dbxml> contextQuery '/person[@id="6641"]/name/first' 1 objects returned for expression '/person[@id="6641"]/name/first' dbxml> print <first>Jim</first> 149 XQuery Beispiel cont. | XQuery-Skript in der eXist "Sandbox": Sinnvollerweise würde man bei echten Anwendungen den Wert einer externen Variable einlesen ("= $name") declare namespace people = "urn:something"; (: declare variable $name as xs:string external; :) declare function people:age-ok($age) { if (21 < $age and $age < 100) then true() else false() }; <people> { for $person in //person where people:age-ok($person/age/number()) and $person/name/last/string() = "Brown" order by $person/name/last return <person> <name>{$person/name/*}</name> <age>{$person/age/string()}</age> </person> } </people> 150 XQuery Beispiel cont. 151 Funktionen und Module deklarieren | User-Functions declare namespace my = "http://somewhere.org/temperature"; declare function my:celsius-to-fahrenheit ($celsius as xs:decimal) as xs:decimal { ($celsius + 32) * (9 div 5) }; my:celsius-to-fahrenheit(15) | Module module namespace temp = "http://somewhere.com/temperature"; declare function temp:celsius-to-fahrenheit ($celsius as xs:decimal) as xs:decimal { ($celsius + 32) * (9 div 5) }; ... import module namespace temp="http://somewhere.com/temperature" at "temperature.xqm"; temp:celsius-to-fahrenheit(15) 152 Formatieren der Ergebnisse in HTML | Z.B. Ergebnisse in einer Liste darstellen <ul> { for $k in doc("k.xml")//käufer order by $k return <li>{$k}</li> } </ul> | Tutorials zu XQuery: | | http://www.w3schools.com/xquery/ http://www.datypic.com/services/xquery/IntroductionToX Query.pdf 153 Updates | Drei verschiedene Ansätze | | DOM (= Document Object Model) & Co, d.h., über programmatische Schnittstellen XUpdate, eine Initiative der XML:DB Gruppe (http://www.xlmldb.org/). Der/die entsprechende/n Knoten wird/werden lokalisiert, dann erfolgt ein update, insert, etc., z.B. <xupdate:insert-before select="Pfadausdruck"> Einzufügender Knoten </xupdate:insert-before> | XQuery bei dem das RETURN Statement ersetzt wird, d.h., FOR LET WHERE RETURN UPDATE $v {INSERT | REPLACE | VALUE | DELETE | RENAME} 154 XQuery Updates 1/3 | Select-Statement declare namespace people = "urn:something"; (: declare variable $name as xs:string external; :) <people> { for $person in //person order by $person/name/last return <person> <name>{$person/name/*}</name> <age>{$person/age/string()}</age> </person> } </people> 155 XQuery Updates 2/3 | Einfügen der e-mail Adresse declare namespace people = "urn:something"; (: declare variable $name as xs:string external; :) <people> { for $person in //person order by $person/name/last return update insert <email>{$person/name/first/text()}@gmail.com</email> following $person/name/last } Der Inhalt wird unmittelbar nach dem </people> ausgewählten Knoten eingefügt 156 XQuery Updates 3/3 | Löschen des eben eingefügten Knotens: declare namespace people = "urn:something"; (: declare variable $name as xs:string external; :) <people> { for $person in //person/name/email return update delete $person } </people> 157 Zusammenfassung | | | | | | Ursprünglich mehrere verschiedene Ansätze für Abragesprachen, z.B. auch XML als Bestandteil in SQL aufzunehmen (http://www.sqlx.org/) Lange dauernde Standardisierung mit verschiedenen Zwischenstufen, XQuery als Standard XPath hat sich in XSLT bewährt, Baustein auch für andere Sprachen XQuery ist sehr mächtig aber auch komplex Updates erst seit kurzem standardisiert (als Teil von XQuery) XML Query Test Suite vom W3C verfügbar (http://www.w3.org/XML/Query/test-suite/) 158 PERFORMANZ 159 Benchmarks für XML Datenbanken 1/2 | | Benchmarks von DBMS seit langem etabliert; für XML-DBMS wurden neue Formen von Benchmarks entwickelt [Sch03] Anwendungsnahe Benchmarks | | | | | XMark (CWI, Inria, Microsoft, BEA, XQRL, Fraunhofer-IPSI): Anwendungsszenario Auktionshaus; verschiedene Anfragen werden in XQuery formuliert; gesamte DBMS entspricht einer Datei wenig aussagekräftig XMach-1 (Universität Leipzig): Mehrbenutzer-Benchmark mit dem Ziel Anfragen als auch Änderungen zu messen; misst DBMS UND Anwendungsserver wohl am Aussagekräftigsten XOO7 (National University of Singapore, University of Auckland, Arizona State University): Anpassung des OO7 Benchmarks für objektorientierte DBMS an XML DBMS. Anwendungsszenario sind vernetzte CAD/CAM Objekte mit Beschreibungen. Gemessen werden strukturelle Suche, exakte Suche, ... XBench (University of Waterloo + IBM): bietet sowohl anwendungsbezogene als auch Basisoperationen-Messung Micro-Benchmarks | Michigan Benchmark: bewertet Basisoperationen. Daten werden generiert, 16 Hierarchieebenen, bis zu 13 Kinderelemente 160 Benchmarks für XML Datenbanken 2/2 | | | Eine vergleichende Analyse der Benchmarks zeigt, dass 38% der Queries in Benchmarks eine inkorrekte XQuery Syntax aufweisen (Hintergrund ist, dass sich der Standard weiterentwickelt hat) [ An Analysis of the Current XQuery Benchmarks, L. Afanasiev, M. Marx, EXPDB 2006] Generell kann man Benchmarks als Ausgangspunkt zur Analyse der Performanz bzw. auch von Performanzschwächen und/oder Skalierungsproblemen von XML-DBMSs sehen. Auch sollte man ein XML-DBMS mit mehreren Benchmarks testen, XCheck bietet dafür eine Toolbasis (http://ilps.science.uva.nl/Resources/XCheck/) 161 Indexierung | Unterscheidung nach Typen | | | Strukturindex Wertindex Gültigkeitsbereich | | Dokument oder Collection (oder beide) 162 Zusammenfassung | | Content Repositories XML & Datenbanken XML auf allen Ebenen ... | | | | | ... aber kein gemeinsames "Modell" Hybride DBMS und native XML | | | | | Präsentationsschicht Geschäftsprozessschicht Datenhaltungsschicht Berkeley XML DBMS als embedded DBMS eXist XML DBMS mit vielen web-typischen Schnittstellen Knotenbasierte Speicherung ("Shredding") vs. Dokumentspeicherung Strukturierte vs. unstrukturierte Dokumente XQuery als Abfragesprache, mittlerweile auch mit Updates 163 Referenzen 1/2 | | | | | | | | | [Bou05] Ron Bourret. XML and databases. Technical Report, September 2005, http://www.rpbourret.com/xml/XMLAndDatabases.htm, 2005. [Bra98] Neil Bradley. The XML Companion. Addison-Wesley Publishing Company, Reading, 1998. [Bri06] Danny Brian The Definitive Guide to Berkeley DB XML, Apress 2006. [FlKo2006] Daniela Florescu, Donald Kossmann. XML Programming Techniques, SIGMOD Tutorial 2006. [Gor06] B. Gorke. XML-Datenbanken in der Praxis. Bomots Verlag; Auflage: 1 (April 2006) [Jab04] Stefan Jablonski, Ilia Petrov Christian Meiler and Udo Mayer. Guide to Web Application and Platform Architectures. Springer, 2004. [KM03] Meike Klettke and Holger Meyer. XML und Datenbanken: Konzepte, Sprachen und Systeme. dpunkt Verlag, Heidelberg, 2003. [KBS04] Dirk Krafzig, Karl Banke and Dirk Slama: Enterprise SOA. Service Oriented Architecture Best Practices, Prentice Hall PTR. The Coad Series, 2004. [KST02] Wassilios Kazakos, Andreas Schmidt, and Peter Tomczyk. Datenbanken und XML. Springer Verlag, Heidelberg, 2002. 164 Referenzen 2/2 | | | | | | | | | [KPR+06] Kappel, G., Pröll, B., Reich, S., and Retschitzegger, W., Eds. Web Engineering - The Discipline of Systematic Development of Web Applications . John Wiley & Sons, Ltd., Chichester, 2006. [MeBu06] Melton, J., and Buxton, S. Querying XML - XQuery, XPath, and SQL/XML in Context. Morgan Kaufmann, 2006. [Mei00] Meier, A., Eds. WWW und Datenbanken. HMD Praxis der Wirtschaftsinformatik, Heft 214, August 2000. [NüMa08] David Nüscheler und Michael Marth: Was ist Content? Java Magazin, 9/2008. [Pet06] Dusan Petkovic: SQL Server 2005. Eine umfassende Einführung, dpunkt Verlag, Heidelberg, 2006. [Pow07] Gavin Powell: Beginning XML Databases, Wrox, 2007. [Sch03] Harald Schöning. XML und Datenbanken. Carl Hanser Verlag, München/Wien, 2003. [Sta02] Gernot Starke. Effektive Softwarearchitekturen. Carl Hanser Verlag, München/Wien, 2002. [Wil04] Hugh E. Williams and David Lane. Web Database Applications with PHP and MySQL. O'Reilly, 2004, see http://www.oreilly.com/catalog/webdbapps2/ 165 Zustandslosigkeit von HTTP 1/13 | Problemstellung | | Zustandslosigkeit: es gibt keine „Sessions“, d.h., jeder Request wird individuell und unabhängig von den anderen betrachtet Zustandslosigkeit ist auch für "Nicht-DBMS-Anwendungen" ein Problem: | | | zum Beispiel Navigation in kontextabhängigen Dokumenten (etwa Forms) oder Präsentation der Ergebnisse einer Suche in Teilen Lösungsansätze | | | | Verwenden von versteckten Feldern Kodierung des Zustands in die URL (URL-Rewriting) Verwenden von Cookies (RFC2965) (Zugriff über geschützten Bereich und login) 166 HTTP - Hypertext Transfer Protocol 2/13 | | | The Hypertext Transfer Protocol (HTTP) is an application-level protocol with the lightness and speed necessary for distributed, collaborative, hypermedia information systems [RFC1945, RFC2616]. HTTP 1.0: in Gebrauch seit etwa 1990, seit 1996 standardisiert HTTP 1.1: erweiterte Status Codes, verbesserte Performanz durch Caching, mehrere Requests pro Verbindung, Client kann Präferenzen für Dokumenttypen angeben, Juni 1999 Collaborative/Social Software: gibt‘s jetzt mit Blogs und Wikis http://www.eweek.com/article2/0,1895,1901886,00.asp 167 HTTP Status Codes 3/13 | | | | | 1xx: Informational - erst ab HTTP 1.1 in Verwendung 2xx: Success (200 OK, 201 Created, 202 Accepted, 203 NonAuthorative Information, 204 No Content, 205 Reset Content, 206 Partial Content) 3xx: Redirection (300 Multiple Choices, 301 Moved Permanently, 302 Found, 303 See Other, 304 Not Modified, 305 Use Proxy, 307 Temporary Redirect) 4xx: Client Error (400 Bad Request, 401 Unauthorized, 402 Payment Required, 403 Forbidden, 404 Not Found, 405 Method Not Allowed, 406 Not Acceptable, 407 Proxy Authentication Required, 408 Request Timeout, 409 Conflict, 410 Gone, ... 417 Expectation Failed) 5xx: Server Error - serverseitiger Fehler bei der Bearbeitung der Anfrage (500 Internal Server Error, 501 Not Implemented, 502 Bad Gateway, 503 Service Unavailable, 504 Gateay Timeout, 505 HTTP Version Not Supported) 168 Methoden in HTTP 4/13 | GET: laden eines Objekts (entity), das durch URI identifiziert ist | HEAD: identisch zu to GET, aber ohne Objektinhalt (entity body) | POST: laden eines Datenobjekts zum URI (also zusätzlich, nicht ersetzend), z.B. für Annotationen, Nachrichten in einem Bulletinboard, Form Daten, etc. | PUT: ähnlich zu PUT in FTP, im Unterschied zu POST identifiziert der URI in PUT jenen Namen, unter dem das Datenobjekt abgelegt werden soll (d.h., falls das Objekt schon existiert, soll es ersetzt werden). 169 Methoden in HTTP cont. 5/13 | DELETE: löschen des Objekts am Server | LINK / UNLINK: erstellen/ löschen ein oder mehrerer Beziehungen zwischen URIs | OPTIONS (ab HTTP 1.1): Verhandeln von Parametern | TRACE (ab HTTP 1.1): Server retourniert die Anfrage des Clients (zum Testen und Debuggen) | CONNECT (ab HTTP 1.1): reserviert für Tunneling 170 HTTPS 6/13 | | | | HTTPS (Hypertext Transfer Protocol over Secure Socket Layer (SSL)) wurde ursprünglich von Netscape entworfen. HTTPS ist ein offenes Protokoll, um gesicherte Verbindungen zwischen Web Browsern und Servern zu ermöglichen. HTTPS verwendet den Port 443 Durch die breite Unterstützung von HTTPS und die Realisierung auf Protokollebene bleibt der Anwendungscode unverändert. 171 HTTPS cont. 7/13 | Vorgehensweise bei der Verwendung von HTTPS 1. 2. 3. 4. Client sendet Anforderung. Server antwortet mit "signed certificate". Client verifiziert, dass der "certificate signer" akzeptiert ist. Client generiert einen "session key" und sendet diesen verschlüsselt mit dem "public key" des Servers (Schritt 2) an den Server. 5. Der Server verwendet den (eigenen) "private key", um den "session key" des Clients zu entschlüsseln. 6. (Eigentliche Kommunikation über HTTP). 172 Versteckte Felder 8/13 | Versteckte Felder (werden vom Browser nicht angezeigt) enthalten Session Information, z.B. <FORM METHOD="GET" ACTION="http://host/servlet"> <INPUT TYPE="submit" NAME="sendFile" VALUE="Run"> <INPUT TYPE="hidden" NAME="item" VALUE="i4711"> <INPUT TYPE="hidden" NAME="item" VALUE="i4712"> </FORM> | Verwendung im Servlet: String []items = req.getParameterValues("item"); for (int k=0; k<items.length; k++) out.println("Your cart incl. "+items[k]+"<BR>"); ... 173 Versteckte Felder cont. 9/13 | | | | Man könnte auch nur die Session ID als Hidden Field speichern. Vorteile: browserunabhängig, keine Registrierung erforderlich Nachteil: fehleranfällig, weil versteckte Felder nicht persistent sind Extensive Verwendung in ASPX im .NET-Framework 174 Kodierung in URL 10/13 | Die Session ID wird in der URL kodiert, z.B. durch | Extra Pfad Information (die das Servlet versteht), oder http://server:80/servlet/MyServ/123 | Zusätzliche Parameter, oder http://server:81/servlet/MyServ?sessionid=123 | Eigene Notation http://server:82/servlet/MyServ;$sessionid$123 | | | | Extra Pfad Information kann Probleme verursachen, falls der Pfad verwendet werden soll Bei Verwendung zusätzlicher Parameter sind Namenskonflikte möglich, auch die Überlänge von URLs kann Probleme verursachen Seiten, die „ähnlich“ sind, aber in unterschiedliche Sessions gehören, erhalten eine andere URL (und sind daher nicht mehr ähnlich/vergleichbar bzw. können von Empfehlungssystemen nicht verwendet werden) Eine eigene Notation wird nicht notwendigerweise von allen Servern unterstützt 175 Cookies 11/13 | | | | | Ursprünglich von Netscape eingeführt (mittlerweile als RFC 2109 "HTTP State Management Mechanism" - Standards Track) RFC 2965 erklärt Netscapes Cookie Mechanismus (http://www.netscape.com/newsref/std/cookie_spec.ht ml, RFC 2109) für obsolet und definiert drei neue Header: cookie, cookie2 und set-cookie2. Cookies werden am Client gespeichert (wenn der Benutzer das erlaubt) Cookie Information wird vom Client an den Server mitgeschickt (nur jene Cookies, die vom Server gesetzt wurden) Cookies erlauben transparentes Session-Handling 176 Cookies cont. 12/13 | Minimalanforderungen | 20 Cookies pro Site | 300 Cookies insgesamt pro User | Größe je Cookie 4096 bytes. Cookie co = new Cookie("My_first_C", "Secret Info"); co.setMaxAge(60*60*24*365); //~1 Jahr res.addCookie(co); ... Cookie [] cookies = req.getCookies();//in diesem Request! 177 Session Tracking APIs 13/13 | | Z.B. in Java ab JSDK 2.0 Unterstützung hängt vom verwendeten Server/Client ab, z.B. | | | werden Cookies verwendet, oder URL Kodierung (falls Cookies nicht verfügbar sind) Jeder Benutzer eines Servers hat genau ein Session Objekt. Dieses kann mit HttpServletRequest.getSession(boolean create) abgefragt werden. 178