dtd und w3c xml schema seminar xml und datenbanken vortrag: sven blüge
TRANSCRIPT
DTD und
W3C XML Schema
Seminar XML und DatenbankenVortrag: Sven Blüge
DTD (Dokumenttyp-Deklaration)
Inhaltgenaue Definition aller nutzbaren Elemente und EntitiesInhalt und Attribute der Elemente
ZweckValidierung des XML-DokumentsDokumentation der gewünschten Struktur
DTD am Beispiel Element-Deklaration Festlegung des allgemeinen Typs Beschreibung des Inhalts
Reihenfolge der Deklarationen sind beliebig
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)
DTD (person.dtd)
<!ELEMENT person (name, beruf*)><!ELEMENT name (vorname, nachname)><!ELEMENT vorname (#PCDATA)><!ELEMENT nachname (#PCDATA)><!ELEMENT beruf (#PCDATA)>
Gültiges XML-Dokument
<!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>
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 1
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*)]>
Dokumenttyp-Deklaration 2
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 1
Element-Deklaration 2 Folgen (Sequenzen)
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
Kindelementgenau einmal vorkommen
<!ELEMENT name (vorname, zweiter_vorname*, nachname)> Auswahl
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
10 erlaubt Attributtypen: CDATA, NMTOKEN, NMTOKENS,
Aufzählung, ENTITY, ENTITIES, ID, IDREF, IDREFS, NOTATION
<!ATTLIST bild quelle CDATA #REQUIRED hoehe CDATA #IMPLIED breite CDATA "250" alt CDATA #FIXED "Bild">
Entspricht:
<!ATTLIST bild quelle CDATA #REQUIRED><!ATTLIST bild hoehe CDATA #IMPLIED><!ATTLIST bild breite CDATA "250"><!ATTLIST bild alt CDATA #FIXED "Bild">
Allgemeine Entities Vorkommen: Dokumenteninhalt 5 vordefinierte Entities (<,>,&,‘,“) Deklaration<!ENTITY baustein "Das ist ein sehr langer Textbaustein"> Nutzung &baustein;
Externe geparste allgemeine Entities 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;)>
Entity-Deklaration
<![IGNORE[ <!ELEMENT name (#PCDATA)>]]>
<![INCLUDE[ <!ELEMENT name (#PCDATA)>]]>
<!ENTITY % namen_einfuegen "INLCUDE"><![%namen_einfuegen;[ <!ELEMENT name (#PCDATA)>]]>
DTDs sind aufteilbar Kombination mittels externer Paramter-Entity-Referenzen
<!ENTITY % namen SYSTEM "namen.dtd">%namen;
Bedingtes Einfügen
Externe DTD-Teilmengen
W3C XML Schema
HauptzweckValidierungDokumentation
Nachfolger von DTDXML 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 1Inhaltsmodelle
Inhaltsmodell Leer Einfach Komplex Gemischt
Kindelemente Nein Nein Ja Ja
Kindtext Nein Ja Nein Ja
Leeres Inhaltsmodell<name vorname="Peter„ nachname="Mustermann" />
Komplexes Inhaltsmodell<name> <vorname>Peter</vorname> <nachname>Mustermann</nachname></name>
Einfaches Inhaltsmodell<name>Peter Mutermann</name><title lang="de"> Auf den Hund gekommen</title>
Gemischtes Inhaltsmodell<name id="008"> <vorname>Peter</vorname> lebt in Deutschland</name>
Klassifizierung 2Typen
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
EinfacherTyp
KomplexerTyp
all
choise
sequence
union
list
atomar buildin
Typen 2primitive Typen
anySimpleType
dateTime durationdate
boolean double float
anyURI QName
decimal
gDay gYear gMonthYeargMonth gMonthDay
string
Typen 3string-ähnliche Typen
stringnormalizedString
token
Name NMTOKENlanguage NMTOKENS
NCName
IDREF ENTITYID
IDREFS ENTITIES
Typen 4Numerische Typen
decimal
integer
long nonNegativeIntegerNameTitel
int
short
byte
negativeInteger unsignedLongpositiveInteger
unsignedInt
unsignedShort
unsignedByte
Definition eigener Typen 1einfache 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>
<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 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
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 sequence-Elemente 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>
Benutzung:<xs:attributeGroup ref="bookAttributes">
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:<xs:group ref="name">
Schema-InklusionAufteilung 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 22. 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>
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 3
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>
<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"/>
Dokumentation und Kommentare
XML 1.0 – Kommentare
annotation-Element documentation appinfo
Fremdattribute
DTDvs.
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)