XML und Datenbanken XML

Transcription

XML und Datenbanken XML
PDFMAILER.DE
PROVIDED BY THE WEBMASTERS SOURCE - www.IPWD.de
XML
XML und Datenbanken
XML-Abfragesprachen
R. Oßwald, 2003 (nach einem Vortrag von J. Pokorny, Karls-Univ. Prag, Dresden, Datenbankstammtisch, April 2003)
XML-Anwendung:
§ als Standard-Protokoll für den Datenaustausch
§ zur Darstellung beliebiger logischer Datenstrukturen
§ als Grundlage für Anwendungen jenseits der bisher
gebräuchlichen Datenmodelle
§ als Datenmodell in Datenbanken für XML-Dokumente
XML und Datenbanken:
§ Datenbank aus XML-Dokumenten
§ "Mix" aus (relationaler) DB und XML-Daten
§ XML-Sicht über Nicht-XML-Daten
(und XML-Dokumenten)
§ Strukturtransformationen:
rel. Tabellen à XML-Dokument sowie
XML-Dokument à el. Tabellen
PDFMAILER.DE
PROVIDED BY THE WEBMASTERS SOURCE - www.IPWD.de
native XML-DBMS:
Tamino
(Beispiele)
Hersteller:
Software AG (Germany)
URL:
http://www.softwareag.com/tamino/
Anfragesprache: X-Query (now XQuery)
XHive/DB Hersteller:
X-Hive Corporation
URL:
http://www.x-hive.com/products/db/
Anfragesprache: XQuery
XIndice Hersteller:
The Apache Software Foundation
URL:
http://xml.apache.org/xindice/
Anfragesprache: XPath, XUpdate
XIS
Hersteller:
eXcelon Corp.
URL:
http://www.xmlquickstart.com/
Anfragesprache: XQuery
dbXML Hersteller:
dbXML Group
URL:
http://www.dbxml.com/product.html/
Anfragesprache: XPath
eXist
Hersteller:
Open Source XML Database
URL:
http://exist.sourceforge.net/
Anfragesprache: XPath (restricted)
PDFMAILER.DE
PROVIDED BY THE WEBMASTERS SOURCE - www.IPWD.de
XML-Grundlagen:
Elemente
§ Element:
Abschnitt eines XML-Dokuments mit Start- und
End-Tag
§ Elementinhalt:
Text zwischen zusammengehörenden Tags
<person>
<name> Emil Eichhorn </name>
<phone> 221 914 286 </phone>
<phone> 221 914 264 </phone>
<email> [email protected] </email>
</person>
Element
kein
Element
Ein Element kann leer sein, d.h. es hat keinen Inhalt,
z.B.:
<email> </email>
bzw. nur
</email>
§
Subelement
Attribute:
Das Start-Tag jedes Elements kann Attribute enthalten.
Mit ihnen kann der Elementinhalt näher beschrieben
werden.
<picture>
<height dim = "cm"> 2400 </height>
<width dim = "in"> 96 </width>
<data coding = "gif" compression = "zip">
sasvh678ahl17e
</data>
</picture>
PDFMAILER.DE
PROVIDED BY THE WEBMASTERS SOURCE - www.IPWD.de
Beschreibung des Dokumenttyps:
DTD = document type desctriptor
§ ordnet dem Dokument eine Struktur zu,
§ ist eine rein syntaktische (strukturelle) Beschreibung,
§ vergleichbar mit einem Datenbankschema
Beispiel:
Adressbuch
<!DOCTYPE addressbook [
<!ELEMENT addressbook (person*)>
<!ELEMENT person
(name, withtitle?, address*, (fax | phone)*, email*)>
<!ATTLIST ssn
CDATA #REQUIRED>
<!ELEMENT name
(#PCDATA)>
<!ELEMENT withtitle
(#PCDATA)>
<!ELEMENT address
(#PCDATA)>
<!ELEMENT phone
(#PCDATA)>
<!ELEMENT fax
(#PCDATA)>
<!ELEMENT email
(#PCDATA)>
]>
<person>
<name ssn=“
420529/102”
>
Emil Eichhorn </name>
<withtitle> Dr. E. Eichhorn </ withtitle>
<address> Eichenstr. 25 </address>
<address> Erfurt, 50000 </address>
<phone> 221 914 286 </phone>
<fax> 221 914 323 </fax>
<phone> 221 914 264 </phone>
<email> [email protected] </email>
</person>
genau ein Name;
max. ein Name;
so viele Adressenzeilen wie nötig;
so viele Telefon-,
Fax- und Mailzeilen
wie nötig in
beliebiger Folge;
PDFMAILER.DE
Vergleich:
PROVIDED BY THE WEBMASTERS SOURCE - www.IPWD.de
DTD ----- Datenbankschema
§ DTD ordnet dem XML-Dokument eine Struktur zu
(ähnlich wie das DB-Schema den DB-Tabellen eine
Struktur zuordnet)
§ Es gibt nur einen elementaren Datentyp: PCDATA.
§ Es gibt keine Agrregierungen, wie z.B. Mengen (sets).
§ IDREFs besitzen keinen Typ (untyped): Sie verweisen
auf etwas, aber es ist unbekannt, was das ist.
§ Element-Tags sind global.
§ Es gibt keine Methoden (vergleiche OO!).
Entsprechende Erweiterungsvorschläge für XML liegen
inzwischen vor: W3C-Entwurf von 1999;
ODMG 3.0
§ XML-Struktur entspricht einem gerichteten markierten
Graphen.
§ Die Tags entsprechen den Kanten des Graphen.
§ Die Paare von Attributname und Attributwert
entsprechen den Knotenmarkierungen des Graphen.
PDFMAILER.DE
PROVIDED BY THE WEBMASTERS SOURCE - www.IPWD.de
XML-Anfragesprachen:
§ XML-QL (proposal of W3C, 1998)
§ XPath Version 1.0 (proposal of W3C, 1999)
§ XQL (Microsoft, Texcel, webMethods, 1998)
§ XQuery 1.0 (proposal of W3C, 2003)
§ XSQL (draft ISO/IEC/JTC1/SC32WG4)
§ ...
Beispieldokument:
<addressbook>
<Person ssn=“
420529/102”
>
<name> Emil Eichhorn </name>
<withtitle> Dr. E. Eichhorn </ withtitle>
<address> Eichenstr. 25 </address>
<address> Erfurt, 50000 </address>
<phone> 221 914 286 </phone>
<fax> 221 914 323 </fax>
<phone> 221 914 264 </phone>
<email> [email protected] </email>
</person>
</addressbook>
PDFMAILER.DE
XML-QL:
Datenselektion:
PROVIDED BY THE WEBMASTERS SOURCE - www.IPWD.de
pattern matching
(Extraktion)
1.) Finde die Mail-Adresse von Eichhorn:
…
where <addressbook>
<person>
<name> Emil Eichhorn </name>
<email> $e </email>
</person>
</addressbook> in “
http://www.fhtw-berlin.de/.../add.xml”
construct $e
Ergebnis:
<XML> [email protected] </XML>
PDFMAILER.DE
PROVIDED BY THE WEBMASTERS SOURCE - www.IPWD.de
2.) Zu wem gibt es elektronische Kontakte?
…
where
<addressbook>
<person>
<withtitle>$g</withtitle>
<email>$e</email>
</person>
</addressbook> in “
http://…“
construct <e-contact>
<who>$g</who>
<where>$e</where>
</e-contact>
Ergebnis:
<XML>
<e-contact>
<who> Dr. E. Eichhorn </who>
<where> [email protected] </where>
</e-contact>
<e-contact>
<who> Prof. K. Kral </who>
<where> [email protected] </where>
</e-contact>
...
</XML>
3.) Finde alle Mail-Adressen und Faxnummern:
…
where <addressbook._*.(email | fax)>$ef</>
in “
http://www.fhtw-berlin.de/.../address.xml”
construct <emailfax>$ef</>
PDFMAILER.DE
XML-QL:
PROVIDED BY THE WEBMASTERS SOURCE - www.IPWD.de
schema browsing
4.) Finde die Tags der Subelemente von Person:
…
where <addressbook.person.$tag></>
in “
http://www.fhtw-berlin.de/.../add.xml”
construct <personelements> $tag</>
5.) Finde die Attribute der Personenelemente:
…
where <_*.person $attrname=$h> </>
in “
http://www.fhtw-berlin.de/.../ab.xml”
construct <personattr>
<name> $attrname </>
<value> $h </>
</>
weitere Möglichkeiten für Abfragen:
§ geschachtelte Anfragen (nested queries)
§ Anweisungsblöcke
§ ein Element in eine Variable speichern (element_as)
§ den Inhalt eines Elements in eine Variable speichern
(content_as)
PDFMAILER.DE
PROVIDED BY THE WEBMASTERS SOURCE - www.IPWD.de
XQL:
ähnelt XSL
Authoren:
Microsoft, Texcel.webMethods
Syntax:
§ Wurzelelement
§ Elementbegrenzer
§ beliebiger Nachfolger
§ Attributspecifikation
§ Reguläre Ausdrücke
§ Bedingungen
§ logische Operatoren
§ Vergleichsoperatoren
§ Datentypen
§
/
/book/title
/
section/heading
// /book//heading
@ @class
* /book/*/section
[ ] chapter[section]
$and$ $or$
$not$
$gt$ (>) $lt$ (<) =
string
integer float
date
PDFMAILER.DE
PROVIDED BY THE WEBMASTERS SOURCE - www.IPWD.de
Beispieldokument für XQL-Abfragen:
book
class=“H.3.3”
author
title
Peter Schäuble
chapter
chapter
heading
MM IR
heading
IS are …
section
section
In this…
heading
heading
Introduction
Weighted...
Text Retrieval
HMM
PDFMAILER.DE
PROVIDED BY THE WEBMASTERS SOURCE - www.IPWD.de
XQL-Abfrage:
6.) Finde alle Elemente heading und deren Inhalt:
book
class=“H.3.3”
author
Peter Schäuble
MM IR
Ergebnis: grün
title
chapter
chapter
heading
heading
IS are ...
section
section
In this…
heading
heading
Introduction
Weighted...
Text Retrieval
HMM
PDFMAILER.DE
PROVIDED BY THE WEBMASTERS SOURCE - www.IPWD.de
XQL-Abfrage:
7.) Finde alle Elemente chapter/heading und deren Inhalt:
("heading" als direkter Nachfolger von "chapter")
book
class=“H.3.3”
author
title
Peter Schäuble
MM IR
Ergebnis: orange
chapter
chapter
heading
heading
IS are ...
section
section
In this…
heading
heading
Introduction
Weighted...
Text Retrieval
HMM
PDFMAILER.DE
PROVIDED BY THE WEBMASTERS SOURCE - www.IPWD.de
XQL-Abfrage:
8.) Finde alle Elemente chapter/heading und deren Inhalt:
("heading" als beliebiger Nachfolger von "chapter")
book
class=“H.3.3”
author
title
Peter Schäuble
MM IR
Ergebnis: orange
chapter
chapter
heading
heading
IS are ...
section
section
heading
In this…
heading
Introduction
Weighted...
Text Retrieval
HMM
PDFMAILER.DE
PROVIDED BY THE WEBMASTERS SOURCE - www.IPWD.de
XQL-Abfrage:
9.) Finde alle Elemente chapter[heading] und deren Inhalt:
("chapter" mit "heading" als direktem Nachfolger)
book
class=“H.3.3”
author
title
Peter Schäuble
MM IR
Ergebnis:
grün/orange
chapter
chapter
heading
heading
IS are ...
section
section
In this…
heading
heading
Introduction
Weighted...
Text Retrieval
HMM
PDFMAILER.DE
PROVIDED BY THE WEBMASTERS SOURCE - www.IPWD.de
XQL-Abfrage:
10.) Finde alle Elemente chapter/section[2] und deren Inhalt:
(zweites Auftreten von "section" in "chapter")
Ergebnis: orange
book
class=“H.3.3”
author
title
Peter Schäuble
MM IR
chapter
chapter
heading
heading
IS are ...
section
section
In this…
heading
heading
Introduction
Weighted...
Text Retrieval
HMM
PDFMAILER.DE
PROVIDED BY THE WEBMASTERS SOURCE - www.IPWD.de
XQL-Abfrage:
11.) Finde alle Elemente /book[@class="H.3.3" $and$ author="Peter Schäuble"]
(alle Bücher der Klasse H.3.3 vom Autor Peter Schäuble)
Ergebnis: orange
book
class=“H.3.3”
author
title
Peter Schäuble
MM IR
chapter
chapter
heading
heading
IS are ...
section
section
In this…
heading
heading
Introduction
Weighted...
Text Retrieval
HMM
PDFMAILER.DE
XQL-Abfrage:
PROVIDED BY THE WEBMASTERS SOURCE - www.IPWD.de
semijoin
12.) Finde alle Elemente /addressbook/person[name=/book/author]
(die Adressen der Personen, die auch Autor eines Buchs sind)
PDFMAILER.DE
PROVIDED BY THE WEBMASTERS SOURCE - www.IPWD.de
XQuery:
§ XQuery ist eine funktionale Sprache:
– Eine Abfrage ist ein Ausdruck.
– Ausdrücke können beliebig vielfältig werden.
– Eigene Funktionen können wahlweise definiert
werden.
– Ein Abfrageausdruck kann aus (Teil-)
Abfrageausdrücken zusammengesetzt werden.
§ Elemente:
– Pfad-Ausdrücke
– FLWR-Ausdrücke: FOR ... LET ... WHERE ... RETURN
– Elementkonstruktoren:
<e> ... </e>
– Variable und Konstanten:
$x, 5
– Operatoren und Funktionsaufrufe: x + y, -z, avg()
– Bedingte Anweisungen:
IF ... THEN ... ELSE
– Quantifikatoren:
EVERY var IN expr SATISFIES expr
– Sortierung:
expr SORTBY (expr ASCENDING, ...)
– vorläufige Vorschläge für:
INSERT, REPLACE, DELETE
Beispieldokument für XQuery-Abfragen:
<bib>
<book year="1994">
<title>Multimedia IR</title>
<author>
<last>Schäuble</last>
<first>Peter</first>
</author>
<publisher>Kluwer Academic</publisher>
<price> 98</price>
</book>
</bib>
PDFMAILER.DE
PROVIDED BY THE WEBMASTERS SOURCE - www.IPWD.de
XQuery-Abfragen:
13.) Pfad-Ausdrücke:
# XQuery benutzt die vereinfachte Syntax
# von XPath für Pfad-Ausdrücke
document(“
bib.xml”
)
/bib/book/author
//author[last=“
Schäuble”and first=“
Peter”
]
document(“
bib.xml”
)//author
# Bereichsausdruck:
/bib/book/author[1 TO 2]
# BEFORE und AFTER:
//book[author[last=“
Viannu”
] BEFORE
author[last=“
Abiteboul”
]]
# Namespaces:
NAMESPACE rev = "www.reviews.com”
//rev:rating
# Dereferenz:
//publisher/web/@href->html
PDFMAILER.DE
PROVIDED BY THE WEBMASTERS SOURCE - www.IPWD.de
XQuery-Abfragen:
14.) FLWR-Ausdruck:
(vergleichbar mit SELECT... FROM ... WHERE von SQL)
FOR $book IN document("bib.xml")//book
WHERE $book/publisher = "Kluwer Academic"
RETURN
<book>
{
$book/title,
$book/author
}
</book>
15.) Verwendung von FOR bzw. LET:
§ FOR führt eine Anweisungsfolge (Sequenz) für jeden
Knoten wiederholt aus und bindet eine Variable bei
jedem Durchlauf an den gerade bearbeiteten Knoten.
§ LET bindet eine Variable an die Anweisungsfolge als
Ganzes.
FOR $book IN document("bib.xml")//book
LET $a := $book/author
WHERE contains($book/publisher, "Kluwer Academic”
)
RETURN
<book>
{
$book/title,
<count> Number of authors: { count($a) } </count>
}
</book>
PDFMAILER.DE
PROVIDED BY THE WEBMASTERS SOURCE - www.IPWD.de
XQuery-Abfragen:
16.) Inner Join:
FOR $book IN document("www.bib.com/bib.xml")//book,
$quote IN
document("www.bookstore.com/quotes.xml")//listing
WHERE $book/isbn = $quote/isbn
RETURN
<book>
{ $book/title }
{ $quote/price }
</book>
SORTBY (title)
17.) Outer Join:
FOR $book IN document("bib.xml")//book
RETURN
<book>
{ $book/title }
{
FOR $review IN document("reviews.xml")//review
WHERE $book/isbn = $review/isbn
RETURN $review/rating
}
</book>
SORTBY (title)
PDFMAILER.DE
PROVIDED BY THE WEBMASTERS SOURCE - www.IPWD.de
XQuery-Abfragen:
18.) Kombination von Ausdrücken:
<bibliography>
{FOR $book IN document("bib.xml")//book
RETURN
<book>
{
$book/author,
$book/title
}
</book>
SORTBY (author, title)
}
</bibliography>
<bibliography>
{
FOR $book IN Expression
RETURN
Expression
}
</bibliography>
<bibliography>
{FOR $book IN document("bib.xml")//book
RETURN
<book>
{
$book/author,
$book/title
}
</book>
SORTBY (author, title)
}
</bibliography>
PDFMAILER.DE
PROVIDED BY THE WEBMASTERS SOURCE - www.IPWD.de
XQuery-Funktionen:
§ Built-in-Funktionen:
– max(), min(), sum(), count(), avg()
– distinct(), empty(), contains()
– Die normative Menge ist noch nicht endgültig
festgelegt worden
§ nutzerdefinierte Funktionen
– entsprechend den Regeln der XQuery-Syntax
– rekursive Funktionen sind möglich
– können typbehaftet (typed) sein
§ Erweiterungen sind geplant
19.) Anwendung von Funktionen in einer Abfrage:
FUNCTION depth(ELEMENT $e) RETURNS integer
{
-- Ein leeres Element entspricht der Tiefe 1,
-- anderenfalls addiere 1 bis zur maximalen Anzahl der Kinder.
IF empty($e/*)
THEN 1
ELSE max(depth($e/*)) + 1
}
depth(document("partlist.xml"))
PDFMAILER.DE
PROVIDED BY THE WEBMASTERS SOURCE - www.IPWD.de
20.) Umkehrung der Hierarchie:
<bib>
<book year="1994">
<title>Multimedia IR</title>
<author>
<last>Schäuble</last>
<first>Peter</first>
</author>
<publisher>Kluwer Academic</publisher>
price> 98</price>
</book>
</bib>
aktuelle Forderungen:
§ Datensuche per Schlüsselwort
(ähnlich wie in Volltextsystemen),
§ nutzerdefinierte Funktionen,
§ automatische Abstract-Generierung
(basierend auf dem Begriff der Dokumentenähnlichkeit
bzw. der Verwandtschaft von Ausdrücken)
§ Indexierung
§ Darstellung von Ergebnisdaten in XML-Form
(auf externen Medien)
PDFMAILER.DE
PROVIDED BY THE WEBMASTERS SOURCE - www.IPWD.de
Grundregel für den Sprachentwurf:
C.A.R. Hoare:
"The language designer should be familiar with many
alternative features designed by others, and should have
excellent judgment in choosing the best and rejecting any
that are mutually inconsistent...
One thing he should not do is to include untried ideas of his
own. His task is consolidation, not innovation."