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