DBS IIb SS03 mit XML

Transcrição

DBS IIb SS03 mit XML
4 XML und Datenbanken
XML wird von Internet Explorer ab Version 5.0 und von Netscape ab Version
6 unterstützt.
XML-Datenbanken mit der Anfragesprache XQuery sind z.B. Tamino von
der Software AG (erste kommerzielle Implementierunmg von XQuery in
Version 4.1, Dez. 2002) und IBM DB2-Xperanto (geplant für 1. Halbjahr
2003).
4.1 XML als Dokumentbeschreibungssprache
Die Grundidee von Dokumentbeschreibungssprachen (markup language) ist
die unabhängige Beschreibung von
• Struktur (z.B. Kapitel, Unterkapitel, Absätze),
• Inhalt (der eigentliche Text, Bilder) und
• Aussehen (z.B. Textschrift, Textstil, Textgröße, Position des Bildes)
eines Dokuments.
Dafür wurde schon 1986 SGML (standard generalized markup language)
genormt.
Von SGML leiten sich sowohl HTML (hypertext markup language) als auch
XML (extensible markup language) (www.w3.org/XML/) ab.
XML wurde 1996 von einer Arbeitsgruppe unter Jon Bosik entwickelt und ist seit
1998 eine Empfehlung (recommendation) des World Wide Web Consortiums
(W3C).
XML dient zur Strukturierung, Speicherung und Austausch –nicht zur
Darstellung– von Information.
Ein XML-Dokument tut nichts (führt keine Anweisungen aus).
XML basiert auf Unicode; daher sind in XML-Dokumenten viele Zeichen
erlaubt, deutsche Umlaute genauso wie chinesische Zeichen.
Brüggemann, Vorlesungsnotizen zu Datenbanksysteme IIb, Uni Hannover, Sommersemester 2003 179
Einschub: Unicode
Die Zeichenmenge Unicode hat zum Ziel, alle auf der Welt gängigen Schriften
und Zeichen zu umfassen.
Die ersten 128 Zeichen von Unicode stimmen mit US-ASCII überein;
die ersten 256 Zeichen entsprechen ISO-8859-1 (Latin-1), dem Zeichensatz für
die meisten europäischen Sprachen.
Ein Code aus Unicode wird mit der Notation U+xxxx geschrieben; dabei ist
xxxx eine vierstellige Hexadezimalzahl.
Z.B. steht U+0020 für ein Leerzeichen, U+000A ist der Zeilenumbruch
(line feed) und U+20AC für das €-Symbol.
Zwei gängige Codierungen von Unicode sind UTF-8 und UTF-16.
In UTF-8 werden alle Codes kleiner als 128 in einem Byte codiert (damit ist
jeder US-ASCII-Text auch UTF-8 codiert), andere Zeichen mit zwei, drei oder
vier Bytes.
In UTF-16 werden alle Codes kleiner als 65536 in zwei Bytes codiert, alle
anderen Zeichen mit vier Bytes.
Brüggemann, Vorlesungsnotizen zu Datenbanksysteme IIb, Uni Hannover, Sommersemester 2003 180
Einschub: Unterschiede zwischen XML und HTML
•
XML wurde zur Beschreibung von Daten entworfen, HTML zur
Darstellung von Daten.
•
Elemente sind in HTML vordefiniert, in XML müssen sie erst definiert
werden.
•
In XML haben alle Elemente eine Endmarke. In HTML gibt es Elemente
ohne Endmarke (z.B. <HR>) oder mit optionaler Endmarke (z.B. <P>).
•
XML unterscheidet –anders als HTML– bei Elementen und Attributen
zwischen Groß- und Kleinschreibung.
•
Argumente von Attributen müssen stets in Anführungsstriche gesetzt
werden; in HTML sind Anführungsstriche nur notwendig, wenn das
Argument Sonderzeichen enthält.
•
Mehrere Leerzeichen werden in XML nicht –wie in HTML– zu einem
Leerzeichen zusammengefasst.
•
Eine neue Zeile wird in XML stets –wie in Unix– durch ein LF (line feed)
dargestellt, nicht durch ein CR (carriage return) –wie im Mac OS– oder
durch CR LF –wie in Windows–.
•
Ein fehlerhaftes XML-Dokument wird nicht bearbeitet, ein fehlerhaftes
HTML-Dokument wird dagegen i.d.R. –oft sogar richtig– angezeigt.
•
XML basiert auf Unicode; Umlaute können daher direkt statt des
umständlichen &auml; bzw. &szlig; dargestelt werden.
Brüggemann, Vorlesungsnotizen zu Datenbanksysteme IIb, Uni Hannover, Sommersemester 2003 181
4.1.1 Elemente und Attribute
Ein XML-Dokument ist in XML-Elemente gegliedert.
Ein Element wird durch Marken (tags) begrenzt;
Marken werden in spitze Klammern eingeschlossen, um sie vom normalen
Text zu unterscheiden: <XXX>.
Der Name der Marke XXX darf Buchstaben, Ziffern und Sonderzeichen
enthalten, aber nicht mit einer Ziffer, einem Sonderzeichen oder XML (in allen
Groß- und Kleinschreibvarianten) beginnen.
Einige Zeichen ( - . : ) können manchmal zu Komplikationen führen und
sollten daher nicht im Namen enthalten sein. Da die Attribute einer Datenbank
oft mit den Elementen eines XML-Dokuments korrespondieren, sollte man
auch die Namensregeln des Datenbanksystems berücksichtigen.
Ein Element beginnt mit einer Anfangsmarke
einer Endmarke </XXX>.
<XXX> und endet stets mit
Dazwischen liegt der Inhalt (content) des Elements; der Inhalt kann aus
einfachem Text und/oder weiteren Elementen bestehen, er kann auch leer sein.
Elemente können dadurch hierarchisch geschachtelt werden.
Anfangsmarken können ein oder mehrere XML-Attribute enthalten, die
durch Zwischenraum getrennt werden.
Ein Attribut kann ein Argument haben, das direkt nach dem Attribut und
einem Gleichheitszeichen –stets in doppelte oder einfache Anführungsstriche
eingeschlossen– angegeben wird, z.B. <XXX YYY="zzz">.
Ein leeres Element, d.h. ein Element mit Anfangsmarke, leerem Inhalt und
Endmarke:
<XXX YYY="zzz"> </XXX>
darf auch kurz
<XXX YYY="zzz"/>
geschrieben werden (auch ohne Attribute).
Die Reihenfolge der Elemente in einem Dokument, die Dokumentenreihenfolge
(document order), hat oft eine Bedeutung.
Dagegen ist die Reihenfolge der Attribute in einer Anfangsmarke stets irrelevant.
Brüggemann, Vorlesungsnotizen zu Datenbanksysteme IIb, Uni Hannover, Sommersemester 2003 182
In XML sind die Marken nicht vordefiniert wie in HTML, sondern müssen in
einer Dokumenttypdefinition (DTD, document type definition) oder einem
XML Schema definiert werden.
XML-Dokumente sind erweiterbar; das Hinzufügen von neuen Elementen
stört vorhandene Anwendungen nicht.
Ein XML-Dokument besteht aus
• einem (optionalen) Prolog,
• einer (optionalen) DTD oder Schema und
• einem einzigen Element, dem Wurzelelement, das weitere Elemente
enthalten kann.
Außerdem können (ungeschachtelte) Kommentare <!-- text --> und
Verarbeitungsanweisungen (processing instruction) <? anweisung ?>
vorkommen.
Beispiel:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE note SYSTEM "order.dtd">
<!-- über dieser Zeile steht eine externe DTD -->
<order>
<customer>Schmidt</customer>
<position>
<isbn>1-234-56789-0</isbn>
<number>2</number>
<price currency="Euro">30.00</price>
</position>
</order>
Brüggemann, Vorlesungsnotizen zu Datenbanksysteme IIb, Uni Hannover, Sommersemester 2003 183
Ein XML-Dokument kann vorteilhaft als Baum dargestellt werden:
order
customer
position
Schmidt
isbn
number
price
1-234-56789-0
2
30.00
@currency
Euro
Die Kinder eines Element(knoten)s können z.B. Text-, Element- oder
Attrributknoten sein.
Attributknoten sind hier mit dem Präfix @ gekennzeichnet.
Die Baumdarstellung legt folgende Redeweise nahe:
• Das erste Element eines XML-Dokuments heißt Wurzelelement.
• Bei geschachtelten Elementen heißt das äußere Element Elternelement,
das innere Element Kindelement.
Brüggemann, Vorlesungsnotizen zu Datenbanksysteme IIb, Uni Hannover, Sommersemester 2003 184
Die gleichen Daten können in Attributen oder als Kindelement gespeichert
werden.
<person sex="female">
<firstname>Anna</firstname>
<lastname>Smith</lastname>
</person>
<person>
<sex>female</sex>
<firstname>Anna</firstname>
<lastname>Smith</lastname>
</person>
Da Attribute insbesondere keine strukturierten Werte enthalten können und
nicht einfach erweiterbar sind, sind Kindelemente i.d.R. (außer für künstliche
Schlüssel) vorzuziehen.
Eine Faustregel ist:
Daten sollten durch Elemente dargestellt werden, Metadaten durch Attribute.
Ein XML-Dokument heißt wohlgeformt (well-formed), wenn es syntaktisch
korrekt ist.
Am Anfang des Dokuments nennt man dazu die XML-Version und den
verwendeten Zeichensatz:
<?xml version="1.0" encoding="ISO-8859-1"?>
Ein XML-Dokument heißt gültig (valid), wenn es semantisch korrekt ist, d.h.
zu den Regeln seiner DTD oder seinem XML Schema passt.
Dazu gibt man am Anfang des Dokument den Dateinamen der DTD an:
<!DOCTYPE note SYSTEM "order.dtd">
In der DTD sind insbesondere die Namen der definierten Elemente angegeben.
XML-Dokumente sollten validiert werden (z.B.
www.w3schools.com/dom/dom_validate.asp), da sie sonst nicht
bearbeitet werden können.
Brüggemann, Vorlesungsnotizen zu Datenbanksysteme IIb, Uni Hannover, Sommersemester 2003 185
Texte, die vom XML-Prozessor unverändert als textueller Inhalt (nicht als
Marke!) übernommen werden sollen, können als CDATA-Abschnitt
gekennzeichnet werden.
<![CDATA[ text ]]>
CDATA-Abschnitte lassen sich nicht schachteln.
Formatanweisungen (entities) dienen zur Formatierung einzelner Zeichen.
Sie werden durch die Zeichen & und Semikolon ; geklammert.
In XML sind folgende fünf Entities vordefiniert:
lt (für <), gt (für >), amp (für &), quot (für ") und apos (für ').
Analog kann man z.B. das Unicode-Zeichen U+00FF hexadezimal als
&#xFF; oder dezimal als &#255; schreiben.
Brüggemann, Vorlesungsnotizen zu Datenbanksysteme IIb, Uni Hannover, Sommersemester 2003 186
4.1.2 Kanonische Form von XML-Dokumenten
In XML kann dieselbe Information auf verschiedene Art syntaktisch formuliert
werden:
•
•
•
•
•
•
•
•
•
Ein leeres Element kann auf zwei verschiedene Arten notiert werden.
Ein Attributwert kann in einfache oder doppelte Anführungszeichen
eingeschlossen werden.
Die Attributreihenfolge ist beliebig.
Attributwerte können über eine Vorbelegung oder durch explizite
Zuweisung auf denselben Wert gesetzt werden.
Die Kodierung von XML-Dokumenten kann unterschiedlich sein.
Ein Zeichen kann direkt, als dezimale Zeichenreferenz oder als
hexadezimale Zeichenreferenz dargestellt sein.
Daten können in oder außerhalb von CDATA-Abschnitten vorliegen.
Für denselben Namensraum können verschiedene Kürzel verwendet
werden.
Namensraumdefinitionen können redundant und/oder an verschiedenen
Stellen vorgenommen werden.
Diese syntaktische Vielfalt erschwert es festzustellen, ob zwei Dokumente
logisch äquivalent sind.
Für diesen Zweck führt man die kanonische Form von XML-Dokumenten
(Canonical XML) ein, indem bestimmte Regeln auf Elemente, Attribute,
Namensräume etc. angewendet werden, z.B.:
• Alle Wertebelegungen (z.B. durch Vorbelegung) werden zu expliziten
Attributen.
• Die Attribute eines Elements werden alphabetisch sortiert.
Brüggemann, Vorlesungsnotizen zu Datenbanksysteme IIb, Uni Hannover, Sommersemester 2003 187
4.2 Beschreibung der Datenbankwerte in XML
Eine relationale Datenbank (als Menge von Mengen von Tupeln) kann z.B.
wie folgt in XML modelliert werden:
<db>
<relation1>
<tupel-relation1>
<attribut1>Wert1</attribut1>
<attribut2>Wert2</attribut2>
…
</tupel-relation1>
<tupel-relation1>
<attribut1>Wert1</attribut1>
<attribut2>Wert2</attribut2>
…
</tupel-relation1>
…
</relation1>
<relation2>
…
</relation2>
…
</db>
Eine logische Datenbank (als Menge von Grundfakten) kann z.B. in XML
wie folgt modelliert werden:
<db>
<grundfakt1>
<attribut1>Wert1</attribut1>
<attribut2>Wert2</attribut2>
…
</grundfakt1>
<grundfakt2>
…
</grundfakt2>
…
</db>
Brüggemann, Vorlesungsnotizen zu Datenbanksysteme IIb, Uni Hannover, Sommersemester 2003 188
4.3 Vokabular und Schema
Im Gegensatz zu HTML sind in XML die Typen der Elemente nicht vorab
festgelegt, die in einem Dokument vorkommen können.
Insbesondere müssen die Namen der Elemente und der Attribute, das
Vokabular, festgelegt werden.
Im einfachsten Fall geschieht dies –ohne Schema– durch Benutzung der
Elemente und Attribute im (wohlgeformten) XML-Dokument selbst.
Stets müssen folgende Eindeutigkeitsbedingungen erfüllt sein:
• Die Namen der Elementtypen müssen innerhalb des Dokuments eindeutig
sein.
• Die Namen der Attribute müssen innerhalb eines Elements eindeutig sein.
Systematischer kann die Festlegung des Vokabulars durch eine Schemadefinition geschehen:
• durch eine Dokumenttypdefinition –wie generell in SGML– oder
• durch ein XML Schema Dokument.
Jedes XML Dokument bestimmt aber (im Gegensatz zu Datenbanken) selbst,
ob und falls ja, welches Schema es hat.
Natürlich können mehrere Dokumente das gleiche Vokabular benutzen.
Dazu beziehen sich die Dokumente –am einfachsten– auf die gleiche (externe)
DTD oder XML Schema-Definition.
Manchmal möchte man sogar in einem Dokument verschiedene Vokabulare
(vielleicht sogar mit z.T. gleichen Namen und verschiedener Bedeutung) benutzen.
Brüggemann, Vorlesungsnotizen zu Datenbanksysteme IIb, Uni Hannover, Sommersemester 2003 189
Mengen von Namen können zu Namensräumen zusammengefasst werden:
Ein Namensraum (name space, ns) ist eine URI (z.B. eine URL).
In einem Dokument wird innerhalb eines Elements mit dem Attrribut xmlns
auf einen Namensraum verwiesen:
xmlns:kürzel="datei"
Dabei wird für einen Namensraum ein Kürzel festgelegt, das nur innerhalb
dieses Dokuments gültig ist. Alle Element- und Attributnamen, die dieses
Kürzel als Präfix haben, beziehen sich auf diesen Namensraum.
Das Kürzel und der eigentliche Name werden durch einen Doppelpunkt
getrennt; insgesamt entsteht ein qualifizierter Name:
[kürzel : ] lokaler_Name
Der Namensraum mit dem leeren Kürzel (ε) (default name space)
xmlns="datei"
gilt für alle Elementnamen ohne Präfix; nicht jedoch für Attributnamen.
Der Gültigkeitsbereich einer Namensraumdefinition ist das Element, in dem die
Namenraumdefinition steht mit allen Unterelementen, sofern dort das Kürzel
nicht umdefiniert wird.
Brüggemann, Vorlesungsnotizen zu Datenbanksysteme IIb, Uni Hannover, Sommersemester 2003 190
4.4 Dokumenttypdefinition (DTD)
Eine (interne) Dokumenttypdefinition hat folgenden Rahmen:
<!DOCTYPE Dokumenttypname [
…
]>
In einer Dokumenttypdefinition können Elementtypen und Attributtypen
beschrieben werden.
Die Reihenfolge der Definitionen in der DTD spielt keine Rolle.
Alle Definitionen in der DTD sind global.
4.4.1 Elementtypen
Bei der Definition eines Elementtyps wird sein Name und –eingeschlossen in
runden Klammern– sein möglicher Inhalt festgelegt.
<!ELEMENT name (content)>
Der Inhalt (content) kann aus Zeichenketten (#PCDATA (parsed character data))
oder Elementtypen bestehen oder leer (EMPTY) sein.
Beispiel:
<!ELEMENT artikel (name, hersteller)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT hersteller (#PCDATA)>
Ein Element vom Typ artikel hat name und hersteller als
Unterelemente.
Dabei gibt es folgende Strukturierungsmöglichkeiten zur Beschreibung des
Inhalts:
• Eine Liste (sequence) von Elementtypen
element1, element2, …, elementn
beschreibt, dass ein Elementtyp genau n Unterelemente hat, die genau
einmal und in der vorgegebenen Reihenfolge vorkommen.
• Eine Auswahl (choice) von Elementtypen
element1 | element2 | … | elementn
beschreibt, dass ein Elementtyp ein Unterelement hat, entweder
element1 oder element2 … oder elementn.
Brüggemann, Vorlesungsnotizen zu Datenbanksysteme IIb, Uni Hannover, Sommersemester 2003 191
Die Häufigkeit des Auftretens von Unterelementen kann durch Postfixe
festgelegt werden (analog zur regulären Ausdrücken):
• ein Unterelement darf höchstens einmal angegeben werden (0–1): ?
• ein Unterelement kann beliebig oft angegeben werden (0–n): *
• ein Unterelement muss mindestens einmal angegeben werden (1–n): +
Beispiele für die Häufigkeit der Unterelemente B eines Elements A:
für eine (0,1)-Häufigkeit: <!ELEMENT A (B?)>
für eine (0,n)-Häufigkeit: <!ELEMENT A (B*)>
für eine (1,1)-Häufigkeit: <!ELEMENT A (B)>
für eine (1,n)-Häufigkeit: <!ELEMENT A (B+)>
für eine (2,5)-Häufigkeit: <!ELEMENT A (B, B, (B, (B, B?)?)?)>
Beispiel:
<!ELEMENT Anschrift
(((Straße, Hausnr?) | Postfach), PLZ, Ort)>
Eine Anschrift kann aus Straße und evtl. Hausnummer oder aus einem Postfach
bestehen; in beiden Fällen müssen zusätzlich Postleitzahl und Ort angegeben sein.
Direkte oder indirekte Rekursion ist möglich.
<!ELEMENT Knoten (Knoten*)>
Brüggemann, Vorlesungsnotizen zu Datenbanksysteme IIb, Uni Hannover, Sommersemester 2003 192
4.4.2 Attributtypen
Schließlich können in der DTD auch die für ein Element zulässigen Attribute
definiert werden.
In einer Attributliste kann man mehrere Attributtypen eines Elements definieren:
<!ATTLIST elementname attrname Typ Häufigkeit/Vorbelegung
attrname Typ Häufigkeit/Vorbelegung
…
>
Beispiel: Ein Attributtyp status wird definiert, das als Wert drei Konstanten
annehmen kann (Standardwert ist normal).
<!ATTLIST artikel status (normal|neuheit|angebot) "normal">
Folgende Typen kann man in einer Attributliste verwenden.
• Zeichenketten (CDATA),
• den Identifikatortyp ID. Die Werte aller ID-Attribute müssen im Dokument
eindeutig sein (selbst wenn es sich um verschiedene Attribute handelt),
• den Referenztyp auf den Identifkatortyp IDREF (bei Listen von Referenzen
IDREFS),
• ein einzelnes Token (eine Folge von Buchstaben, Zahlen und bestimmten
Sonderzeichen, aber ohne Leerzeichen) NMTOKEN (name token) (bei Listen
von Token NMTOKENS),
• Aufzählungstypen, deren einzelne Werte durch senkrechten Strich getrennt
und in runde Klammern eingeschlossen sind und die Token sein müssen.
Außerdem kann man noch Angaben zur Häufigkeit und Vorbelegung machen.
Da derselbe Attributname innerhalb eines Elements höchstens einmal vorkommen
darf, bleibt bzgl. der Häufigkeit nur zu klären, ob ein Attribut vorkommen muss
oder nicht.
• #REQUIRED bedeutet, dass das Attribut vorkommen muss; in allen
anderen Fällen ist das Attribut optional.
• #IMPLIED bedeutet, dass das Attribut keinen Vorbelegungswert hat, falls
es nicht angegeben wird.
• "Vorbelegungswert" bedeutet, dass das Attribut diesen Vorbelegungswert
hat, falls es nicht angegeben wird.
• #FIXED bedeutet, dass der Attributwert als Konstante angesehen wird.
Brüggemann, Vorlesungsnotizen zu Datenbanksysteme IIb, Uni Hannover, Sommersemester 2003 193
Verweise innerhalb desselben Dokuments können mit Hilfe von Attributen
des Typs IDREF erfolgen. Das Verweisziel benötigt ein Attribut des Typs
ID.
Beispiel:
<!ELEMENT
<!ATTLIST
<!ELEMENT
<!ATTLIST
…
artikel (name, beschreibung?)>
artikel id ID #REQUIRED>
bestellposition (name, anzahl, gesamtpreis)>
bestellposition artikel IDREF #REQUIRED>
<artikel id="01">
<name>Bohrmaschine</name>
<beschreibung> …
</beschreibung>
</artikel>
…
<bestellposition artikel="01">
<name>Bohrmaschine</name>
<anzahl>1</anzahl>
<gesamtpreis>299</gesamtpreis>
</bestellposition>
Diese Verweise können nicht typisiert werden, d.h. man kann bei einem
IDREF-Attribut nicht angeben, zu welchem Elementtyp das referenzierte IDAttribut gehört..
4.4.3 Entitydefinitionen
In einer DTD können als Entities auch häufig genutzte Textbausteine definiert
werden:
<!ENTITY SGDH "Sehr geehrte Damen und Herren,">
Auch binäre Daten, wie z.B. Bilder, können als Entity definiert werden:
<!ENTITY Ziege SYSTEM "Bilder/Ziege.gif" NDATA gif>
Brüggemann, Vorlesungsnotizen zu Datenbanksysteme IIb, Uni Hannover, Sommersemester 2003 194
4.5 XML Schema
XML Schema bietet –allgemeiner als DTDs– Möglichkeiten zur
• Verwendung von Datentypen,
• Strukturierung durch komplexe Datentypen, Kardinalitäten und
Elementdeklarationen,
• Spezifikation von Integritätsbedingungen (Eindeutigkeit, Schlüssel,
Fremdschlüssel),
• Wiederverwendung (Schemadokumentation, Modularisierung, Erweiterung).
Außerdem entspricht ein XML Schema-Dokument –im Gegensatz zur DTD–
der XML-Syntax.
Das Vokabular von XML Schema wird festgelegt durch den Namensraum
http://www.w3.org/2001/XMLSchema (oft mit dem Präfix xs).
In unseren Beispielen verzichten wir aus Platzgründen auf die Angabe dieses
Präfixes.
Schema-bezogene Attribute aus dem Namensraum
http://www.w3.org/2001/XMLSchema-instance dürfen in jedem
XML-Dokument stehen (oft mit Präfix xsi).
Insbesondere die Einbettung einer Schemadefinition erfolgt für einen XMLTeilbaum mit Hilfe dieses Namensraums:
<marke xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance" xsi:schemaLocation="Namensraumdefinition">
bzw. ohne Namensraumdefinition
<marke xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance" xsi:noNameSpaceSchemaLocation="file:…">
Brüggemann, Vorlesungsnotizen zu Datenbanksysteme IIb, Uni Hannover, Sommersemester 2003 195
Wie bei einer Dokumenttypdefinition gibt es auch in XML Schema Konstrukte
für die Deklaration von Elementen und Attributen:
• <element
name="elementName" type="typName" />
• <attribute name="attrName"
type="typName" />
Für Attribute und für Elemente mit einfachen Typen können Standardwerte
mittels default vergeben werden.
Konstante Werte können als fixed gekennzeichnet werden.
Attribute haben stets einen einfachen Typ.
Bei Attributen kann festgelegt werden, ob sie wahlweise (use="optional")
angegeben werden können oder stets erforderlich sind (use="required").
Brüggemann, Vorlesungsnotizen zu Datenbanksysteme IIb, Uni Hannover, Sommersemester 2003 196
4.5.1 Datentypen in XML Schema
XML Schema unterscheidet zwischen einfachen und komplexen Typen. Die
Werte einfacher Typen bestehen aus nur einem Textknoten (PCDATA).
Elemente mit Unterelementen können durch komplexe Typen beschrieben
werden.
XML Schema beschreibt einfache Typen durch
• ihren Wertebereich (value space),
• ihre Repäsentation (lexical space) in XML-Dokumenten und
• ihre (fundamentalen und einschränkenden) Eigenschaften (facet).
Fundamentale Eigenschaften wie Gleichheit, Ordnung, obere und untere
Schranken, Kardinalität sind unveränderlich.
Einschränkende Eigenschaften können zur Ableitung neuer Typen benutzt
werden.
4.5.1.1 Einfache Datentypen in XML Schema
Einfache Typen in XML Schema sind (neben Listen- und Vereinigungstypen)
folgende atomare Typen:
•
Der Typ Boolean umfasst die Werte "true" und "false" (ohne Ordnung).
•
Der Typ String bescheibt Zeichenketten mit Zeichen aus dem kompletten
Unicode-Zeichenvorrat. Eine Ordnungsrelation ist nicht festgelegt, da sie
sprachabhängig wäre, aber für Anwendungen definierbar.
•
Der Typ anyURI ist der Typ für Uniform Resource Identifier wie URLs.
•
diverse numerische Datentypen:
Brüggemann, Vorlesungsnotizen zu Datenbanksysteme IIb, Uni Hannover, Sommersemester 2003 197
decimal
integer
nonPositiveInteger
nonNegativeInteger
negativeInteger
positiveInteger
double
(64 Bit)
long
unsignedLong
(–263…263–1)
(0…264–1)
float
(32 Bit)
(–231…231–1)
int
unsignedInt
(0…232–1)
short
unsignedShort
(–215…215–1)
(0…216–1)
byte
(–27…27–1)
unsignedByte
(0…28–1)
Die oberen Datentypen haben einen unbegrenzten Wertebereich zur
Beschreibung von Zahlen mit beliebiger Genauigkeit, bei den unteren
Datentypen ist der Wertebereich begrenzt.
Brüggemann, Vorlesungsnotizen zu Datenbanksysteme IIb, Uni Hannover, Sommersemester 2003 198
•
Ebenso gibt es vielfältige temporale Datentypen zur Beschreibung von
Zeitpunkten, wiederkehrenden Zeitpunkten und Zeitdauern:
Zeitpunkte
dateTime
wiederkehrende Zeitpunkte
Zeitdauer
time
duration
(HH:MM:SS.SSSS[ZHH:MM]) ([–]PnYnMnDTnHnMnS)
date
(CCYY–MM–DD)
gMonthDay
(– –MM–DD)
gYearMonth
(CCYY–MM)
gMonth
(– –MM– –)
gYear
(CCYY)
gDay
(– – –DD)
Die Repräsentation für den Typ dateTime ist
CCYY-MM-DDTHH:MM:SS.SSSSZHH:MM
CC steht dabei für das Jahrhundert, YY für das Jahr, MM für den Monat,
DD für den Tag, HH für die Stunden (0-23), MM für die Minuten,
SS.SSSS für die Sekunden(bruchteile) und
HH:MM für die Zeitzonendifferenz (ggf. mit Vorzeichen).
Weitere XML-spezifische einfache Datentypen sind
•
normalizedString (Zeichenketten ohne Zeilenumbrüche und Tabulatoren),
•
token (Zeichenketten ohne Zeilenumbrüche, Tabulatoren, keine Leerzeichen
am Anfang und Ende sowie mehrfache Leerzeichen sonst),
•
language (Typ für die zweibuchstabigen Standardsprachidentifikatoren
(ISO 639)),
•
Name (Typ für alle in XML erlaubten Bezeichner), NCName (für alle
erlaubten Namensraumbezeichner), QName (für alle Bezeichner mit einem
Namensraumpräfix), Notation (für alle Notationsbezeichner), Entity (für
alle Entitätsbezeichner),
•
ID und IDREF(S) sind Typen für die Schlüssel bzw. Fremdschlüssel.
Brüggemann, Vorlesungsnotizen zu Datenbanksysteme IIb, Uni Hannover, Sommersemester 2003 199
4.5.1.2 Durch Einschränkungen abgeleitete einfache Datentypen
Durch einschränkende Eigenschaften können –ausgehend von einem Basistyp–
neue einfache Typen definiert werden mit der gleichen Ordnung und Repräsentation,
aber kleinerem Wertebereich.
Folgende Einschränkungen (restriction) stehen zur Verfügung:
•
enumeration gibt eine Menge von abschließend aufgezählten Werten vor,
•
length, minLength, maxLength legt bei Zeichenketten die (exakte,
minimale, maximale) Anzahl der (Unicode-)Zeichen fest,
bei Listen die Anzahl der Listenelementen,
•
minInclusive, minExclusive, maxExclusive, maxInclusive legt bei
numerischen Typen Unter- bzw. Obergrenzen fest; mit xxxInclusive lassen
sich abgeschlossene Intervalle, mit xxxExclusive offene Intervalle beschreiben,
•
totalDigits, fractionDigits legt bei numerischen Datentypen mit beliebiger
Genauigkeit Beschränkungen für die maximale Anzahl der Ziffern bzw. für die
Anzahl der Nachkommastellen fest,
•
pattern beschreibt bei Zeichenketten den Wertebereich durch einen
regulären Ausdruck (Perl-ähnlich),
•
whiteSpace beschreibt den Umgang mit Leerraum. Die Option preserve
lässt Leerraum unverändert, durch die Option replace werden Tabulatoren
und Zeilenumbruch durch ein Leerzeichen ersetzt, collapse bewirkt, dass
führende, mehrfache und endständige Leerzeichen entfernt werden.
Beispiele: Ein Typ Währung soll beliebig große Beträge, aber nur zwei
Nachkommastellen zulassen:
<simpleType name="waehrung">
<restriction base="decimal">
<fractionDigits value="2" />
</restriction>
</simpleType>
Brüggemann, Vorlesungsnotizen zu Datenbanksysteme IIb, Uni Hannover, Sommersemester 2003 200
Ein Typ Telefonnummer soll internationale Telefonnummern im Format
+Landeskennzahl (Ortskennzahl) Anschluss zulassen (d steht für Ziffer):
<simpleType name="telefonnummer">
<restriction base="string">
<pattern value="\+\d+\(\d+\)\d+" />
</restriction>
</simpleType>
Ein Typ Bundesland soll nur die deutschen Bundesländer zulassen:
<simpleType name="bundesland">
<restriction base="string">
<enumeration value="Baden-Württemberg" />
<enumeration value="Bayern" />
…
</restriction>
</simpleType>
Brüggemann, Vorlesungsnotizen zu Datenbanksysteme IIb, Uni Hannover, Sommersemester 2003 201
4.5.2 Komplexe Typen
Komplexe Typen sind erforderlich, falls ein Element Attribute, Kindelemente
oder einen leeren Inhalt haben soll.
Definitionen von komplexen Typen beginnen mit dem complexTypeElement.
Um die Kindelemente festzulegen, werden innerhalb der Definition
Typkonstruktoren verwendet.
•
Durch den Typkonstruktor sequence wird ein kartesisches Produkt
von Elementtypen definiert. Ein Element dieses Typs ist dann eine
(geordnete) Liste der angegebenen Elemente.
•
Durch den Typkonstruktor choice wird eine Vereinigung von
Elementtypen definiert. Ein Element dieses Typs ist dann ein Element
eines dieser Elementtypen.
•
Durch den Typkonstruktor all wird festgelegt, dass bestimmte
Elemente vorkommen müssen, aber in beliebiger Reihenfolge. Innerhalb
des all-Konstruktors sind keine weiteren Konstruktoren erlaubt und
keine wiederholbaren Elemente.
Die Typkonstruktoren sequence und choice können beliebig
geschachtet werden, der Konstruktor all ist nur auf der obersten Ebene
zulässig.
Brüggemann, Vorlesungsnotizen zu Datenbanksysteme IIb, Uni Hannover, Sommersemester 2003 202
4.5.2.1 Kardinalitäten
Für jedes Element kann festgelegt werden, wie oft ein Element auftreten darf.
Die Attribute minOccurs und maxOccurs können als Werte natürliche
Zahlen annehmen oder den Wert unbounded (∞).
Insbesondere lässt sich so festlegen, ob ein Element optional (minOccurs=0)
und/oder wiederholbar (maxOccurs>1) ist.
Der Standardwert für minOccurs und maxOccurs ist 1 !
Beispiel:
<complexType name="Katalog">
<sequence>
<element name="Eintrag" type="Katalogelement" />
minOccurs="0" maxOccurs="unbounded" />
</sequence>
</complexType>
<complexType name="Katalogelement">
<sequence>
<element name="name" type="string" />
<element name="beschreibung" type="string"
minOccurs="0" maxOccurs="1" />
</sequence>
<attribute name="katalogElementID" type="integer" />
</complexType>
Brüggemann, Vorlesungsnotizen zu Datenbanksysteme IIb, Uni Hannover, Sommersemester 2003 203
4.5.2.2 Abgeleitete komplexe Typen
Von einem komplexen Typ können weitere komplexe Typen abgeleitet werden,
einerseits durch Einschränkung der Instanzen (restriction), andererseits
als Erweiterung durch Hinzufügen weiterer Elemente (extension).
Aus der Beziehung zwischen abgeleiteten Typen und ihren Basistypen entsteht
eine Ableitungshierarchie.
Da nur jeweils ein Basistyp angegeben werden kann, gibt es keine
Mehrfachvererbung: die Typen bilden einen Baum.
Dabei gilt jeder komplexe Typ als von anyType abgeleitet,
jeder einfache Typ als von anySimpleType.
Die Restriktion eines Typs ist durch folgende Einschränkungen möglich:
•
Verschärfung der Kardinalitäten: Durch Heraufsetzen von minOccurs
oder Herabsetzen von maxOccurs werden für den abgeleiteten Typ weniger
Instanzen zugelassen.
•
Attributvorkommen: Ein –im Basistyp optionales– Attribut wird (durch
use="prohibited") weggelassen.
•
Attributwert: Dem Attribut wird ein Standardwert oder ein konstanter
Wert zugeordnet.
•
Festlegen von Typen, falls für ein Element noch kein Typ festgelegt war.
Oder Ersetzen eines einfachen Typs durch eine Einschränkung dieses Typs.
•
Wegfall von Oder-Knoten.
Brüggemann, Vorlesungsnotizen zu Datenbanksysteme IIb, Uni Hannover, Sommersemester 2003 204
Bei der Erweiterung eines Basistyps können neue Attribute und Elemente
(hinten) angehängt werden:
Beispiel:
<complexType name="Artikel">
<extension base="Katalogelement">
<element name="hersteller" type="string" />
<element name="lieferzeit" type="duration" />
<element name="bild"
type="anyURI" />
<element name="stückpreis" type="währung" />
</extension>
</complexType>
Die Einschränkung und Erweiterung eines Typs können durch Setzen des
Attributs final in der Typdefinition verhindert werden:
• final="restriction" verbietet weitere Einschränkungen,
• final="extension" verbietet weitere Erweiterungen,
• final="#all" verbietet beides.
Das Attribut abstract="true" verhindert, dass ein Typ direkt, also ohne
abgeleitet worden zu sein, verwendet wird.
Brüggemann, Vorlesungsnotizen zu Datenbanksysteme IIb, Uni Hannover, Sommersemester 2003 205
4.5.3 Integritätsbedingungen
Schlüsseleigenschaften sichern zu , dass eine bestimmte Attributkombination
(ohne Nullwerte!) nur ein einziges Mal vorkommt.
Fremdschlüssel verweisen auf den (existierenden!) Schlüssel eines
Gegenstands.
4.5.3.1 Nullwerte
Nullwerte drücken aus, dass für ein bestimmtes Element kein Wert vorhanden ist.
Auf Typebene kann ein Nullwert zugelassen werden oder nicht, indem bei dem
entsprechenden Element das Attribut nillable auf true oder false gesetzt wird.
Einem Element kann dann ein Attribut nil (xsi:nil="true")
hinzugefügt werden.
4.5.3.2 Schlüssel- und Eindeutigkeitsbedingungen
In XML Schema besteht eine Schlüsseldeklaration aus drei Teilen:
•
dem Kontext, in dem die Schlüsseleigenschaft gelten soll; das ist das
Element, wo der Schlüssel definiert wird,
•
der Selektor, der eine Menge von Knoten definiert, die durch den
Schlüssel eindeutig identifizierbar sein sollen, und
•
eine Menge von Feldern (Elemente und Attribute), die den Identifikator
für jeden der selektierten Knoten festlegen.
<element name="kontext">
…
<key name="Schlüsselname">
<selector xpath="Selektor" />
<field xpath="Schlüsselattribut1" />
<field xpath="Schlüsselattribut2" />
…
</key>
</element>
Brüggemann, Vorlesungsnotizen zu Datenbanksysteme IIb, Uni Hannover, Sommersemester 2003 206
Beispiel: Personen sind an Hand ihres Namens, Vornamens und Geburtsdatums eindeutig identifizierbar.
<complexType name=PersonTyp">
<element name="name" type="string" />
<element name="vormane" type="string" />
<element name="geburtsdatum" type="date" />
<element name="adresse" type="adressTyp" />
</complexType>
<element name="personen">
<complexType>
<sequence>
<element name="person" type="PersonTyp"
minOccurs="0" maxOccurs="unbounded" />
</sequence>
</complexType>
<key name="personenschlüssel">
<selector xpath="person" />
<field xpath="name" />
<field xpath="vorname" />
<field xpath="geburtsdatum" />
</key>
</element>
Ersetzt man key durch unique, so ist die spezifizierte Attributkombination
ebenfalls eindeutig, darf aber Nullwerte enthalten.
Brüggemann, Vorlesungsnotizen zu Datenbanksysteme IIb, Uni Hannover, Sommersemester 2003 207
4.5.3.3. Fremdschlüsselbedingungen
Die Fremdschlüsseldefinition ist ähnlich wie die Schlüsseldefinition:
<element name="kontext">
…
<keyref name="Fremdschlüsselname" refer="Schlüsselname">
<selector xpath="Selektor" />
<field xpath="Fremdschlüsselattribut1" />
<field xpath="Fremdschlüsselattribut2" />
…
</keyref>
</element>
Die Reihenfolge der Fremdschlüsselattribute muss dabei zur Reihenfolge der
Schlüsselattribute passen.
Brüggemann, Vorlesungsnotizen zu Datenbanksysteme IIb, Uni Hannover, Sommersemester 2003 208