DTD und W3C XML Schema

Download Report

Transcript DTD und W3C XML Schema

DTD
und
W3C XML Schema
Seminar XML und Datenbanken
Vortrag: Sven Blüge
DTD (DokumenttypDeklaration)
Inhalt
genaue Definition aller nutzbaren
Inhalt und Attribute der Elemente
Elemente und Entities
Zweck
Validierung des XML-Dokuments
Dokumentation der gewünschten
Struktur
DTD am Beispiel




Element-Deklaration
Festlegung des allgemeinen Typs
Beschreibung des Inhalts
Reihenfolge der Deklarationen sind
beliebig
DTD (person.dtd)
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
person (name, beruf*)>
name (vorname, nachname)>
vorname (#PCDATA)>
nachname (#PCDATA)>
beruf (#PCDATA)>
Gültiges XML-Dokument



person enthält genau einmal
name und eine beliebige Anzahl
von beruf-Elementen
name muß genau einmal vorname
und einmal nachname enthalten
vorname, nachname und beruf
haben den Typ PCDATA (Parsed
Character Data)
<!DOCTYPE person SYSTEM
"http://xyz.de/person.dtd">
<person>
<beruf>Förster</beruf>
<name>
<vorname>Peter</vorname>
<nachname>Mustermann</nachname>
</name>
<beruf>Fahrer</beruf>
<beruf>Mechaniker</beruf>
</person>
Dokumenttyp-Deklaration 1

Deklaration einer externen DTD:
<!DOCTYPE person SYSTEM "http://xyz.de/person.dtd">
Bedeutung:
Wurzelelement des XML-Dokuments ist person
 XML-Dokument bezieht sich auf die DTD in der Datei person.dtd
 Quelle kann lokal oder im Internet liegen

Dokumenttyp-Deklaration 2

DTD kann im XML-Dokument enthalten sein (interne
Deklaration)
<!DOCTYPE person[
../..
]>

Kombination externer/interner Deklaration möglich
<!DOCTYPE person SYSTEM "name.dtd" [
<!ELEMENT beruf (#PCDATA)>
<!ELEMENT person (name, beruf*)
]>
Element-Deklaration 1

Syntax:
<!ELEMENT elementname (inhaltsmodell)>

#PCDATA
Ist einfachstes Inhaltsmodell
 Hat keine Kindelemente
 Enthält vom Parser ersetzte Zeichendaten

<!ELEMENT telefonnummer (#PCDATA)

einfache Kindelemente

Enthalten nur einzelne Kindelemente
<!ELEMENT fax (telefonnummer)>
Element-Deklaration 2

Folgen (Sequenzen)



Auswahl


Enthält mehrere Kindelemente
Anzahl der Kinder im XML-Dokument durch Suffix bestimmt:
 ?
Kein oder ein Element erlaubt
 *
Kein oder mehrere Elemente erlaubt
 +
Ein oder mehrere Elemente erlaubt

Erfolgt keine explizite Suffix-Angabe, so muss das Kindelement
genau einmal vorkommen
<!ELEMENT name (vorname, zweiter_vorname*, nachname)>
Auswählbare Elemente werden durch „|“ getrennt
<!ELEMENT ziffer (null | eins | zwei | drei)>
Klammern

Schachtelung von Auswahl und Folgen möglich
<!ELEMENT kreis (punkt, (radius | durchmesser))>
Element-Deklaration 3

Gemischter Inhalt

Enthält Kindelemente und Zeichendaten
<!ELEMENT definition (#PCDATA, begriff)*)>
 Die Liste der Kindelemente kann beliebig lang sein, allerdings muss #PCDATA
an erster Stelle stehen.
 Gezeigte Deklaration ist die einzig gültige Möglichkeit, gemischten Inhalt
darzustellen

Leere Elemente
Für Elemente ohne Inhalt. Können Attribute enthalten
<!ELEMENT bild EMTPY>
 Beispiel:
<bild quelle="bild.jpg"/>



ANY



Ein als ANY deklariertes Element kann beliebigen Inhalt haben
Enthaltene Elemente müssen definiert sein
<!ELEMENT seite ANY>
Attribut-Deklaration

#REQUIRED  Angabe erforderlich

#IMPLIED  Angabe optional

#FIXED  Angabe optional, Wert
unveränderlich

Literal  Standardwert
<!ATTLIST bild
quelle CDATA
hoehe CDATA
breite CDATA
alt
CDATA
>
#REQUIRED
#IMPLIED
"250"
#FIXED "Bild"
Entspricht:

10 erlaubt Attributtypen:
CDATA, NMTOKEN, NMTOKENS,
Aufzählung, ENTITY, ENTITIES, ID,
IDREF, IDREFS, NOTATION
<!ATTLIST
<!ATTLIST
<!ATTLIST
<!ATTLIST
bild
bild
bild
bild
quelle CDATA #REQUIRED>
hoehe CDATA #IMPLIED>
breite CDATA "250">
alt CDATA #FIXED "Bild">
Entity-Deklaration

Allgemeine Entities





Externe geparste allgemeine Entities



Vorkommen: Dokumenteninhalt
5 vordefinierte Entities (<,>,&,‘,“)
Deklaration <!ENTITY baustein "Das ist ein sehr langer Textbaustein">
Nutzung
&baustein;
Vorkommen: Dokumenteninhalt
<!ENTITY baustein2 SYSTEM "http://www.xyz.de/myentities.xml">
Referenz &baustein2; kann vom Parser durch den externen Inhalt ersetzt werden
Parameter-Entities



Vorkommen: DTD
Gruppiert Elemente
Redefinition externer Entities intern möglich
<!ENTITY % bilddaten "hoehe, breite, farbtiefe">
<!ELEMENT bild (%bildparameter;)>
Externe DTD-Teilmengen


DTDs sind aufteilbar
Kombination mittels externer Paramter-Entity-Referenzen
<!ENTITY % namen SYSTEM "namen.dtd">
%namen;

Bedingtes Einfügen
<![IGNORE[
<!ELEMENT name (#PCDATA)>
]]>
<![INCLUDE[
<!ELEMENT name (#PCDATA)>
]]>
<!ENTITY % namen_einfuegen "INLCUDE">
<![%namen_einfuegen;[
<!ELEMENT name (#PCDATA)>
]]>
W3C XML Schema
Hauptzweck
Validierung
Dokumentation
Nachfolger
von DTD
XML Schema nutzt XML Notation
XML Schema – Ein Beispiel




Elemente: name, vorname, nachname
Attribute: id
Schema-Dokumentelement: schema
Zur Erstellung eines XML Schemas ist es nötig, einzelne XML
Elemente zu klassifizieren.
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:attribute name="id" type="xs:string"/>
<xs:element name="vorname" type="xs:string" minOccurs="0"
maxOccurs="unbounded"/>
<xs:element name="name" type="xs:string"/>
<xs:complexType>
<xs:sequence>
<xs:element ref="vorname">
<xs:element name="nachname„ type="xs:string"/>
</xs:sequence>
<xs:attribute ref="id">
</xs:complexType>
</xs:schema>
Klassifizierung 1
Inhaltsmodelle
Leeres Inhaltsmodell
Komplexes Inhaltsmodell
<name
vorname="Peter„
nachname="Mustermann"
/>
<name>
<vorname>Peter</vorname>
<nachname>Mustermann</nachname>
</name>
Einfaches Inhaltsmodell
Gemischtes Inhaltsmodell
<name>Peter Mutermann</name>
<title lang="de">
Auf den Hund gekommen
</title>
<name id="008">
<vorname>Peter</vorname>
lebt in Deutschland
</name>
Inhaltsmodell
Leer
Einfach
Komplex
Gemischt
Kindelemente
Nein
Nein
Ja
Ja
Kindtext
Nein
Ja
Nein
Ja
Klassifizierung 2
Typen

Enthält ein Element nur Textknoten und weder Kindelemente noch Attribute, dann
wird es als einfacher Typ bezeichnet. In allen anderen Fällen handelt es sich um
komplexe Typen.

Einfache Typen (simpleType)
<name>
Peter Mutermann
</name>

Komplexe Typen (complexType)
<title lang="de">
Auf den Hund gekommen
</title>
<name id="008">
<vorname>Peter</vorname>
</name>
Elementdefinition





xs ist das Präfix, welches mit dem W3C XML Schema verknüpft ist (auch wenn im
folgenden teilweise weggelassen, so ist doch der Bezug zum W3C XML Schema
gemeint)
xs:string ist ein Datentyp, der im, mit xs verknüpften, Schema definiert ist
Reihenfolge der Definition ist ohne Bedeutung
Sprachelemente können nahezu beliebig geschachtelt werden
Definitionen im Wurzelelement (hier schema) werden als global bezeichnet
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="name" type="xs:string"/>
<xs:element name="born" type="xs:date"/>
<xs:attribute name="id" type="xs:ID"/>
<xs:attribute name="lang" type="xs:language"/>
</xs:schema>
Typen 1
Überblick
anyType
Einfacher
Typ
Komplexer
Typ
all
union
choise
list
atomar
buildin
sequence
Typen 2
primitive Typen
anySimpleType
string
anyURI
QName
date
dateTime
duration
gDay
gMonth
gYear
boolean
double
float
gMonthDay
decimal
gMonthYear
Typen 3
string
normalizedString
string-ähnliche Typen
token
language
Name
NMTOKEN
NCName
ID
IDREF
ENTITY
IDREFS
ENTITIES
NMTOKENS
decimal
Typen 4
Numerische Typen
integer
Name
Titel
long
negativeInteger
int
nonNegativeInteger
positiveInteger
unsignedLong
short
unsignedInt
byte
unsignedShort
unsignedByte
Definition eigener Typen 1
einfache Datentypen, restriction




Begrenzte Anzahl von primitiven Typen vorhanden
Neubildung von Typen durch Ableitung möglich
Neue Eigenschaften ergeben sich durch Erweiterung (nur bei komplexen Datentypen)
oder Einschränkung
Beispiel: Definition eines Ganzzahlwertes mit dem Wertebereich [-2;5]
<xs:simpleType name="myInteger">
<xs:restriction base="xs:integer">
<xs:minInclusive value="-2"/>
<xs:maxExclusive value="5"/>
</xs:restriction>
</xs:simpleType>

restiction gibt den Datentyp an, auf den die neuen Einschränkungen angewendet
werden sollen
Definition eigener Typen 2
komplexe Typen, extension

Nachfolgende Definition hat die Aussage: Das Element titel hat komplexen Typ,
der einfachen Inhalt hat, der wiederum durch Erweiterung des Typs xs:string
entsteht, indem das an anderer Stelle definierte Attribut lang hinzugefügt wird.
<xs:complexType name="titel">
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute ref="lang"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:element name="titel" type="titel">

Beispiel:
<titel lang="de">
Auf den Hund gekommen
</titel>
Definition eigener Typen 3
komplexe Typen, sequence, all

sequence
Standard für das minimale und maximale
Auftreten eines Kindelements ist 1
 Reihenfolge in einer Sequence ist bindend
 Attribute nach Folge definieren
 Beispiel: sequence ist Kompositor und
element-Elemente sind Partikel


all
definiert Folge, bei der Reihenfolge
unbedeutend
 Einschränkungen:
 Nur als Kompositor, nicht Partikel
 Nur Elemente vom Typ xs:element
enthalten
 Auftretenshäufigkeit von Elementen
nicht größer als 1


Das Beispiel für sequence ist daher nicht für
all geeignet
<xs:complexType name="author">
<xs:sequence>
<xs:element ref="name"
maxOccurs="unbounded"/>
<xs:element ref="born"
minOccurs="1"/>
<xs:element ref="dead"
minOccurs="0"/>
</xs:sequence>
<xs:attribute ref="id"/>
</xs:complexType>
<xs:element name="author"
type="author">
Definition eigener Typen 4
komplexe Typen, choise


Ein Element kann verschiedene Möglichkeiten haben, Inhalte aufzunehmen.
Im Beispiel ist choise ein Kompositor, die element- und sequenceElemente die Partikel
<xs:complexType name="author">
<xs:choise>
<xs:element ref="name">
<xs:sequence>
<xs:element ref="first-name">
<xs:element ref="middle-name" minOccurs="0">
<xs:element ref="last-name">
</xs:sequence>
</xs:choise>
<xs:element ref="born">
<xs:element ref="dead" minOccurs="0">
</xs:complexType>
<xs:element name="author" type="author">
Definition eigener Datentypen 5
komplexe Typen, group



Wenn bestimmte Gruppen oft benötigt
werden, lassen sie sich zu Gruppen
zusammenfassen
Gruppen müssen global definiert werden
Es gibt Attribut- und Elementgruppen
Definition Attributgruppe
<xs:attributeGroup name="bookAttributes">
<xs:attribute name="id" type ="xs:ID"/>
<xs:attribute name="available"
type="xs:boolean"/>
</xs:attributeGroup>
Definition Elementgruppe
<xs:group name="name">
<xs:choise>
<xs:element ref="name">
<xs:sequence>
<xs:element ref="first-name">
<xs:element ref="middle-name"
minOccurs="0">
<xs:element ref="last-name">
</xs:sequence>
</xs:choise>
</xs:group>
Benutzung:
Benutzung:
<xs:attributeGroup ref="bookAttributes">
<xs:group ref="name">
Schema-Inklusion
Aufteilung eines Schemas


Schema-Inclusion (include)

Mehrere Teile werden mittels include in ein Hauptschema eingebunden
<xs:include schemaLocation="eins.xsd"/>

Doppelte Definitionen in beiden Schemas werden als Fehler behandelt
Schema-Inclusion mittels Redefinition (redefine)

Typen und Element/Attributgruppen des eingebundenen Schemas können unter
gleichem Namen redefiniert werden, was sonst verboten wäre
 Erweiterung / Einschränkung wie beim Erstellen eigener Datentypen möglich

Inclusionsmethoden von XML

Externe geparste Entities



Können lokal eingebunden werden.
Werden in DTD deklariert und im Dokument als Entity referenziert
XInclude


Können lokal eingebunden werden
Vorherige Deklaration nicht notwendig
Eindeutigkeit, Schlüssel und
Schlüsselverweise 1

Ein XML-Dokument muss die Möglicheit bieten, einhaltene Infomationen zu
identifizieren und zu referenzieren

Dazu bietet XML Schema zwei Möglichkeiten
1.
ID, IDREF und IDREFS







Teilweise von DTD geerbt
Lexikalischer Raum wie beim Datentyp NCName (darf u.a. nicht mit Ziffern
beginnen und kein Whitespace enthalten)
Global definiert
Kann in Elementen und Attributen verwendet werden
Beispiel:
<xs:element name="ref" type="xs:IDREF" use="requirded"/>
ID stellt den Identifikator, IDREF den Verweis darauf und IDREFS den
Verweise auf eine Liste von Identifikatoren dar
Der Wert für ID muss im Dokument eindeutig sein, der Wert für IDREF bzw.
IDREFS muss im Dokument vorhanden sein
Eindeutigkeit, Schlüssel und
Schlüsselverweise 2
2.
unique, key und keyref

unique



Der selector gibt den relativen Pfad zum Unterelement an und field
das/die Element/e, die zur Identifikation genutzt werden.
Knoten, deren „field“ nicht existiert, werden nicht beachtet
In jeder Bibliothek sollte ein Buch, das über seine ISBN identifiziert wird,
eindeutig bestimmt sein.
<xs:element name="bibliothek">
<xs:complexType>
.../...
</xs:complexType>
<xs:unique name="book">
<xs:selector xpath="book"/>
<xs:field xpath="isbn1"/>
<xs:field xpath="isbn2"/>
</xs:unique>
</xs:element>
Eindeutigkeit, Schlüssel und
Schlüsselverweise 3

key

Hat die selben Eigenschaften wie unique und zusätzlich die Bedingung,
dass die als field deklarierten Knoten angegeben werden müssen
<xs:element name="bibliothek">
<xs:complexType>
.../...
</xs:complexType>
<xs:key name="book">
<xs:selector xpath="book"/>
<xs:field xpath="isbn"/>
</xs:key>
</xs:element>
Eindeutigkeit, Schlüssel und
Schlüsselverweise 4

keyref



Kann als Verweis auf key und unique verwendet werden
keyref muss unterhalb des Elements oder dessen Nachkommen definiert
sein, in dem die referenzierten Elemente key oder unique definiert sind
Ein referenzierter Wert muß im Dokument vorhanden sein
<xs:element name="bibliothek">
<xs:complexType>
.../...
</xs:complexType>
<xs:key name="ID">
<xs:selector xpath="book"/>
<xs:field xpath="isbn"/>
</xs:key>
<xs:keyref name="IDREF" refer="ID">
<xs:selector xpath="book"/>
<xs:field xpath="isbn"/>
</xs:keyref>
</xs:element>
Dokumentation und Kommentare


XML 1.0 – Kommentare
annotation-Element



documentation
appinfo
Fremdattribute
<xs:element name="author" type="authorType">
<!– Beschr. des Autors eines Buches. -->
</xs:element>
<xs:element name="author" type="authorType">
<xs:annotation>
<xs:documentation xml:lang="de">
Der Autor eines Buches.
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="author" type="authorType"
doc:doc="Beschr. des Autors eines Buches."
xmlns:doc="http://xyz.de/doc"/>
DTD
vs.
W3C XML Schema
Vorteile von XML Schema
gegenüber DTD






statt 10 Datentypen werden bereits 41 Basis-Datentypen definiert
mit den objektorientierten Methoden Restriction und Extension
können diese Basis-Typen eingeschränkt bzw. ausgedehnt werden
und somit die Beschreibung beliebiger Datenstrukturen erlauben
XML Schemas werden selbst in XML erstellt, sodass Parser und
Transformationen (XSLT) sehr einfach darauf angewendet werden
können
beliebige Elemente können als eindeutige Elemente und sogar als
Schlüsselwerte definiert werden (unique, key)
statt in einer sequentiellen Anordnung von Elementen können
Elemente auch in einer Menge angeordnet werden (all)
beliebige Elemente können den gleichen Namen besitzen, aber
verschiedenen Inhalt (mittels unterschiedlicher Namespaces)