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