XML und Datenbanken

Werbung
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ö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
"ö" >
...
]>
<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ö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
Herunterladen