6. Datenbankdefinitionssprachen Relationales Modell: SQL

Werbung
6. Datenbankdefinitionssprachen
Relationales Modell: SQL-DDL
■
SQL-DDL Teil der Standardsprache für relationale
Datenbanksysteme: SQL
■
ODL (Object Definition Language) für objektorientierte
Datenbanksysteme nach dem ODMG-Standard
■
Objektrelationale Konzepte
◆ DDL-Erweiterungen von SQL:1999
◆ Oracle9i
■
SQL-DDL umfaßt alle Klauseln von SQL, die mit Definition
von
■
Typen
■
Wertebereichen
■
Relationenschemata
■
Integritätsbedingungen
zu tun haben
XML: DTD und XML Schema
VL Datenbanken I – 6–1
Anforderungen an eine relationale DDL
■
nach Codd 1982 Sprachmittel zur Definition von
1. Attributen
2. Wertebereichen
3. Relationenschemata
4. Primärschlüsseln
5. Fremdschlüsseln
■
Praxis SQL-89: Relationenschemata mit
◆ Attributen und
◆ Wertebereichen
■
ab SQL-92 vollständig
VL Datenbanken I – 6–3
VL Datenbanken I – 6–2
SQL als Definitionssprache
■
Externe Ebene
◆ create view
◆ drop view
■
Konzeptuelle Ebene
◆ create table
◆ alter table
◆ drop table
VL Datenbanken I – 6–4
SQL als Definitionssprache II
■
Konzeptuelle Ebene (SQL-92)
◆ create domain
◆ alter domain
◆ drop domain
■
Interne Ebene
◆ create index
◆ alter index
◆ drop index
Die Anweisung create table
create table basisrelationenname (
spaltenname_1 wertebereich_1 [not null],
...
spaltenname_k wertebereich_k [not null])
VL Datenbanken I – 6–5
Erlaubte Wertebereiche in create table
■
integer (oder auch integer4, int), smallint (oder auch
integer2)
■
float(p) (oder auch kurz float)
■
decimal(p,q) und numeric(p,q) mit jeweils q
Nachkommastellen
■
character(n) (oder kurz char(n), bei n = 1 auch char ) für
Strings fester Länge n
■
character varying(n) (oder kurz varchar(n)) für Strings
variabler Länge bis zur Maximallänge n
■
bit(n) oder bit varying(n) analog für Bitfolgen
■
date, time bzw. timestamp für Datums-, Zeit- und
kombinierte Datums-Zeit-Angaben
VL Datenbanken I – 6–7
VL Datenbanken I – 6–6
Die Anweisung create table II
Mit not null können in bestimmten Spalten Nullwerte als
Attributwerte ausgeschlossen werden:
create table Bücher (
ISBN char(10) not null,
Titel varchar(200),
Verlagsname varchar(30) )
VL Datenbanken I – 6–8
Beispiel Tabellendefinition mit IEF
SQL-89 Level 2 mit IEF
■
zweite Stufe der SQL-89-Norm sieht Zusatz IEF
(Integrity Enhancement Feature) vor
■
Definition von Schlüsseln und Fremdschlüsseln
create table Bücher (
ISBN char(10) not null,
Titel varchar(200),
Verlagsname varchar(30),
primary key (ISBN),
foreign key (Verlagsname)
references Verlage (Verlagsname)
)
VL Datenbanken I – 6–9
VL Datenbanken I – 6–10
Erweiterungen in SQL-92
create table in SQL-92
create table Bücher (
ISBN char(10),
Titelvarchar(200),
Verlagsname varchar(30),
primary key (ISBN),
foreign key (Verlagsname)
references Verlage (Verlagsname)
)
Neben Primär- und Fremdschlüssel in SQL-92:
■
default-Klausel: Defaultwerte für Attribute
■
create domain-Anweisung benutzerdefinierte
Wertebereiche
■
check-Klausel weitere lokale Integritätsbedingungen
innerhalb der zu definierenden Wertebereiche, Attribute
und Relationenschemata
not null implizit durch die primary key-Klausel
VL Datenbanken I – 6–11
VL Datenbanken I – 6–12
Integritätsbedingungen mit check I
Definition eines Wertebereichs
create domain Gebiete varchar(20)
default ’Informatik’
create table Vorlesungen (
V_Bezeichnung varchar(80) not null,
SWS smallint,
Semester smallint,
Studiengang Gebiete )
create domain Gebiete varchar(20)
default ’Informatik’ check (
value in ( ’Informatik’, ’Mathematik’,
’Elektrotechnik’, ’Linguistik’) )
create table Mitarbeiter (
PANr integer not null,
AngNr char(10) not null,
Fachbereich Gebiete,
Gehalt decimal(10,2),
Raum integer,
Einstellung date )
VL Datenbanken I – 6–13
Integritätsbedingungen mit check II
VL Datenbanken I – 6–14
Integritätsbedingungen mit check III
create table Vorlesungen (
V_Bezeichnung varchar(80) not null,
primary key,
SWS smallint check(SWS ≥ 0),
Semester smallint check(
Semester between 1 and 9),
Studiengang Gebiete )
VL Datenbanken I – 6–15
create table Buch_Versionen (
ISBN char(10),
Auflage smallint check(Auflage > 0),
Jahr integer check
(Jahr between 1800 and 2020),
Seiten integer check(Seiten > 0),
Preis decimal(8,2) check(Preis ≤ 250),
primary key (ISBN, Auflage),
foreign key (ISBN) references Bücher (ISBN),
check
((select sum(Preis) from Buch_Versionen)<
(select sum(Budget) from Lehrstühle)))
VL Datenbanken I – 6–16
alter table und drop table
■
alter table-Kommando in SQL-2
Syntax des alter table-Kommandos in SQL-89:
alter table basisrelationenname
add spaltenname wertebereich
add spaltenname wertebereich
auch Angabe von Default-Werten und check-Klauseln
erlaubt:
alter table Lehrstühle
add Budget decimal(8,2)
■
Statt
add Budget decimal(8,2) default 10000
check (Budget > Anzahl_Planstellen ∗ 1000)
Wirkung:
Änderung des Relationenschemas im Data Dictionary
(ein neues Attribut wird dem Relationenschema
Lehrstühle zugeordnet)
◆ Erweiterung der existierenden Basisrelation um ein
Attribut, das bei jedem existierenden Tupel mit null
besetzt wird
◆
VL Datenbanken I – 6–17
alter- und drop-Klausel für Attribute
■
Die Klausel
alter spaltenname default_änderung
Die Anweisung drop table
drop table basisrelationenname
{ restrict | cascade }
nur Änderung der Defaultwerte, nicht Änderung von
Datentypen
■
VL Datenbanken I – 6–18
restrict und cascade analog zum drop bei Attributen
Die Klausel
drop spaltenname { restrict | cascade }
erlaubt Löschen von Attributen, falls
◆ keine Sichten und Integritätsbedingungen mit Hilfe
dieses Attributs definiert wurden (im Fall restrict)
◆ oder mit gleichzeitiger Löschung dieser Sichten und
Integritätsbedingungen (im Fall cascade)
VL Datenbanken I – 6–19
VL Datenbanken I – 6–20
Die Anweisung create index
Simulierte Schlüsselbedingung
SQL-89: Bestandteil der Norm
create table Bücher (
ISBN char(10) not null,
Titel varchar(200),
Verlagsname varchar(30) )
create [unique] index indexname
on basisrelationenname (
spaltenname_1 ordnung_1,
...,
spaltenname_k ordnung_k
)
create unique index Buchindex
on Bücher
(ISBN asc)
VL Datenbanken I – 6–21
Objektorientiertes Modell: ODL
VL Datenbanken I – 6–22
ODL: Konzepte
■
Datendefinitionssprache der ODMG für
Objektdatenbanken
■
Schnittstelle: Spezifikation des abstrakten Verhaltens
eines Typs
■
programmiersprachenneutral (Erweiterung der
OMG-IDL)
■
Klasse: Spezifikation des abstrakten Verhaltens und
Zustands eines Typs
■
Beschreibung der Schnittstellen (Objekttypen)
◆ Attribute, Beziehungen, Methodensignaturen
■
Attribut: benannte Eigenschaften von Literal- oder
Objektdatentypen
■
Implementierung in konkreter Programmiersprache
◆ Mapping für C++, Java, Smalltalk
◆ Präprozessor, Schema-Compiler
■
Beziehungen: Verweise (Referenzen) auf andere
Objekte (einstellig/mehrstellig)
■
Operationen: Methoden mit Parametern, Rückgabewert,
Ausnahmen
VL Datenbanken I – 6–23
VL Datenbanken I – 6–24
ODL: Beispiel
Erläuterung ODL-Beispiel
class Student : Person (
extent Studenten, key matrnr)
attribute char matrnr[6];
attribute string studienfach;
attribute set<struct<float note, string fach>>
zeugnis;
Objekttyp Personen beschreibt
■
Typhierarchie: Angabe der Obertypen hinter dem
Typnamen (hier: Obertyp Person)
■
relationship Person mutter inverse Person::kind;
relationship Person vater inverse Person::kind;
Extension, in der die aktuell erzeugten Objekte vom Typ
Student gesammelt werden sollen (hier: Extension mit
dem Namen Studenten)
■
float durchschnittsnote ()
raises (keine_note);
void exmatrikulation (in string art)
raises (buecher_ausgeliehen);
Schlüssel des Objekttyps, eine Auswahl der Attribute,
die zur eindeutigen Identifizierung der Objekte
unabhängig von der Objektidentität verwendet werden
können (hier: nur das Attribut matrnr)
■
Attribute mit Datentypen und Namen
}
VL Datenbanken I – 6–25
Erläuterung ODL-Beispiel II
■
■
VL Datenbanken I – 6–26
ODL: Vererbung
Beziehungen zu anderen Klassen mit dem Wortsymbol
relationship
◆ auch inverse Beziehungen
◆ ermöglichen Wahl zwischen 1:1-, 1:n, und n:mKardinalitäten
◆ hier: zwei 1:n-Beziehungen Vater und Mutter
zwischen Studenten und Personen, da nur die
Rückrichtung einen Set-Typ enthält: set<Person>
kind
■
isA-Beziehung (Generalisierung/Spezialisierung):
Vererbung von Verhalten
interface Object { ...};
interface Dokument : Object { ...};
■
extends-Beziehung: Vererbung von Verhalten und
Zustand (nur Einfachvererbung)
class Buch : Dokument { ...};
class Monographie
extends Buch { ...};
Methoden mit ihrer Schnittstelle und einer spezifizierten
Ausnahmebehandlung, die im Fehlerfall ausgelöst wird
(etwa bei Verletzung von Integritätsbedingungen)
VL Datenbanken I – 6–27
VL Datenbanken I – 6–28
ODL: Beziehungen
■
ODL: Beziehungen (II)
Umsetzung von m:n-Beziehungen
besucht(Student[0,*], Vorlesung[0,*])
■
class Vorlesung {
relationship set<Student> wird_besucht_von
inverse Student::besucht;
...
}
Umsetzung von Beziehungen mit Attributen
wird_geprüft(Student[0,*], Vorlesung[0,*]; Note)
class Pruefung {
attribute int note;
relationship Vorlesung fach
inverse Vorlesung::pruefung;
relationship Student pruefling
inverse Student::pruefung;
}
class Student {
relationship set<Pruefung> pruefung
inverse Pruefung::pruefling;
...
}
class Student {
relationship set<Vorlesung> besucht
inverse Vorlesung::wird_besucht_von;
...
}
VL Datenbanken I – 6–29
Java-ODL: Beispiel
Java-ODL
■
VL Datenbanken I – 6–30
Nutzung von Java-Klassendefinitionen als DDL
◆ keine neue Sprache notwendig
◆ aber nur eingeschränkte Definitionsmöglichkeiten
■
teilweise Ergänzung mittels Informationen aus
Konfigurationsdateien
■
Persistenzfähigkeit von Java-Klassen durch
◆ Präprozessor : Verarbeitung einer
Java-Klassendefinition, Extraktion der notwendigen
Schemainformationen, Hinzufügen von
DB-spezifischem Code
◆ Postprozessor : Verarbeitung von kompilierten
Bytecode, Code-Modifikation entsprechend
Persistenzanforderungen
VL Datenbanken I – 6–31
public class Author {
private String firstname, lastname;
public Author (String first, String last) {
firstname = first;
lastname = last;
}
public String getLastName () {
return lastname;
}
public String getFirstName () {
return firstname;
}
}
VL Datenbanken I – 6–32
Java-ODL: Beispiel (II)
SQL:1999
public class Book {
private String isbn, title;
private Category classifiedIn;
private ListOfObject writtenBy;
public Buch (String isbn) {
this.isbn = isbn;
writtenBy = new ListOfObject ();
}
...
■
SQL:1999 – aktuelle Version des SQL-Standards der
ISO
■
u.a. Unterstützung objektrelationaler Konzepte →
Verbindung von Konzepten objektorientierter
Datenbankmodelle mit SQL
◆ nutzerdefinierte Datentypen,
Vererbung/Spezialisierung, Methoden
■
bisher nur teilweise umgesetzt: IBM DB2, Oracle9i,
PostgreSQL, . . . (jeweils mit proprietären Varianten)
}
VL Datenbanken I – 6–33
SQL:1999: Neue Datentypen
■
VL Datenbanken I – 6–34
BLOB und CLOB
BLOB, CLOB: Datentypen für große
Binär-/Zeichenkettenobjekte (binary/character large
objects)
■
Boolean: boolesche Werte TRUE, FALSE, UNKNOWN
■
Array: Kollektionstyp für mehrwertige Attribute
■
REF-Typen: zur eindeutigen Identifikation von Tupeln
(OID) sowie zur Navigation über Pfadausdrücke
■
ROW-Typen: Typkonstruktor für strukturierte Attribute
■
nutzerdefinierte Datentypen: Konstruktion neuer Typen
VL Datenbanken I – 6–35
■
Speicherung großer Zeichenketten/Binärfolgen
◆
Bilder, Audio-/Videodaten, XML-Dokumente, . . .
■
Angabe der max. Größe erforderlich
■
Grenzen sind systemspezifisch
■
Beispiel
create table Professoren (
...
Foto blob(100K));
■
erfordern spezielle Behandlung beim Zugriff
■
Einschränkungen: kein Primär-/Fremdschlüssel, keine
Gruppierung/Sortierung
VL Datenbanken I – 6–36
Kollektionsdatentypen
Kollektionsdatentypen: Beispiel
■
Datentypen zur Speicherung mehrerer Werte für ein
Attribut
■
array-Typkonstruktor
◆
◆
create table Bücher (
titel
varchar(100),
isbn
varchar(10),
preis
decimal(5,2),
abstract clob(10K),
autoren varchar(20) array[5]
);
Elementdatentyp
max. Kardinalität k
■
Notation
datentyp array[k]
■
keine Schachtelung möglich!
■
unterstützte Operationen: Indexzugriff (1 . . . k ), Länge
VL Datenbanken I – 6–37
Anonyme ROW-Typen
VL Datenbanken I – 6–38
Nutzerdefinierte Datentypen (UDT)
■
Typkonstruktor für strukturierte Attribute
■
Definition abstrakter Datentypen
■
anonym → kein expliziter Typname
■
Unterscheidung in
■
Notation
row (fname1 , ftyp1 , ..., fnamen , ftypn )
■
Beispiel:
create table Kunden (
name varchar(50),
adresse row (strasse varchar(30),
plz char(5),
ort varchar(30))
);
VL Datenbanken I – 6–39
Distinct-Typen: Definition eines Datentyps direkt als
„Umbenennung“ eines Basisdatentyps
◆ Strukturierte Typen: Typkonstruktor für benannte
strukturierte Datentypen
◆
VL Datenbanken I – 6–40
Distinct-Typen
Strukturierte Typen
■
Umbennung existierender Typen zur Einführung von
Typ-Inkompatibilitäten
■
nur für Attribute, Parameter, Variablen
■
Beispiel:
create type meter as integer final;
create type quadratmeter as integer final;
■
kein Vergleich/Zuweisung von Attributen verschiedener
Distinct-Typen
create table Grundstück (
laenge meter, breite meter,
flaeche quadratmeter);
; breite und flaeche sind inkompatibel
■
Typkonstruktor zur Definition abstrakter Datentyp
■
verwendbar für Attribute, Parameter, Variablen, Tabellen
■
Beispiele:
create type Adresse as (
strasse varchar(30),
plz char(5),
ort varchar(30))
) not final
create type Kunde as (
knr int,
name varchar(30),
lieferadresse Adresse
) not final
VL Datenbanken I – 6–41
Subtyping
VL Datenbanken I – 6–42
Strukturierte Typen: Methoden
■
Definition von Untertypen als Erweiterung existierender
Datentypen (UDTs)
■
Notation:
untertyp under supertyp
■
keine Mehrfachvererbung zulässig
■
bei Typdefinition
◆ not final: Subtyping zulässig
◆ final: keine Bildung von Untertypen
■
Beispiel:
create type Person as ( ...) not final
create type Kunde under Person as
( ...) not final
■
SQL-Funktionen/Prozeduren, die UDT zugeordnet sind
■
Besonderheiten:
impliziter SELF-Parameter (vergleichbar this in C++,
Java)
◆ getrennte Spezifikation von Signatur und
Implementierung
◆ automatisch generierte set/get-Methoden für alle
Attribute eines Typs
◆
VL Datenbanken I – 6–43
VL Datenbanken I – 6–44
Methoden: Beispiel
Strukturierte Typen für Tabellen
create type Kunde as (
...
) not final
method gesamt_bestellsumme() returns decimal(9,2))
create method gesamt_bestellsumme() for Kunde
begin
...
end
■
Definition von Tabellen auf Basis strukturierter Typen ;
Objektrelation
◆ Attribute werden Spalten
◆ zusätzliche Spalte für OID (benötigt für REF-Typen)
■
Beispiel:
create table Kunden of Kunde (
ref is oid user generated)
◆
◆
Kunde ist Tabellentyp
Adresse ist Spaltentyp
VL Datenbanken I – 6–45
Objektidentifikatoren
■
VL Datenbanken I – 6–46
REF-Typ
Bildung von Objektidentifikatoren für Tupel in
Objektrelationen (unveränderliche IDs)
■
Typ für Referenzen auf Instanzen eines strukturierten
Datentyps (Tupel einer Objektrelation)
◆
■
Notation:
ref(strukturierter-typ)
[ scope gültigkeitsbereich ]
■
Gültigkeitsbereich:
ref is ...user generated
nutzerdefinierte/-vergebene OID
◆ ref is ...system generated
systemgenerierte OID
◆ ref from (Attributliste)
OID wird abgeleitet von anderen Attributen (z.B.
Primärschlüssel)
VL Datenbanken I – 6–47
vorgegebene Tabelle
◆ alle Tabellen
◆ ...
◆
VL Datenbanken I – 6–48
REF-Typ: Beispiel
Objektrelationale Typen in Oracle9i
create type Person as (
personalnr
integer,
name
varchar(30),
vorgesetzter ref(Person))
■
Unterstützung objektrelationaler Konzepte in Oracle seit
Version 8
■
Abweichungen vom SQL-Standard
■
proprietäre Erweiterungen
create table Angestellte of Person ( ...)
■
Methodenimplementierung in PL/SQL
■
Konzepte: UDTs, REF, Kollektionen, Methoden,
Subtyping
create table Abteilungen (
name varchar(10),
leiter ref(Person) scope(Angestellte),
mitarbeiter ref(Person)
scope(Angestellte) array[10]
)
VL Datenbanken I – 6–49
Oracle: Typdefinition
VL Datenbanken I – 6–50
Oracle: Objekttabellen
■
Definition von Datentypen für Attribute, Variablen und
Tabellen (row objects)
■
Notation:
create type name as object (...)
VL Datenbanken I – 6–51
■
Tabellen mit Objekten (Instanzen eines UDT) als Tupel
■
Beispiel:
create table Kunden of Kunde;
■
Interpretation
◆ Tabelle mit einer Spalte von Objekten
◆ Tabelle mit (mehreren) Spalten, die Attributen des
UDT entsprechen
VL Datenbanken I – 6–52
Oracle: Objekttabellen (II)
■
Oracle: Kollektionen
Objektidentifikatoren
◆ object identifier is primary key: Nutzung
des Primärschlüssels as OID
◆ object identifier is system generated:
Nutzung des Primärschlüssels as OID
■
Repräsentation von mehrwertigen Attributen und
1:n-Beziehungen
■
Typkonstruktoren
varray: geordnete Menge von Elementen
◆ nested table: ungeordnete Menge ohne
Größenbeschränkung
◆
VL Datenbanken I – 6–53
Oracle: VARRAY
■
geordnete Menge von Elementen
■
über Index adressierbar
■
VL Datenbanken I – 6–54
Oracle: Nested Tables
■
ungeordnete Menge von Elementen ohne
Größenbeschränkung
max. Größe bei Definition spezifizieren
■
Speicherung der Objekte in separater Tabelle
■
Speicherung als Binärobjekt (BLOB)
■
■
Beispiel:
create type AutorenListe
as varray(10) of varchar(50);
intern: NESTED_TABLE_ID für Verweis von Elterntabelle
auf nested table
■
Beispiel:
create type Person as object ( ...);
create type Angestellte as table of Person;
create table Abteilungen (
name varchar(10),
mitarbeiter Angestellte )
nested table mitarbeiter
store as abt_mitarb_tbl;
create table Buecher (
...
autoren AutorenListe
);
VL Datenbanken I – 6–55
VL Datenbanken I – 6–56
Oracle: REF-Typen
■
Implementierung logischer Zeiger über OIDs
■
Ersatz für Fremdschlüssel
■
vereinfachte Navigation (Pfadausdrücke)
■
Typkonstruktor
address_ref ref address_type
■
Angabe des Gültigkeitsbereichs
...scope is address_table
Oracle: Methoden
VL Datenbanken I – 6–57
■
Funktionen/Prozeduren, die zu einem Objekttyp
zugeordnet sind
■
Implementierung in PL/SQL oder als externe Methoden
(C, Java)
■
self als impliziter Parameter
■
impliziter Konstruktor zur Erzeugung von Objekten
■
Beispiel:
create type Kunde as object (
...
member function gesamt_bestellsumme()
return number(9,2))
);
VL Datenbanken I – 6–58
Oracle: Map- und Order-Methoden
Oracle: Map- und Order-Methoden (II)
■
Spezifikation von Vergleichs- und Ordnungsfunktionen
für Objekttypen
■
Nutzung im Rahmen von Anfragen (Gruppierung,
Sortierung)
■
MAP-Funktionen: Vergleich durch Abbildung auf
Basisdatentypen (date, varchar, number, . . . )
create type Rechteck as object (
laenge integer, breite integer,
map member function flaeche
return integer
);
VL Datenbanken I – 6–59
■
ORDER-Funktionen: direkte Vergleiche von Objekten
create type Kunde as object (
...
order member function vergleiche (k Kunde)
return integer
);
VL Datenbanken I – 6–60
Oracle: Subtyping
■
XML Schema: Überblick
Definition von Objekttypen durch Ableitung von
vorhandenen Objekttypen
◆
Hinzufügen von Attributen und Methoden
◆
Überschreiben von Methoden
■
Datendefinition für XML (valide Dokumente): bisher nur
DTD
Grammatik zur Festlegung der zulässigen Elemente
und deren Schachtelung
◆ schwache Typisierung, begrenzte
Ausdrucksmöglichkeiten
◆ dokument-orientiert
◆
■
final/not final
■
Beispiel:
create type Student under Person ( ...);
■
Typersetzbarkeit: Tabelle eines gegebenen Objekttyps
kann auch Instanzen eines Subtyps aufnehmen
■
Alternative: XML Schema
◆ Definition einer Klasse von XML-Dokumenten
(Dokumentinstanzen) ; Schemadefinitionssprache
◆ nicht auf Dokumente beschränkt (vgl. XML-DBS)
◆ weitergehende Modellierungsmöglichkeiten
◆ daten-orientiert
VL Datenbanken I – 6–61
XML Schema: Konzepte
■
Namensraum (Präfix): xsd
■
Schemaelement: bestehend aus Subelementen
Beispieldokument
Elementen: element
komplexen Typdefinitionen: complexType
– Komposition aus anderen Elementen und Attributen
◆ einfachen Typdefinitionen: simpleType
– Basistypen
– Einschränkung von Basistypen
◆
◆
■
VL Datenbanken I – 6–62
Kommentaren
VL Datenbanken I – 6–63
<?xml version="1.0" ?>
<bestellung datum="2002-11-18" >
<lieferadresse land="D" >
<name>Institut fuer Informatik</name>
<ort>Halle/S.</ort>
<strasse>Von-Seckendorff-Platz 1</strasse>
<plz>06120</plz>
</lieferadresse>
<positionen>
<position prodNr="MON-123-A" >
<prodName>17-Zoll-TFT Singsang</prodName>
<menge>1</menge>
<preis>599</preis>
</position>
</positionen>
</bestellung>
VL Datenbanken I – 6–64
Schemadefinition
Deklaration von Elementen
<xsd:schema
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
■
Definition von Elementen und Attributen, die im
Dokument auftreten können
<xsd:element name=bestellung type="BestellTyp"/>
■
typisierte Elemente und Attribute
■
Notation:
<xsd:element name="element-name"
type="typ-name" />
■
weitere Attribute für xsd:element
<xsd:complexType name="BestellTyp">
<xsd:sequence>
<xsd:element name="lieferadresse"
type="AdressTyp" />
<xsd:element name="positionen"
type="PositionenTyp" />
...
</xsd:sequence>
<xsd:attribute name="datum" type="xsd:date" />
</xsd:complexType>
...
</xsd:schema>
minOccurs/maxOccurs: Beschränkung der min.
bzw. max. Häufigkeit des Auftretens des Elementes
◆ use: required, optional
◆ default: Default-Wert
◆
VL Datenbanken I – 6–65
Einfache Typen
VL Datenbanken I – 6–66
Einfache Typen: Bereichseinschränkung
■
Builtin-Typen: string, integer, double, date,
anyURI, . . .
■
abgeleitete Typen durch Restriktion der Builtin-Typen
■
erlauben keine Attribute
◆ Bereichseinschränkung
◆ Muster
◆ Aufzählung von Werten (enumeration)
◆ Listen (list), Vereinigung verschiedener
Wertebereiche (union)
■
VL Datenbanken I – 6–67
Einschränkung des Wertebereichs (1 . . . 100)
<xsd:simpleType name="MengenTyp">
<xsd:restriction base="xsd:integer">
<xsd:minInclusive value="1" />
<xsd:maxInclusive value="100" />
</xsd:restriction>
</xsd:simpleType>
VL Datenbanken I – 6–68
Einfache Typen: Muster
■
Komplexe Typen
Einschränkung des Wertebereichs durch Angabe eines
Musters (regulärer Ausdruck)
<xsd:simpleType name="ProdNrTyp">
<xsd:restriction base="xsd:string">
<xsd:pattern
value="[A-Z]{3}-\d{3}-[A-Z]{1}" />
</xsd:restriction>
</xsd:simpleType>
■
„Typkonstruktor“ für Elemente mit Attributen und
Subelementen
■
Bildung komplexer Typen
auf Basis einfacher Typen
Mixed Content (Sequenz von Subelementen)
◆ Auswahl, Gruppierung
◆ ...
◆
◆
VL Datenbanken I – 6–69
Komplexe Typen: Beispiel
VL Datenbanken I – 6–70
Komplexe Typen: Beispiel (II)
■
Typdefinition
<xsd:complexType name="IntPreisTyp">
<xsd:simpleContent>
<xsd:extension base="xsd:decimal">
<xsd:attribute name="Waehrung"
type="xsd:string"/>
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
■
Anwendung (Dokumentinstanz)
<preis waehrung="Euro">899</preis>
VL Datenbanken I – 6–71
<xsd:complexType name="PositionenTyp">
<xsd:sequence>
<xsd:element name="Position"
minOccurs="1" maxOccurs="unbounded">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="prodName" type="xsd:string"/>
<xsd:element name="menge" type="MengenTyp"/>
<xsd:element name="preis" type="xsd:decimal"/>
</xsd:sequence>
<xsd:attribute name="prodNr" type="ProdNrTyp"
use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
VL Datenbanken I – 6–72
Herunterladen