330 likes | 522 Views
DTD und W3C XML Schema. Seminar XML und Datenbanken Vortrag: Sven Blüge. DTD (Dokumenttyp-Deklaration). Inhalt genaue Definition aller nutzbaren Elemente und Entities Inhalt und Attribute der Elemente Zweck Validierung des XML-Dokuments Dokumentation der gewünschten Struktur.
E N D
DTD und W3C XML Schema Seminar XML und DatenbankenVortrag: Sven Blüge
DTD (Dokumenttyp-Deklaration) Inhalt genaue Definition aller nutzbaren Elemente und Entities Inhalt und Attribute der Elemente Zweck Validierung des XML-Dokuments Dokumentation der gewünschten Struktur
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> DTD am Beispiel
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) • 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)> • 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>
#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"> Attribut-Deklaration
Entity-Deklaration • Allgemeine Entities • Vorkommen: Dokumenteninhalt • 5 vordefinierte Entities (<,>,&,‘,“) • Deklaration <!ENTITY baustein "Das ist ein sehr langer Textbaustein"> • Nutzung &baustein; • Externegeparsteallgemeine 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;)>
Externe DTD-Teilmengen • DTDs sind aufteilbar • Kombination mittels externer Paramter-Entity-Referenzen <!ENTITY % namen SYSTEM "namen.dtd"> %namen; • Bedingtes Einfügen
W3C XML Schema Hauptzweck Validierung Dokumentation Nachfolger von DTD XML Schema nutzt XML Notation
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> XML Schema – Ein Beispiel
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>
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"> 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 3 komplexe Typen, sequence, all
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">
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"> Definition eigener Datentypen 5 komplexe Typen, group
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 • 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 • 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>
<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"/> XML 1.0 – Kommentare annotation-Element documentation appinfo Fremdattribute Dokumentation und Kommentare
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)