XML-Schema

Transcription

XML-Schema
XML-Schema
Kolja Henckel
1. Verschiedene Arten von Schemas:
Es gibt mehrere XML-Schemas, die allerdings nicht alle gleich verbreitet sind, und
teilweise anders funktionieren.
Wichtige sind: RelaxNG, Schematron und XSD, das W3C XML-Schema, welches
das wichtigste ist und hier genauer behandelt wird.
2. Was können XML-Schemas mehr als DTDs?
In XML-Schema gibt es 44 Grunddatentypen, in DTD lediglich 10. Diese Datentypen
können allerdings noch durch facets (s.u.) beschränkt werden, und bilden dadurch ein
sehr flexibles Konzept.
XML-Schema wird in XML geschrieben, wodurch der Anwender keine neue Sprache
lernen muss, um sich selbst ein Schema zu erstellen, DTDs haben ihre eigene Sprache,
die man erst erlernen muss.
Ein weiterer Pluspunkt der Schemas ist Ihre flexible Erweiterbarkeit.
Grosse Sicherheit bei XML Dokumenten bietet die Unterscheidung zwischen well
formed und validated, da ein Dokument bereits well-formed ist, wenn es die XML
Regeln beachtet (dann muss es: mit Xml-deklaration beginnen, eigenes root Element
haben, alle Starttags mit Endtags beenden, alle Attributwerte müssen in ““, spezielle
Zeichen müssen in XML Notation geschrieben werden). Da es aber sein kann, dass ein
XML-Dokument well formed ist, aber trotzdem Fehler enthält, wird es per
Validierungssoftware geprüft. Diese kann dann Fehler zwischen der XML-Datei und
xls-Datei finden.
3. Eine Schema Deklaration
<?xml version="1.0"?>
gibt die XML-version an
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
gibt den namespace an, und definiert xsd für dieses Dokument als Präfix
<xsd:element name="GREETING" type="xsd:string"/>
definiert ein einfaches Element, das GREETING heißt und durch einen String
eingegeben wird.
</xsd:schema>
Mit dieser einfachen Definition lässt sich bereits ein XML-Dokument erstellen:
<<?xml version="1.0"?>
<GREETING xsi:noNamespaceSchemaLocation="greeting.xsd“
beschreibt den Ort der xsd Datei
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
beschreibt den Namespace der Zeile darüber
Hello XML!
eigentliche Information
</GREETING>
4. Einfache Elemente
Einfache Elemente können nur Text enthalten, keine Attribute oder
Nachfolgeelemente(child elements). Es gibt dafür 44 vordefinierte Datentypen, wovon
die 6 sehr häufig benutzen wären: string, decimal, integer, boolean, time, date. Eine
genauere Auflistung der Datentypen folgt später.
Im Beispiel (Folie 9) sieht man die einfache Anwendung, ähnlich zu dem Beispiel
oben.
5. Komplexe Typen
Komplexe Typen können Attribute und/oder Text enthalten.
Sie können auch leer sind, und sie können Nachfolgeelemente erstellen (child elemets)
Die machen XML noch flexibler als DTDs, wo dieses nur beschränkt funktioniert.
Das Beispiel auf den Folien 10 und 11 (Songtype) zeigt einen solchen komplexen Typ,
der mehrere Child Elemente erzeugt. Diese sind wiederum vom einfachen Typ.
6. Flexibel erweiterbares System
Da man in dem Beispiel immer nur einen Eintrag für jedes definierte Element machen
kann, kommt man in Schwierigkeiten, wenn man z.B. 2 oder 3 Komponisten eintragen
möchte. Daher gibt es die Möglichkeit mit…
7. minOccurs und maxOccurs
…festzulegen, wie oft welches Element mindestens und maximal vorkommen darf.
Dadurch kann man dem Benutzer Freiheiten geben, so dass er z.B. keinen Publisher
angeben muss, aber kann. Ebenso ist es jetzt möglich mehrere Komponisten
anzugeben. Man kann nun noch ausnutzen, dass die defaultwerte für minOcuurs und
maxOccurs beide 1 sind, und somit die Deklaration um einiges verkürzen (Folie 15)
8. Typemodelle
Auf Folie 18 wird gezeigt, dass man Typen sehr weit verschachteln kann, um eine
gewisse Hierarchie beizubehalten.
ComposerTyp Nametyp Family (sting) und given (string)
Dies bietet sich hier sehr an, da man eine doppelte Definition vom Namentyp
vermeidet (wenn man sie direkt beim ComposerTyp und ProducerTyp deklariert
hätte).
9. Mixed Contend
Durch die Angabe des Tags : <xsd:complexType mixed="true">
ist es möglich, Zusatzinformationen miteinzubringen, wie z.B.
<NAME>
Mr. <GIVEN>Jacques</GIVEN> <FAMILY>Morali</FAMILY> Esq.
</NAME>
10. Grouping
Grouping dient zum Festlegen der Reihenfolge und des Vorkommens von Elementen.
Es gibt 3 verschiedene groupings:
- all
erwartet, dass alle Elemente min. einmal vorkommen, die
Reihenflge ist dabei egal.
- choice
erwartet, dass genau eines der Elemente angegeben wird.
- sequence
erwartet, dass jedes Element genau in der angegebenen
Reihenfolge angegeben wird. Vorkommen wird durch
minOccurs und maxOccurs geregelt
11. Vordefinierte Typen
Es gibt in XML-Schema 44 vordefinierte Typen, die zum Teil sehr spezialisiert sind.
Die 7 Obergruppen sind: Numeric types, Time types, XML types, String types,
The boolean type, The URI reference type, The binary types. Auf eine genauere
Definition verzichte ich aus Platzgründen auf diesem Handout.
12. Einschränken von Datentypen:
Eine wichtige Eigenschaft von XML-Schema ist es, dass man sich selbst neue
Datentypen erzeugen kann, indem man sich bestehende Datentypen „zurechtkürzt“.
Eingeleitet wird das durch:
<xsd:simpleType name="NeuerDatentypName">
<xsd:restriction base="xsd:AlterDatentyp">
dann wird noch gesagt, welche Werte der neue Datentyp annehmen kann:
<xsd:minInclusive value="1877"/>
hier wird ein Integer, gyear oder Ähnliches auf Werte über 1876 festgelegt.
Dies kann z.B. für Jahreszahlen sinnvoll sein, wenn es keine Fehleingaben geben darf.
Auf Folie 33 sind alle Facets, also Beschränkungsangaben aufgelistet, die
XML-Schema kennt. Nicht jeder Datentyp lässt sich durch jede Facet beschränken!!!
Man kann z.B. einen Sting auf eine Länge beschränken, aber nicht ein Datum, dieses
hat eine festgelegte Länge!!
Das pattern facet erläutere ich etwas näher, da es sehr flexibel und mächtig ist:
<xsd:simpleType name="money">
<xsd:restriction base="xsd:string">
<xsd:pattern value="\p{Sc}\p{Nd}+(\.\p{Nd}\p{Nd})?"/>
</xsd:restriction>
Hier wird der neue Datentyp money vom alten String abgeleitet.
Voraussetzung für money ist ein Währungssysmbol (\p{Sc}), ein oder mehrere
Vorkommastellen \p{Nd}+ und (ein Punkt und zwei Nachkommastellen)
(\.\p{Nd}\p{Nd}) ist optional (?), muss aber dann komplett vorkommen.
Beispiel:
<money>
$255.34
</money>
13. Leere Elemente
Es ist ebenfalls gestattet, ein komplexes, leeres Element anzulegen.
Dieses kann zu Orientierung oder für spätere Zwecke dienen.
14. Attribute
Attribute werden wie einfache Elemente deklariert, allerdings mit xsd:attribute
beginnend. Nur komplexe Elemente können Attribute enthalten.
Mit Attributen kann man weitere Informationen speichern, direkt im Tag:
<PHOTO ALT="Melissa Etheridge holding a guitar" WIDTH="100"
HEIGHT="300"
SRC="guitar.jpg"/>
Deklaration:
<xsd:complexType name="PhotoType">
<xsd:attribute name="SRC" type="xsd:anyURI"/>
<xsd:attribute name="WIDTH" type="xsd:positiveInteger"/>
<xsd:attribute name="HEIGHT" type="xsd:positiveInteger"/>
<xsd:attribute name="ALT" type="xsd:string"/>
</xsd:complexType>
15. Namespaces
Durch Namespaces kann man in seinem Dokument Namen öfters verwenden, oder sie
nutzen, um z.B. 2 XML Dokumente zu vereinen. Durch eine andere Wahl des
Präfixes, kann es zu keinen Verwechselungen kommen.
16. AGAVE ist eine Internetdatenbank, die Informationen über die Architektur von
Genomen usw. speichert. Die benutzt XML-Schema und man kann sich das komplette
Schema von ihrer Internetseite herunterladen.
http://www.animorphics.net/lifesci.html
17. DTD2XMLschema
…ist ein Konvertierungsprogramm, mit dem man seine DTD Dateien in XMLSchemas konvertieren kann.
Es funktioniert nach einem einfachen Baukastenprinzip, das bekannte DTD-Stukturen
erkennt, und die Namen und Typen in XML-Strukturen überträgt.
http://www.w3.org/2000/04/schema_hack/
18. DER XML-Schema Validator um seine XML-Schemas zu prüfen und zu validiern ist
XMLSpy http://www.xmlspy.com