Schema

Start

XML

Namespace

XSL

DTD

Schema

Standardisierung

IMS LD

EML

LMML

Akronyme

Quellen

 

 

Ein Schema und das XML-Dokument, das durch das Schema beschrieben wird, werden in unterschiedlichen Dateien gespeichert. Eine Schema-Datei ist eine XML-Datei, die den Regeln der XML-Schemspezifikation (XML-Schema-Definitionssprache) des W3C genügt. Die Dateinamenserweiterung lautet .xsd (gleichzeitig das Schema-Namespace-Präfix). Ein XML-Dokument, das den Regeln eines Schemas gehorcht (= gültig), wird Instanzdokument genannt.

Durch ein Schema können im Gegensatz zu einer DTD Datentypen angegeben werden. Bei der Eingabe von Werten ist es damit möglich z. B. zu verhindern, daß anstelle von zwei Nachkommastellen drei Nachkommastellen angegeben werden. Das Einlesen in eine Datenbank kann damit erleichtert werden. Zusätzlich ist ein Schema ein XML Dokument und kann damit von beliebiger XML Software be- und verarbeitet werden.

simpleType und complexType

Nach (FALLSIDE & WALMSLEY 2004, STEIN 2002) darf ein einfaches Element (simpleType) im Gegensatz zu einem komplexen Element (complexType) keine weiteren Elemente oder Attribute enthalten.

Gemischte Inhalte

Gemischte Inhalte bestehend aus Elementen und einfachen Textteilen (z. B. <salutation>Dear Mr.<name>Robert Smith</name>.</salutation>) werden in einem Schema durch das Attribut mixed=“true“ erlaubt (<xsd:element name="salutation"><xsd:complexType mixed="true"> ..., siehe FALLSIDE & WALMSLEY 2004).

DTD-Entities und ihre Umsetzung in Schemas

Kim (2003) schreibt: "Entity declarations, per se, are not supported in the XML Schema. However, some other XML Schema language constructs discussed later in this chapter can be used in a similar way to entity declarations."

Das W3C führt ein Beispiel für den Ersatz der Benutzung von Zeichenentitäten aus DTD´s an (siehe C Using Entities unter http://www.w3.org/ ). Zusätzlich wird erwähnt, daß Parameterentities durch Gruppen ersetzt werden könnten. Im benannten Beispiel soll das Zeichen é (http://www.fileformat.info/ Unicode Character U+00E9, Encondings: HTML Entity Hex &#xE9;) das in HTML als Zeichenentität existiert in einem Schema abgebildet werden. Der target namespace in der Schema-Datei sollte auf denselben Wert wie in dem XML-Dokument gesetzt werden (bei unten abgebildeten Beispiel: targetNamespace="http://www.example.com/characterElements").

Schema-Quelltext (siehe C Using Entities in FALLSIDE & WALMSLEY 2004):

<xsd:element name="eacute" type="xsd:token" fixed="&#xE9;"/>

XML-Beispieldatei-Quelltext (siehe C Using Entities in FALLSIDE & WALMSLEY 2004 ):

<?xml version="1.0" ?>
<purchaseOrder xmlns="http://www.example.com/PO1"
               xmlns:c="http://www.example.com/characterElements"
               orderDate="1999-10-20">
  <!-- etc. -->
    <city>Montr<c:eacute/>al</city>
  <!-- etc. -->
</purchaseOrder>

Unter http://www.w3.org/ (XHTML Schema Module Implementations) wird bei C.1. Character Entities beschrieben, wie Zeichenentitäten aus der HTML-DTD in das Schema der XML-Anwendung XHTML eingebunden werden. Gleichzeitig wird auf folgendes hingewiesen: "Even though the named character entities are defined using DTDs and included in the Schema Modularization Framework, schema processors typically do not expand the named character entities in an XML document instance. The html DOCTYPE declaration must still be present if one wishes to use named entities defined by this Framework module".

Ersetzungsgruppen (Substitution Groups)

XML-Schema bietet einen Möglichkeit (substitutionGroup) Elemente durch andere Elemente zu ersetzen (FALLSIDE & WALMSLEY 2004). Das Ursprungs-Element muss als globales Element deklariert werden.

Als Beispiel werden zwei Elemente KundenKommentar und LieferKommentar deklariert und einer Ersetzungsgruppe mit dem Ursprungs-Element Kommentar zugeordnet. Ab diesem Zeitpunkt dürfen KundenKommentar und LieferKommentar überall dort eingesetzt werden, wo auch Kommentar verwendet werden darf. Folgender Quelltext zeigt die Deklaration der beiden Elemente KundenKommentar und LieferKommentar (siehe FALLSIDE & WALMSLEY 2004).

<element name="LieferKommentar" type="string" substitutionGroup="ibest:Kommentar"/>
<element name="KundenKommentar" type="string" substitutionGroup="ibest:Kommentar"/>

Nachdem diese Deklarationen dem Schema hinzugefügt wurden, können KundenKommentar und LieferKommentar im Instanzdokument anstatt des Elementes Kommentar eingesetzt werden. Folgender Quelltext zeigt ein Beispiel dafür (siehe FALLSIDE & WALMSLEY 2004).

<Waren>
  <Buch ISBN="3548359698">
    <Titel>Warum Männer nicht zuhören und Frauen schlecht einparken.</Titel>
    <Anzahl>1</Anzahl>
    <PreisEUR>8.95</PreisEUR>
    <ibest:LieferKommentar>Falls möglich mit gold-farbenem Geschenkpapier.</ibest:LieferKommentar>
    <ibest:KundenKommentar>Unbedingt bis Weihnachten liefern!</ibest:KundenKommentar>
    <Lieferdatum>2001-12-05</Lieferdatum>
  </Buch>
</Waren>

Mehrere Schemas in einem Instanzdokument (validierbar) einbinden

Sollen Elemente aus verschiedenen Schemas in einem Instanzdokument eingesetzt werden, stehen verschiedene Varianten (z. B. per include-Element oder any-Element) zur Verfügung.

Folgendes Beispiel zeigt die Möglichkeit per include-Element in einer Schema-Datei ein anderes Schema einzubinden (siehe "4.1 A Schema in Multiple Documents" in FALLSIDE & WALMSLEY 2004).

<schema targetNamespace="http://www.example.com/IPO" xmlns="http://www.w3.org/2001/XMLSchema"
 xmlns:ipo="http://www.example.com/IPO">
   ...
<include schemaLocation="http://www.example.com/schemas/address.xsd"/>
   ...

Das schema-Element der eingebundenen address.xsd zeigt folgender Quelltext (siehe "4.1 A Schema in Multiple Documents" in FALLSIDE & WALMSLEY 2004).

<schema targetNamespace="http://www.example.com/IPO" xmlns="http://www.w3.org/2001/XMLSchema"
 xmlns:ipo="http://www.example.com/IPO">
   ...

Wird das include-Element eingesetzt, muss darauf geachtet werden, dass das eingebundene Schema denselben target-namespace (Ziel-Namensraum) hat wie das einbindende Schema (http://www.example.com/IPO). Sollen Schema-Komponenten aus verschiedenen target-namespaces eingesetzt werden, können andere Mechanismen (z. B. import-Element, Thompson et al. 2004) eingesetzt werden (siehe "5.4 Importing Types" in FALLSIDE & WALMSLEY 2004).

Folgender Schema-Quelltext zeigt, wie das XHTML-Schema in einem anderen Schema zur Verfügung gestellt werden kann. Zusätzlich wird das Element p deklariert.

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:h="http://www.w3.org/1999/xhtml"
 targetNamespace="http://www.example.de/">
   <xs:import namespace="http://www.w3.org/1999/xhtml" schemaLocation="xhtml.xsd"/>
   <xs:element name="info">
      <xs:complexType>
         <xs:sequence>
            <xs:element ref="h:p" maxOccurs="unbounded"/>
         </xs:sequence>
      </xs:complexType>
   </xs:element>
   ...
</xs:schema>

Der folgende Quelltext eines Instanzdokumentes bindet die übergeordnete Schema-Datei und den gemeinsamen namespace ein (siehe "4.1 A Schema in Multiple Documents" in FALLSIDE & WALMSLEY 2004).

<?xml version="1.0"?>
<ipo:purchaseOrder xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns:ipo="http://www.example.com/IPO" orderDate="1999-12-01">

Soll ein XML-Dokument mit Elementen, die in separaten Schema-Dateien definiert wurden, validiert werden, müssen die verschiedenen namespaces und schemaLocations angegeben werden (Beispiel unter ..\ims_ld\beispiele\index.htm). Folgender Ausschnitt aus der Schema-Datei imscp_v1p1p3.xsd (IMS CP 2003) zeigt, wie es in IMS CP ermöglicht wird beliebige Elemente aus anderen namespaces einzubinden. Die Gruppe grp.any kann von verschiedenen Stellen innerhalb der Schema-Datei aus referenziert werden und erlaubt es an diesen Stellen beliebige andere mit einem namespace ausgestattete Elemente einzufügen.

...
<xsd:group name="grp.any">
  <xsd:annotation>
   <xsd:documentation>Any namespaced element from any namespace may be
	included within an &quot;any&quot; element.
     	The namespace for the imported element must be defined in the instance,
	and the schema must be imported.
   </xsd:documentation>
</xsd:annotation>
<xsd:sequence>
  <xsd:any namespace="##other" processContents="strict"
   minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:group>
...

Ein weiteres Beispiel, das den Einsatz des Elementes any beschreibt, ist unter "5.5 Any Element, Any Attribute" in FALLSIDE & WALMSLEY (2004) zu finden. Dort werden z. B. XHTML-Elemente (Tabelle) in einem XML-Dokument zur Verfügung gestellt.

Weitere Quellen

Eine sehr gute und ausführliche Darstellung der Thematik Schema bietet Roger Costello unter http://www.xfront.com/. Einen schnellen Einstieg kann man unter XML Schemas Folie 11 finden.

Unter http://www.informatik.fh-muenchen.de/~schieder/xml-00-01/08-xschema/index.html sind Informationen zum Thema Schema in deutscher Sprache zu finden.

Die Schema-Recommendations des W3C:

Literatur

FILEFORMATINFO (2005): Unicode Character 'LATIN SMALL LETTER E WITH ACUTE' (U+00E9), http://www.fileformat.info/info/unicode/char/00e9/index.htm, Abruf am 2005-01-01

IBM (2003): BM Corporation 2003, WebSphere Software, Information Center, http://publib.boulder.ibm.com/infocenter/, Abruf am 2005-01-01

IMS CP (2003): IMS Content Packaging,
www.imsproject.org/content/packaging/index.cfm, Abruf am 2003-06-15

KIM, L. (2003): XMLSPY Handbook, Wiley Publishing, Inc., 10475 Crosspoint Boulevard, Indianapolis, http://www.wiley.com, S. 134 ff

FALLSIDE, D., Walmsley, P (2004): XML Schema Part 0: Primer Second Edition, W3C Recommendation 28 October 2004, http://www.w3.org/TR/xmlschema-0/, dt. Übersetzung unter http://www.edition-w3c.de/TR/2001/REC-xmlschema-0-20010502/, Abruf am 2005-01-01

Thompson, H., Beech, D., Maloney, M., Mendelsohn, N., (2004): XML Schema Part 1: Structures Second Edition, W3C Recommendation 28 October 2004, http://www.w3.org/TR/2004/REC-xmlschema-1-20041028/,  Abruf am 2005-01-01

STEIN, M (2002): workshop XML, Addison-Wesley Verlag, Imprint der Pearson Education Deutschland GmbH, München/Germany