Extensible Markup Language (XML) Grammatiken Studienarbeit im Fach XML-Technologien von Raffaella Riccato (Matrikelnummer: 03752006) Oktober 2010 Professor: Prof. Dr. Reinhard Schiedermeier Hochschule für Angewandte Wissenschaften - FH München Fakultät für Informatik und Mathematik
Inhaltsverzeichnis 1 Einleitung 3 2 Chomsky-Grammatik 4 2.1 Grammatik................................... 4 2.2 Hierarchie.................................... 4 3 Vokabular 6 4 Logische Struktur 7 4.1 Logische Struktur................................ 7 4.2 Physischer Aufbau............................... 9 5 Wohlgeformtheit und Gültigkeit 12 6 XML Schemasprachen 14 6.1 Document Type Definition (DTD)....................... 14 6.1.1 Einbinden einer DTD.......................... 14 6.1.2 Elemente................................ 15 6.1.3 Attribute................................ 16 6.1.4 Vor- und Nachteile einer DTD..................... 18 6.2 XML Schema Definition(XSD)......................... 19 6.2.1 Aufbau und Einbindung........................ 19 6.2.2 Datentypen............................... 20 6.2.3 Simple Types.............................. 21 6.2.4 Ableitungen............................... 22 6.2.5 Complex Types............................. 25 6.2.6 Zusammenfassung............................ 27 6.3 Regular Language description for XML - New Generation(RELAX NG).. 28 6.3.1 Aufbau.................................. 29 6.3.2 Datentypen............................... 30 6.3.3 Enumerationen............................. 30 6.3.4 Listen.................................. 31 6.3.5 Vorteile und Einschränkungen..................... 31 Literaturverzeichnis 31 2
1 Einleitung Diese Studienarbeit befasst sich mit der Grammatik und Sprache von XML-Dokumenten. XML steht für extensible Markup Language und ist eine eingeschränkte Form (man sagt auch eine Untermenge) von SGML. XML ist eine Auszeichnungssprache zur Darstellung hierarchisch strukturierter Daten in Form von Textdaten. Im Gegensatz zu HTML ist XML eine reine Beschreibungssprache und verzichtet gänzlich auf Formatierungs- und Layout-Elemente für die Darstellung der Daten. Sie wurde entwickelt, um Daten medienund plattformneutral zwischen verschiedenen Computersystemen auszutauschen, insbesondere über das Internet. Die vom World Wide Web Consortium (W3C) herausgegebene XML-Spezifikation definiert eine Metasprache, auf deren Basis durch strukturelle und inhaltliche Einschränkungen anwendungsspezifische Sprachen definiert werden. Diese Einschränkungen werden durch Schema-Sprachen wie DTD (Document Type Definition) oder XML-Schema ausgedrückt. Dokumente in spezifischen Anwendungen weisen meistens eine gewisse Einheitlichkeit in der Struktur auf. Schema-Sprachen werden hier eingesetzt, um einerseits die Beschreibung der Dokumentenstruktur nach einem einheitlichen Schema zu ermöglichen, andererseits die sprachlichen Mittel zur Beschreibung und Auszeichnung genauer festzulegen (Datentypisierung, Validierungsregeln, etc.). Schemas können zur Dokumentation, zur Validierung oder zur Automatisierung von Abläufen benutzt werden. XML Schemas sind heute ein zentraler Bestandteil von Webservice-Spezifikationen. Die vorliegende Ausarbeitung stellt die Grammatik und die grundlegenden Elemente/Bausteine der Auszeichnungssprache dar. Nach einem kurzen Überblick über die Hierarchie der Chomsky-Grammatiken, aus denen auch XML entstand (Typ 2), wird auf das in XML verwendete Vokabular eingegangen. Kapitel 4 stellt die logische und physische Struktur von XML-Dokumenten dar. Kapitel 5 führt zwei wichtige Begriffe (Wohlgeformtheit und Gültigkeit) ein, die ausdrücken, wann ein Dokument syntaktisch richtig und nach dem Regelwerk der Grammatik korrekt zusammengesetzt ist. Kapitel 6 geht dann detailliert auf die wichtigsten Schema-Sprachen (DTD, XML-Schema) ein, mit denen sich verschiedene Varianten von XML-Sprachen für unterschiedliche Einsatzbereiche entwickeln lassen. Die Ausarbeitung schließt ab mit der Darstellung eines alternativen Ansatzes (Relax NG /Compact) für Schema-Sprachen, der mittlerweile ebenfalls ein Standard (bei ISO/IEC) geworden ist. RELAX entstand mit dem Vorsatz Tired of complex specifications? RE- LAX!, also mit der Intention, sowohl XML-Syntax wie Schema-Sprache im Hinblick auf eine beschleunigte Entwicklung von Applikationen schlanker und effizienter zu gestalten. 3
2 Chomsky-Grammatik 2.1 Grammatik Eine Grammatik ist die formale Beschreibung einer Sprache. Eine erzeugte Sprache (L(G))kann beliebig lang sein (nicht endlich), wobei die zugehörige Grammatik immer endlich ist. Eine Chomsky-Grammatik wird als Quad-Tupel G = (N, T, P, S) definiert und es gilt: a) N ist eine endliche, nicht-leere Menge der Variablen (Nicht-Terminale) b) T ist eine endliche, nicht-leere Menge von Symbolen, das sogenannte Terminalalphabet. c) N und T sind disjunkt: N T = 0 d) P ist eine endliche Menge von Ersetzungsregeln. Hierbei muss wenigstens ein Nicht- Terminal auf der linken Seite stehen. e) S ist die Startvariable und S N. Beispiel von korrekt geklammerten arithmetischen Ausdrücken (aus: [Schöning 2003]): G = ({S, T, F}, {(, ), a, +, *}, P, S }) P = {S T, S S + T, T F, T T * F, F a, F (S)} damit lässt sich folgender Ausdruck beschreiben: a * (a + a) L(G) denn: S T T T * F T * F F * (E) F * (E) a * (E + T) a * (E + T) a * (T + F) a * (T + F) a * (F + a) a * (F + a) a * (a + a) 2.2 Hierarchie Chomsky-Grammatiken werden entsprechend ihrer generativen Kapazität in der Chomsky- Hierarchie klassifiziert (Typ 0-3). Diese spiegelt die Leistungsfähigkeit einer Grammatik im Hinblick darauf wider [Fries 2008]: 4
2.2. HIERARCHIE welche Sprachtypen eine Chomsky-Grammatik erzeugen kann und mit welcher Art und mit welchen Grad an Adäquatheit 1 eine gegebene Sprache erfassen kann. Ausgehend von einer Grund-Grammatik (Typ-0-Grammatik), werden hierbei zunehmend Einschränkungen bezüglich der für den jeweiligen Typ erlaubten Produktionsregeln gemacht. Folgende Hierarchiestufen werden unterschieden: Typ-0-Grammatik (unbeschränkt) Grammatiken sind vom Typ-0, wenn sie dem Aufbau einer Grammatik entsprechen und keinerlei Einschränkungen unterliegen (allgemein Phrasenstrukturgrammatik genannt). Typ-1-Grammatik (kontextsensitiv) Es gilt: (w 1 w 2 ) P : w 1 w 2 Das heißt, dass nach einer Ersetzung die linke Seite kürzer oder gleich lang wie die rechte Seite ist. Ausnahme: Es ist erlaubt das Startsymbol durch die leere Menge zu ersetzen, wenn das Startsymbol auf der rechten Seite der Produktionsregeln nicht vorkommt. Typ-2-Grammatik (kontextfrei) Es gilt: (w 1 w 2 ) P : w 1 N und w 1 eine einzige Variable ist. Typ-3-Grammatik (regulär) Es gilt: w 2 T T N {ε} Das bedeutet, dass die Regeln auf der rechten Seite entweder einzelne Terminalzeichen sind oder ein Terminalzeichen gefolgt von einem Nichtterminal. Folgende Abbildung verdeutlicht die Einschränkung der verschiedenen Grammatiken: Abbildung 2.1: Hierarchie der Chomsky Grammatiken aus [Schöning 2003] 1 Angemessenheit, Gleichgewichtigkeit 5
3 Vokabular Mit einem speziellen Vokabular wird die Struktur eines Dokuments festgelegt, ferner welche Elemente in einem Dokument vorhanden seien dürfen. Damit wird die Grammatik eines XML-Dokuments definiert. Ein Element wird durch einen Starttag und einen Endtag begrenzt und besitzt häufig einen Inhalt (außer es handelt sich um ein leeres Element). Jedes Vokabular umfasst eine Untermenge der in XML möglichen sprachlichen Mittel, um ein konkretes Problem beschreiben zu können. Anhand eines begrifflichen und konzeptionellen Modells der Sachverhalte legt ein Vokabular fest, welche Objekte relevant sind, welche Eigenschaften diese haben und in welcher Beziehung diese untereinander stehen. Ein definiertes Vokabular wird im Prolog des XML Dokuments angegeben. Ein Vokabular wird mittels Schema-Sprachen wie z.b. DTD oder XSD beschrieben und schreibt die Grammatik eines Dokumentes vor. Entsprechend den unterschiedlichen Anwendungszwecken wurden verschiedene Vokabulare entwickelt und definiert. Die folgende Liste zeigt einen kleinen Ausschnitt: SMIL (Synchronized Multimedia Integration Language) RSS (RDF Rich Site Summary) AIML (Astronomical Instrument Markup Language) DOM (W3C Document Object Model) Java Help API JSML (Java Speech Markup Language) VML (Vector Markup Language) 6
4 Logische Struktur XML-Dokumente besitzt einen physischen und logischen Aufbau. Die Syntax des XML- Dokuments definiert die logische Struktur, die Aufteilung auf unterschiedliche Medien, Dateien und/oder Datenbanken, definieren die physische Implementierung. 4.1 Logische Struktur Definition: Jedes XML Dokument enthält ein oder mehrere Elemente, deren Grenzen entweder durch das Starttag und Endtag begrenzt sind, oder als leeres Elemente definiert sind (mit dem Empty-Elementtag). Jedes Element besitzt einen Typ, der über einen Namen identifiziert wird, oft auch "generischer Identifikator"(GI) genannt, und kann eine Menge von Attribut-Spezifikationen haben. Jede Attribut-Spezifikation besitzt einen Namen und einen Wert.[Bray u. a. 2008] Formal wird die Syntax in der Recommendaton des W3C in einer EBNF (Extended Backus-Naur-Form) beschrieben. Die EBNF ist nach der Einteilung von Chomsky eine Typ-2-Sprache, also eine kontextfreie Sprache. Hieraus folgt, dass auch XML-Dokumente kontextfrei sind, wenn sie wohlgeformt und gültig sind. Folgender Auszug beschreibt die Syntax von XML grob 1 : 1 S = Leerzeichen; PI = Processing Instructions; Reference = Verweist auf den Inhalte einer benannten Identität; Eq = Equadation; 7
4.1. LOGISCHE STRUKTUR Aufbau von XML-Dokumenten: document prolog element Misc* XML Deklarationen: prolog XMLDecl? Misc* (doctypedecl Misc*)? XMLDecl <?xml VersionInfo EncodingDecl? SDDecl? S??> VersionInfo S version Eq ( "VersionNum VersionNum ) Eq S? = S? VersionNum 1. [0-9]+ Misc Comment PI S Elemente: element EmptyElmTag STag content ETag Startelement: STag < Name (S Attribute)* > Attribute Name Eq AttValue Endelement: ETag </ Name S? > Leeres Element: EmptyElmTag < Name (S Attribute)* S? /> Inhalt: content CharData? ((element Reference CDSect PI Comment) CharData?)* Misc Comment PI S Dieser Ausschnitt zeigt den grundsätzlichen Aufbau eines XML-Dokumentes. Jedes XML Dokument ist demnach hierarchisch aufgebaut und kann folglich durch eine Baumstruktur dargestellt werden. Ein XML Dokument besteht aus einem Prolog und mehreren verschachtelten Elementen. Die Versionsnummer sollte zurzeit mit 1.0 angegeben werden. Die Funktion des Markups in einem XML-Dokument ist es, die Aufteilung auf Speichereinheiten und die logische Struktur zu beschreiben, sowie Attribut-Wert-Paare mit der logischen Struktur zu verbinden. Die Dokumenttyp-Deklaration in XML erlaubt Beschränkungen der logischen Struktur zu definieren und unterstützt darüber hinaus die Verwendung von vordefinierten Speichereinheiten. Beispiel (wohlgeformt): <?xml version= 1.0 encoding= UTF-8 standalone= yes?> <vorlesungen> <fach id= 505 > XML-Technolgien </fach> <fach id= 404 > Computergrafik </fach> </vorlesungen> 8
4.2. PHYSISCHER AUFBAU 4.2 Physischer Aufbau Physisch besteht ein XML-Dokument aus einer oder mehreren Dateien/Medien (sogenannten Entities). Diese Entitäten beinhalten inhaltliche Informationen, aber keine Struktur, Regeln oder Grammatik. Mit Entitäten können in einer zusätzlichen Datei Definitionen für ein XML-Dokument deklariert werden, um z.b. beim Datenaustausch die selbe Interpretation von XML-Dokumenten zu erreichen. Entitäten, sowie Elemente und Attribute, werden in einer DTD deklariert. Jedes XML Dokument besteht aus mindestens einer Entität, der Document Entity. Mit einer Entität kann auf verschiedene Daten verwiesen werden, d.h. man kann in der DTD eine Definition festlegen und diese in einem XML- Dokument mittels Shortcuts referenzieren. Jede Entität darf nur einmal deklariert werden, ansonsten wird die erste Deklaration verwendet. Entitäten werden nach der W3C Recommendation (siehe[bray u. a. 2008]) wie folgt definiert: EntityDecl GEDecl PEDecl GEDecl <!ENTITY S Name S EntityDef S > PEDecl <!ENTITY S % Name S PEDef S > EntityDef EntityValue (ExternalID NDataDecl?) PEDef EntityValue ExternalID Der Name gibt den Identifikator der definierten Entität an. Die Entität-Definition verweist entweder auf einen Text oder referenziert ein externes Dokument. Es können verschiedene Entität-Typen unterschieden werden, die nachfolgend kurz erklärt werden: Parsed vs. Unparsed Entity: Eine geparste Entität wird in einem XML-Dokument durch die entsprechende Definition als Text ersetzt. Ungeparste Entitäten werden im Gegensatz zu geparsten Entitäten nicht vom Parser analysiert. Eine ungeparste Entität ist eine Ressource, deren Inhalt ggf. keine XML-Daten darstellt, wie z.b. ein Bild. Eine ungeparste Entität ist an eine NOTATION gebunden. Parsed Entity - Beispiel: <?xml version= 1.0 > <DOCTYPE Hochschule [ <!ENTITY hm Hochschule München > ]> <Hochschule> &hm; </Hochschule> In diesem Beispiel wird zuerst die Doctype-Deklaration festgelegt und anschließend das 9
4.2. PHYSISCHER AUFBAU XML-Dokument aufgestellt. Das DTD enthält den Namen Hochschule, der im XML- Dokument selbst als Dokument-Element bzw. Rootelement festgelegt ist. Würde man ein anderes Element als Dokument-Element verwenden, würde das XML-Dokument nicht mehr wohlgeformt sein. Die Entität kann im XML-Dokument leicht anhand des Namens referenziert werden. Durch den Parser wird die Referenz durch den gesamten Text ersetzt. Allgemeine vs. Parameterentitäten: Allgemeine Entitäten (engl. general entities) werden in XML-Dokumenten verwendet. Im Gegensatz dazu werden die zuvor geparsten Parameterentitäten ausschließlich in der DTD verwendet. Diese beiden Typen verwenden unterschiedliche Formen von Referenzen und in verschiedenen Kontexten auftreten. Beide Entitäten werden in der DTD definiert. Allgemeine Entität - Beispiel: <?xml version= 1.0 > <DOCTYPE Hochschule [ <!ENTITY FK07 Fakultät für Informatik und Mathematik > <!ENTITY FK09 Fakultät für Wirtschaftsingenieurwesen > <!ENTITY FK03 Fakultät für Maschinenbau, Fahrzeugtechnik, Flugzeugtechnik > ]> <Hochschule> <Fakultät> FK07: &FK07; </Fakultät> <Fakultät> FK03: &FK03; </Fakultät> </Hochschule> Nach dem Parsen wird die abgekürzte Schreibweise durch den vollständigen Namen ersetzt. Hierbei wird die Referenz immer zwischen dem & und Semikolon geschrieben bzw. jede Referenz wird mit dem Semikolon beendet. Parameterentität - Beispiel ([Shermin 1999], Kapitel:Entities): <?xml version= 1.0 > <DOCTYPE Books [ <!ENTITY % pub Éditions Gallimard > <!ENTITY % rights All rights reserved > <!ENTITY book La Peste: Albert Camus, 1947 % pub;. % rights;. > ]> Die Ausgabe im vorliegenden Beispiel würde sein: La Peste: Albert Camus, c 1947 Éditions Gallimard. All rights reserved. Hierbei muss vor dem Namen der Entität ein Prozentzeichen angeführt werden, damit diese Entität in der DTD als Referenz verwendet werden kann. 10
4.2. PHYSISCHER AUFBAU Interne und externe Entitäten: Eine interne Entität liegt vor, wenn das EntityValue verwendet wird. Das bedeutet, dass eine Entität immer auf Text abgebildet wird, der in der DTD deklariert ist. Es verweist nicht auf eine externe Datei, wie es bei ungeparsten Entitäten der Fall ist. Interne Entitäten werden verwendet, um Abkürzungen einzufügen: an jeder Stelle im Text, wo das selbe Textelement vorkommt, kann auf diese Entität verwiesen werden. Somit können z.b. auch Rechtschreibfehler vermieden werden. Externe Entitäten werden verwendet, um auf eine externe Datei zu verweisen. Meistens enthält diese Datei einen großen Text oder binäre Daten. Enthält sie dagegen Text, wird sie nach dem Parsen in das XML-Dokument eingefügt, ansonsten wird auf die Datei verwiesen (ungeparste Entität). Eine externe Entität wird wie folgt definiert: ExternalID SYSTEM S SystemLiteral PUBLIC S PubidLiteral S Systemliteral NDataDecl S NDATA S Name Für weitere Informationen siehe [Bray u. a. 2008]. Externe Entität - Beispiel ([Shermin 1999], Kapitel:Entities): <?xml version= 1.0 > <DOCTYPE MyType [ <!ENTITY LIagreement SYSTEM http://www.mydomain.com/license.xml > <!ENTITY LOGO SYSTEM http://www.mydomain.com/logo.gif NDATA GIF87A> ]> In beiden Fällen wird der XML Prozessor den Inhalt nicht parsen, da sich dieser auf binäre Daten bezieht. Bei der zweiten Entität, wird zusätzlich zum Speicherort des Bildes auch der Typ angegeben. Gegebenenfalls kann man die Anzeige des Bildes an eine NOTATION binden, in der spezifiziert wird, mit welchem Programm das Bild geöffnet werden kann. Vordefinierte Entitäten: In XML gibt es vordefinierte Entitäten, die eingebunden werden können. Folgende Entitäten sind definiert: &al; Linke öffnende Klammer < > Rechte schließende Klammer > & Und Zeichen & &apos Apostroph " Anführungszeichen " 11
5 Wohlgeformtheit und Gültigkeit Die XML Spezifikation des W3C definiert die Regeln zur Erstellung von XML Dokumenten. Erfüllt ein XML Dokument alle diese Regeln, also entspricht es der korrekten Syntax, spricht man von einem wohlgeformten (engl. well formed) XML-Dokument. Treten beim Parsen Fehler auf, wird die weitere Verarbeitung abgebrochen. Folgende Liste zeigt einen Ausschnitt der Regeln: Ein XML Dokument beginnt mit der Produktion des Dokumentes (siehe Kapitel 4.1): document prolog element Misc*? Jede geparste Entity, welche direkt oder indirekt referenziert wird, muss wohlgeformt sein. Es gibt ein oder mehrere Elemente Es darf nur ein root-element bzw. Dokument-Element existieren Das bedeutet, dass das Dokument-Element mehrere untergeordnete Elemente besitzt. Es darf nicht mehrfach vorkommen. Element Type Match Jeder Name im Endtag muss dem des Starttags entsprechen. Jedes Starttag und Endtag müssen ebenentreu-paarig verschachtelt werden. Das heißt, alle Elemente müssen geschlossen werden, bevor der Endtag des entsprechenden Elternelements oder der Starttag von weiteren Elementen in der selben Hierarchiestufe erscheint. Ein Element darf nicht mehrere Attribute mit dem selben Namen haben. Ein Elementname darf nicht mit einer Ziffer oder bestimmten Sonderzeichen ($,, %, &, ;) beginnen. Erfüllt ein XML-Dokument die syntaktischen Regeln und entspricht dabei einer vordefinierten Grammatik, spricht man von einem gültigen bzw. validen Dokument. Eine Grammatik wird mittels eines Schemas oder einer DTD (Document Type Definition) definiert. Die verwendete Grammatik wird am Anfang des XML- Dokumentes (z.b. im Prolog) angegeben (Grammatiken siehe Kapitel 6). Bestimmte Parser, sogenannte validierende Parser, sind in der Lage sowohl die Syntax als auch die Grammatik auf Korrektheit zu überprüfen. Das XML-Dokument ist gültig, wenn beim Parsen keine Fehler auftreten. Verschiedene Programme werden im Internet zur Verfügung gestellt, um die Wohlgeformtheit seines XML-Dokumentes überprüfen zu können. Einige können zusätzlich die Grammatik überprüfen und ermitteln ob ein XML-Dokument gültig ist. Die meisten Programme können jedoch nur eine einzige Schema-Sprache validieren, z.b. DTD oder XSD. 12
Beispiel für ein nicht wohldefiniertes XML Dokument: <?xml version= 1.0 encoding= UTF-8 standalone= yes?> <document> <vorlesungen> <fach id= 505 > XML-Technologien </fach> <fach id= 404 > Computergrafik </fach> </vorlesungen> </document> <document> </document> In diesem Beispiel wurden zwei Dokument-Elemente definiert. Nach den Regeln des W3C ist dies nicht erlaubt. Um ein wohlgeformtes Dokument zu erhalten, müsste der zweite Tag <document></document> aus dem XML Dokument entfernt werden, da nur ein einziges Dokument-Element vorhanden seien darf. 13
6 XML Schemasprachen Eine XML-Schemasprache wird verwendet, um Validierungsregeln für ein XML-Dokument vorzugeben. Hiermit können XML-Dokumente klassifiziert werden und deren syntaktische Beschreibung bezüglich Struktur und ihres Inhalts festgelegt werden, sprich die Grammatik eines Dokumentes. Heute sind 3 Schemasprachen weit verbreitet, DTD, XML Schema und RELAX NG, die nachfolgend kurz vorgestellt werden. 6.1 Document Type Definition (DTD) Eine DTD ist ein Format, um ein XML-Dokument zu beschreiben und wurde mit XML standardisiert. Es beschreibt die Grammatik und Struktur von XML-Dokumenten. Die Syntax von XML beschreibt die relative Position von korrespondierenden Paaren von Tags. Diese Beschreibung wird anhand von DTDs angegeben. Angenommen man ignoriert die Attribute eines Tags, so kann man von einer kontextfreien Grammatik sprechen [Berstel u. Boasson 2008]. Mit einer DTD wird festgelegt, welche Elemente und Attribute ein XML-Dokument enthalten darf und in welcher Beziehung die Elemente zueinander stehen. Wenn ein XML- Dokument den syntaktischen Vorgaben entspricht, also wohlgeformt ist, und die verwendeten Elemente der Angabe in der DTD entsprechen, dann ist das XML-Dokument gültig. Jede DTD wird am Anfang eines XML-Dokuments angegeben, in der sogenannten Document Type Declaration. Eine DTD kann mehrere DTDs enthalten. Jede DTD hat folgende Struktur: doctypedecl <!DOCTYPE S Name (S ExternalID)? S? ( [ intsubset ] S?) S? > intsubset (markupdecl DeclSep)* markupdecl elementdecl AttlistDecl EntityDecl NotationDecl PI Comment DeclSep PEReference S Aus der Spezifikation ist ersichtlich, das ein DTD aus verschiedenen Bausteinen besteht. Hierzu gehört die möglichen Elemente, deren Attribute, die Anordnung der Elemente in einem Dokument (Schachtelung, Reihenfolge, Anzahl) und die Entities. Der Name einer DTD ist zugleich das Dokument-Element (Root-Element) in dem XML-Dokument. 6.1.1 Einbinden einer DTD Eine DTD kann in einem XML-Dokument auf verschiedene Weisen deklariert werden. Folgende Möglichkeiten werden unterschieden: 14
6.1. DOCUMENT TYPE DEFINITION (DTD) Interne DTDs Interne DTDs werden innerhalb des XML-Dokumentes definiert (siehe obiges Beispiel). Die DTD wird in der Doctype Declaration notiert. Externe DTDs Externe DTDs liegen außerhalb des XML-Dokumentes und sind Textdateien mit der Dateiendung *.dtd. Diese DTDs werden verwendet, wenn mehrere Dokumente auf eine vorgegebene Grammatik in der DTD zugreifen. Dies ist insbesondere dann von Nutzen, wenn Dateien ausgetauscht werden und beide Seiten (Sender und Empfänger) das XML- Dokument interpretieren können. Eingebunden werden die Externen Dokumente folgendermaßen: <?xml Version= 1.0?> <!DOCTYPE mydtd SYTEM http://www.xyz.de/xml/mydtd.dtd > Dabei kann sich das Dokument wie hier im Internet befinden oder lokal auf der Festplatte liegen. Shared DTDs Bei den Shared DTDs kann ein XML-Dokument auf eine externe Datei verweisen oder die intern deklarierte DTD verwenden. Dabei ist es auch möglich beide Deklarationen zu mischen. <?xml Version= 1.0 encoding= utf-8?> <!DOCTYPE html PUBLIC -//W3C//DTD XHTML 1.0 Transitional//EN http://www.w3.org/tr transitional.dtd [ <! an interanal subset can be defined here > ]> 6.1.2 Elemente Mit der Elementdeklaration (elementdecl) wird der Name eines Elements und dessen Inhalt angegeben. Ein Element kann angeben, welche Elemente als Kindelemente auftreten können. Die angegebenen Namen der Elemente werden später in den XML-Dokumenten wieder verwendet, d.h. die spezifizierten Namen in der DTD müssen den Namen im XML- Dokument entsprechen. Die Struktur wird nach der W3C folgendermaßen deklariert: elementdecl <!ELEMENT S Name S contentspec S? > contentspec EMPTY ANY Mixed children Beispiele: EMPTY: <!ELEMENT br EMPTY> 15
6.1. DOCUMENT TYPE DEFINITION (DTD) Es handelt sich hier um ein leeres Element, d.h. es enthält keinen Inhalt, muss aber ggf. (je nach Grammatik) im XML-Dokument angegeben werden. ANY: <!ELEMENT client ANY> Bei dieser Deklaration ist jede Angabe erlaubt. Das Element kann hier ein Kindelement oder ein leeres Element sein oder nur Text enthalten. Mixed und children (Beispiel aus [Shermin 1999], Kapitel Elements): <?xml version= 1.0 standalone="yes"?> <!DOCTYPE Filme [ <!ELEMENT FILM (TITLE, (#PCDATA,GENRE,YEAR)*> <!ELEMENT TITLE (#PCDATA)> <!ELEMENT GENRE (#PCDATA)> <!ELEMENT YEAR (#PCDATA)> ]> <Filme> <FILM> <TITLE> Tootsie </TITLE> <GENRE> comedy </GENRE> <YEAR> 1982 </YEAR> Critic: very fnny movie! </FILM> <FILM> <TITLE> Avatar </TITLE> </FILM> </Filme> Das Beispiel zeigt, dass ein Film stets einen Titel enthält, optional zusätzlich Text, ein Genre und das Erscheinungsjahr enthalten kann. Das Komma verweist darauf, dass sämtliche Elemente vorkommen müssen. Die Daten in der Klammer sind optional * und werden durch das Symbol getrennt (logisches Oder). Beim Film können gemischte Angaben gemacht werden. Dabei können entweder Text (#PCDATA) oder weitere Kindelemente angegeben werden. Alternativ können Elemente einfach auf weitere Elemente verweisen. Damit kann die Struktur eines XML-Dokumentes festgelegt werden. Elemente auf die verwiesen wird, müssen in der DTD aufgeführt sein. 6.1.3 Attribute Jedem Element können Attribute, also zusätzliche Informationen, zugeordnet werden. Diese werden innerhalb der Elementdefinition definiert. Ein Element kann beliebig viele Attribute besitzen. Der Name der Attributliste muss mit dem Namen des dazugehörigen Elements übereinstimmen. Jedes Attribut besitzt einen bestimmten Attributtyp, ggf. wird ein Defaultwert zugewiesen. Der Aufbau: Der Typ eines Attributes kann folgende Werte haben: 16
6.1. DOCUMENT TYPE DEFINITION (DTD) AttlistDecl <!ATTLIST S Name S AttDef* S? > AttDef S Name S AttType S DefaultDecl AttType StringType TokenizedType EnumeratedType CDATA (StringType) Beliebiger Text. Beispiel: "Dies ist ein Text" Enumeration (EnumeratedType): Hiermit kann für ein Attribut eine Menge von Enumerationen angegeben werden. Beispiel: (Ass Bube Dame König) NOTATION (EnumeratedType): Damit kann angegeben werden, wie der Inhalt eines Elements interpretiert wird. Mehrere Notationen werden durch getrennt. Beispiel: NOTATION (gif jpeg png) ID (TokenizedType) Eine ID darf in einem XML-Dokument genau einmal bei einem Attribut vorkommen. Dabei muss es den Namenskonventionen von XML genügen. Jedes Elemente darf nur eine ID besitzen. IDREF (TokenizedType) Mittels einer IDREF kann in einem XML-Dokument auf andere IDs referenziert werden. ENTITY (TokenizedType) Verweis auf eine ungeparste Entität. Die Entität muss in der DTD deklariert sein. ENTITIES (TokenizedType) Verweis auf mehrere ungeparste Entitäten. NMTOKEN (TokenizedType) Namens-Token. Erlaubte Zeichen: A-Z, a-z, 0-9, Punkt, Bindestrich, Unterstrich, Doppelpunkt, Mittelpunkt (#183) Beispiel: ap10.t NMTOKENS (TokenizedType) Mehrere NMTOKEN getrennt durch Leerzeichen. Beispiel: a1 a2 a3 a4 Jedes Attribut wird durch eine Defaultdeklaration näher spezifiziert. Folgende Defaultdeklarationen sind zulässig: AttValue Es kann ein Defaultwert angegeben werden, der bei der Initialisierung gesetzt wird, falls kein anderer Wert verwendet wird. #REQUIRED Die Attributdeklaration muss explizit im Element angegeben werden. #IMPLIED Der Default-Wert wird von der Anwendung gesetzt. #FIXED Nur der angegebene Wert darf als Attributwert verwendet werden. 17
6.1. DOCUMENT TYPE DEFINITION (DTD) Beispiel: <?xml version= 1.0 standalone="yes"?> <!DOCTYPE Filmbibliothek [ <!ELEMENT FILM (TITLE, YEAR)> <!ELEMENT YEAR (#PCDATA)> <!ATTLIST FILM FilmID ID #REQUIRED Bewertung (0 2 4 6 8) "4"]> <Filmbibliothek> <FILM FilmID= F01 Bewertung="6» <TITLE> Tootsie </TITLE> <YEAR> 1982 </YEAR> </FILM> <FILM FilmID= F02 > <TITLE> Avatar </TITLE> <YEAR> 2010 </YEAR> </FILM> </Filmbibliothek> 6.1.4 Vor- und Nachteile einer DTD Wie jede Sprache, sind DTDs nicht für jeden Anwendungszweck geeignet. Vor- und Nachteile von DTDs werden im folgenden dargestellt. Vorteile Definition einer Struktur von XML-Dokumenten (Grammatik) Austausch und Erstellen mehrerer XML-Dokumente, die den selben Anforderungen entsprechen. Nachteile Der Aufwand für die Erstellung einer DTD lohnt sich für ein einzelnes Dokument nicht. Ebenfalls nicht, wenn sich die Deklaration für ein Dokument häufig ändert oder nur eine Person mit der DTD arbeitet. DTDs können nicht in der XML-spezifischen Sprache deklariert werden (Anlehnung an SGML) Element- und Attribut-Deklarationen sind kontextsensitiv. keine Typenklassen (wie boolsche Werte, Ziffern, Zeitangaben, etc.) Spezifikation von Attributen stark eingeschränkt Keine Einschränkung von Zeichenketten Keine Unterstützung von Namensräumen 18
6.2. XML SCHEMA DEFINITION(XSD) 6.2 XML Schema Definition(XSD) Das XML Schema (XSD) ist eine Empfehlung des W3C Recommendation zur Beschreibung der Struktur von XML-Dokumenten. Sie wurde im Mai 2001 veröffentlicht. Es bietet eine Alternative zu DTDs, ihre sprachlichen Mitteln sind jedoch wesentlich mächtiger. Ein XML Schema wird selbst in XML geschrieben und definiert die Verwendung von Datentypen und von Namespaces. Ein Dokument, dass einem bestimmten Schema entspricht, wird häufig auch Instanzdokument oder Instanz genannt. Jede Datei, die ein XML Schema enthält hat den Präfix.xsd. XML Schemas ermöglichen den lexikalischen Raum durch reguläre Ausdrücke zu beschränken. Der lexikalische Raum ist die Menge aller Darstellungen, die nach dem Parsen (und Whitespace-Verarbeitung) für einen gegebenen Datentyp zulässig sind. Ein XML Schema beschreibt Instanzdokumente in einem objektorientierten Entwurf. Eine Folge daraus ist die Bedeutung des Typs. Wenn Elemente und Attribute ähnlich wie Objekte behandelt werden, sind Typen das, was den objektorientierten Klassen am nächsten kommt. Sie sind wesentlich, um die Ähnlichkeit zu Objekten auszudrücken. Zudem gibt es bei XML Schemas Ableitungs- und Ersetzungsmechanismen, die so definiert sind, dass sie der Vererbung zwischen objektorientierten Klassen entsprechen.[vlist 2003] Die grundlegenden Konzepte des XML Schemas werden nachfolgend erläutert. 6.2.1 Aufbau und Einbindung Ein XML-Schema muss neben der XML-Syntax noch weitere Regeln befolgen, um die Struktur von XML-Dokumenten zu definieren. Der grundlegende Aufbau sieht folgendermaßen aus: <?xml version= 1.0 encoding= UTF-8?> <xsd:schema xmlns:xsd= http://www.w3.org/2001/xmlschema xmlns= http://my.namespace.uri >... </xsd:schema> Mit dem Präfix xsd wird der Namespace für das Schema notiert. In diesem Namespace sind die Elemente und Datentypen spezifiziert. Mit der nächsten Angabe xmlns=... wird der Defaultnamespace angegeben. Um das XML Schema in einem XML-Dokument benutzen zu können, wird (anders als bei DTDs) die Verwendung direkt im Wurzelelement (Dokumentenelement) angegeben. <?xml version= 1.0?> <myxmldocument xmlns= http://my.namespace.uri xmlns:xsi= http://www.w3.org/2001/xmlschema-instance xsi:schemalocation= http://my.namespace.uri Adresskartei.xsd >... </myxmldocument> 19
6.2. XML SCHEMA DEFINITION(XSD) Dabei wird zuerst der Defaultnamespace angegeben, anschließend wird der Schema Instance Namespace eingebunden. Mit letzterem kann zuerst angegeben werden, welcher Namespace verwendet wird und wo dieser zu finden ist. 6.2.2 Datentypen Jedem Attribut oder Element wird ein Type zugeordnet. Damit wird jedem Type ein eindeutiger Datentyp zugeordnet, wie dies in einer Programmiersprache üblich ist. Vier verschiedene Typen werden unterschieden: Strings, Date, Numeric und Misc. Zu der Kategorie der Strings gehören die Typdefinitionen der DTD. Um die Kompatibilität zwischen XML Schema und XML 1.0 DTDs zu gewährleisten, sollten die Typdefinitionen der DTDs (ID, IDREF, etc.) nur in Attributen verwendet werden. Mit Date werden Zeit und Datum angegeben. Numeric definiert verschiedene Zahlentypen, wie int oder double. Misc enthält zusätzliche Datentypen wie boolean. Beispiel: <xsd:element name= Vorname type= xsd:string /> <Vorname>Klaus</Vorname> Vor jedem Typ steht der Präfix xsd: um auf den Namespace zu verweisen, in dem der Datentyp deklariert ist. Nachfolgende Tabelle zeigt einen Ausschnitt der wichtigsten Typen (die vollständige Liste findet man in der Referenz bzw. einschlägigen Tutorials): 20
6.2. XML SCHEMA DEFINITION(XSD) 6.2.3 Simple Types Abbildung 6.1: Typenhierarchie von XML-Schema aus [Vlist 2003] Jedes XML-Schema besteht aus mehreren Elementen und zugehörigen Attributen. Jedem Element oder Attribut wird der Namespace vorangestellt. Ein XML Schema kann aus einem einfachen Element bestehen. Ein einfaches Element besteht nur aus Text, es kann keine weiteren Elemente oder Attribute enthalten. Beispiel Element: <xsd:element name= Nachname type= xsd:string /> <xsd:element name= Alter type= xsd:integer /> <xsd:element name= Geburtstag type= xsd:date /> <Nachname>Meier</Nachname> <Alter>36</Alter> <Geburtstag>1988-03-27</Geburtstag> Jedem Element kann ein Defaultwert ( default=xxx ) oder ein fester Wert ( fixed=yyy ) zugewiesen werden. Feste Werte dürfen im XML-Dokument nicht verändert werden. Beispiel Attribut: <xsd:attribute name= language type= xsd:string default= de /> 21
6.2. XML SCHEMA DEFINITION(XSD) normalizedstring Typ/Bezeichner Beschreibung Beispiel Strings: string Enthält Zeichenketten, Zeilensprünge, Umbrüche und TAB Enthält Zeichenketten. Jedoch werden Zeilenumsprünge, Umbrüche und TAB vom XML-Prozessor gelöscht. Dieser Typ ist vom Typ String abgeleitet. <Vorname>Klaus <Vorname Date: date Spezifiziert den Tag. <Tag>2010-10-28</Tag> time Gibt die Uhrzeit an. <Zeit>11:45:00</Zeit> datetime Gibt Tag und Uhrzeit an. <Zeit>2010-10- 28T11:45:00</Zeit> Numeric: Integer Integerwert. <price>19</price> decimal Dezimalwert. <price>19.54</price> short Signed 16-bit Integer byte Signed 8-bit Integer positiveinteger Positiver Integerwert (1,2...) Misc: boolean Boolscher Bezeichner <price disabled=true>19</price> double Double-Wert <Nachname language= en >Meier</Nachname> Wie bei zu Elementen können für Attribute feste Werte oder Defaultwerte verwendet werden. 6.2.4 Ableitungen XML Schemas bieten die Möglichkeit, neue Datentypen durch Ableitungen zu definieren. Dabei bauen die neuen Datentypen auf existierenden vordefinierten Datentypen auf. Die Ableitungen eines Typs werden mittels Einschränkungen definiert. Ableitungen können nur auf einfache Datentypen angewendet werden. Jede Ableitung wird in einem restriction -Block definiert. Innerhalb eines Einschränkungsblock kann der Typ entweder durch Enumerations, Patterns oder Typ-spezifischen Eigenschaften (z.b. bei Integer mit mininclusive) eingeschränkt werden. Man unterscheidet drei verschiedene Ableitungsmethoden, die voneinander unabhängig sind: Ableitung durch Einschränkung Einem bestehenden Type (Grundtyp) werden zusätzliche Beschränkungen hinzugefügt. Die ursprüngliche Semantik und Bedeutung wird dabei nicht verändert. Ableitung durch Auflistung Ein neuer Datentyp wird als eine Liste von Werten definiert. Alle Einträge in einer 22
6.2. XML SCHEMA DEFINITION(XSD) Liste müssen vom selben Datentyp sein. Die Elemente in einer Liste werden durch Whitespaces getrennt. Ableitung durch Vereinigung Der neue Datentyp wird hier durch eine Menge anderer Datentypen definiert, der überwiegende Teil der Semantik geht dabei verloren. Die drei Ableitungstypen können untereinander verschachtelt werden. Dabei kommt es auf die richtige Reihenfolge an. Beispiele: Ableitung durch Einschränkung: Eine wesentliche Verbesserung gegenüber DTDs ist, dass Element- oder Attributwerte eingeschränkt werden können. Mit Enumerationen können Aufzählungen definiert werden, mit Patterns können z.b. Zeichenketten eingeschränkt werden. Die möglichen Einschränkungen sind von den verschiedenen Typen abhängig. Jede Restriktion steht zwischen zwei simpletype -Elementen. <xsd:element name= Months > <xsd:simpletype> <xsd:restriction base= xsd:string > <xsd:enumeration value= Januar /> <xsd:enumeration value= März /> <xsd:enumeration value= Mai /> </xsd:restriction> </xsd:simpletype> </xsd:element> Zuerst wird der Elementname bzw. Attributname definiert und anschließend die Restriktion. In diesem Fall handelt es sich um eine Enumeration. <xsd:element name= Months > <xsd:simpletype> <xsd:restriction base= xsd:integer > <xsd:mininclusive value= 1 /> <xsd:maxinclusive value= 12 /> </xsd:restriction> </xsd:simpletype> </xsd:element> Der Integer-Wert wird auf den Bereich 1-12 begrenzt. Alternativ kann zuerst das Element und später die Beschränkung definiert werden. Hierfür muss der Name im simpletype angegeben werden. <xsd:element name= Email > <xsd:simpletype> 23
6.2. XML SCHEMA DEFINITION(XSD) <xsd:restriction base= xsd:string > <xsd:pattern value= (([a-z] [A-z])+@([a-z] [A-z])+.[a-z][a-z]) /> </xsd:restriction> </xsd:simpletype> </xsd:element> Im Beispiel wird der String auf eine mögliche Zeichenkettenfolge beschränkt. Die möglichen Zeichen sind innerhalb der eckigen Klammern vorgegeben. Das + Symbol bedeutet, dass mindestens eins dieser Elemente vorkommt. bedeutet ein logisches Oder. Ein Element muss aus der einen Menge oder aus der anderen Menge ein Element ausgewählt werden. Ableitung durch Auflistung [Vlist 2003]: <xsd:simpletype name= mystringlist > <xsd:list itemtype= xsd:string /> </xsd:simpletype> <xsd:simpletype name= MyRestricedStringList > <xsd:restriction base= mystringlist > <xsd:maxlength value= 10 /> </xsd:restriction> </xsd:simpletype> In diesem Beispiel wird zuerst die Liste definiert, anschließend wird ein eingeschränkter Listentyp definiert. Dieser ist von der mystringlist abgeleitet und darf maximal 10 Elemente enthalten. Zu beachten ist, dass der Whitespace zur Trennung der Elemente dient und nicht innerhalb eines einzelnen Strings vorkommen kann. Folgender Wert ist zulässig: <MyRestricedStringList> Dieser Text hat weniger als zehn Wörter. <MyRestricedStringList> Ableitung durch Vereinigung [Vlist 2003]: <xsd:simpletype name= integerordata > <xsd:union membertypes= xsd:integer xsd:date /> </xsd:simpletype> Bei dieser Definition darf das Element entweder ein Integer oder eine Tag-Angabe enthalten. Alternativ kann die Vereinigung mehrer Typen auch über das einfache Element eingebettet werden: <xsd:simpletype name= integerordata > 24
6.2. XML SCHEMA DEFINITION(XSD) <xsd:union> <xsd:simpletype> <xsd:restriction base= xsd:integer > <xsd:mininclusive value= 20 /> </xsd:restriction> </xsd:simpletype> <xsd:simpletype> <xsd:restriction base= xsd:date /> </xsd:simpletype> </xsd:union> </xsd:simpletype> 6.2.5 Complex Types Im Gegensatz zu einfachen Typen können komplexe Typen Elemente und Attribute zusätzlich zu den Zeichenketten enthalten. Ein Element kann ein leeres Element sein, es kann weitere Elemente enthalten, es kann nur Text enthalten oder es kann Text und zusätzlich Elemente enthalten. Beispiel: <schema xmlns:xsd= http://www.w3.org/2001/xmlschema > <xsd:complextype name= MusicInformation > <xsd:sequence> <xsd:element name= Title type= xsd:string /> <xsd:element name= Length type= xsd:duration /> <xsd:element name= Artist type= xsd:string /> </xsd:sequence> <xsd:attribute name= Genre type= xsd:string /> </xsd:complextype> <xsd:element name= Music type= MusicInformation /> </xsd:schema> Innerhalb der Sequenz können die Kindelemente von einem Element aufgeführt werden bzw. die Attribute eines Elements. Ein Typ eines Elementes kann auf ein komplexes Element verweisen. In diesem Beispiel müssen die Elemente in der vorgegebenen Reihenfolge auftreten. Um reguläre Ausdrücke mit XML Schemas zu definieren, werden verschiedene Inhaltsmodelle bereitgestellt. Diese Inhaltsmodelle können nur im Bezug auf komplexe Typen verwendet werden. 25
6.2. XML SCHEMA DEFINITION(XSD) Angabe von Indikatoren Jedes komplexe Element kann drei verschiedene Indikatoren besitzen. Zu den Indikatoren zählt die logische Oder-Verknüpfung (choice), die Angabe einer Reihenfolge(sequence) oder die Angabe, dass jedes Kindelement genau einmal auftreten darf (all). Die Indikatoren dürfen untereinander verschachtelt werden. Beispiel logisches Oder: (A B C) <xsd:complextype name= ABC > <xsd:choice> <xsd:element name= A type= AType /> <xsd:element name= B type= BType /> <xsd:element name= C type= CType /> </xsd:choice> </xsd:complextype> Beispiel any: (ABC ACB BAC BCA CAB CBA) <xsd:complextype name= ABC > <xsd:all> <xsd:element name= A type= AType /> <xsd:element name= B type= BType /> <xsd:element name= C type= CType /> </xsd:all> </xsd:complextype> Beispiel sequence: (ABC) <xsd:complextype name= ABC > <xsd:sequence> <xsd:element name= A type= AType /> <xsd:element name= B type= BType /> <xsd:element name= C type= CType /> </xsd:sequence> </xsd:complextype> Angabe von Kardinalitäten Die Kardinalität erlaubt jedem Element eine minimale Anzahl und eine maximale Anzahl zuzuweisen. Sowohl die minimale als auch maximale Anzahl von Elementen ist defaultmäßig immer 1. Diese Kardinalitäten werden in den Attributen minoccurrs und maxoccurs in einem Element oder Attribut angegeben. Beispiel: <xsd:complextype name= ABC > <xsd:sequence> <xsd:element name= A type= AType minoccurs= 1 maxoccurs= unbounded /> <xsd:element name= B type= BType maxoccurs= 10 /> <xsd:element name= C type= CType minoccurs= 0 maxoccurs= 2 /> 26
6.2. XML SCHEMA DEFINITION(XSD) </xsd:sequence> </xsd:complextype> Dabei darf jedes A minimal einmal vorkommen und beliebig oft vorkommen, B darf minimal einmal vorkommen und maximal zehnmal und C darf entweder gar nicht oder maximal zweimal vorkommen. 6.2.6 Zusammenfassung Die dargelegten Konzepte beschreiben nur die Grundlagen von XML-Schemas. XML- Schemas sind aber noch wesentlich mächtiger als nur Typdefinitionen (String, boolean, etc). XML-Schemas bietet noch folgende Möglichkeiten: Definition von Elementgruppen Referenzierungen innerhalb von XML auf andere Elemente Definition von anonymen Typen Verknüpfungen (union), eindeutige Schlüssel (unique), Listen Unterstützung von Modularisierung Namensräume XML-Schemas bieten eine fülle von Möglichkeiten, haben jedoch auch Nachteile: Falls Elemente Text und Unterelemente enthalten, können keine Beschränkungen für den Text definiert werden. Das Wurzelelement kann nicht festgelegt werden. Spezifikation sehr komplex (mit vielen Details), hohe Komplexität. Verwendung anonymer lokaler Elemente widerspricht der Verwendung von Namensräumen. Standardelemente können keine Unterelemente enthalten. Simple Type-Definitionen sind unflexibel. Mehrere Namensräume 27
6.3. REGULAR LANGUAGE DESCRIPTION FOR XML - NEW GENERATION(RELAX NG) 6.3 Regular Language description for XML - New Generation(RELAX NG) RELAX NG ist eine einfache Schema-Sprache für ein XML-Vokabular, basierend auf RE- LAX und TREX. Ein RELAX NG Schema spezifiziert ein Pattern einer Struktur und des Inhalts eines XML-Dokuments. RELAX wurde von Murata Makoto geschrieben und im März 2000 als japanischer ISO Standard Technical Report veröffentlicht. RELAX stellt eine einfache Alternative zum XML-Schema dar. Es wurde entwickelt mit dem Vorsatz Tired of complex specifications? RELAX!. RELAX basiert auf einer soliden mathematischen Grundlage, die zum einen reguläre Ausdrücke verwendet und zum anderen auf Hedge-Automata aufbaut. Die Hedge-Automata für XML wurden von Murata Makoto entwickelt. Zur selben Zeit entwickelte James Clark bei Thai Opensource Software TREX (Tree Regular Expressions). TREX baut im wesentlichen auf das Typensystem XDuce (zusammengefasst aus XML und transduce ) auf. TREX wurde im Januar 2001 veröffentlicht. Es handelt sich um eine Transformations-Sprache, die ein XML-Dokument als Eingabe verwendet, hieraus die Daten extrahiert und als Ausgabe ein anderes XML-Dokument erzeugt bzw. dessen Format umwandelt. RELAX NG wurde vom OASIS Technical Commitee entwickelt und von James Clark und Murata Makoto gemeinsam 2001 herausgegeben. Mittlerweile ist RELAX NG ein internationaler Standard (ISO/IEC 19757-2). RELAX NG ist eine einfache Schema-Sprache, die einfach zu erlernen ist, und entweder XML-Syntax verwendet oder in einer kompakten nicht XML-Syntax geschrieben werden kann. Es ändert nicht die Informationsmenge eines XML-Dokuments, unterstützt XML-Namespaces, behandelt Attribute und Elemente so weit wie möglich einheitlich, bietet eine uneingeschränkte Unterstützung für ungeordnete Inhalte sowie für gemischten Inhalt, basiert auf einer soliden theoretischen Grundlage und kann mit einer getrennten Datentypisierungssprache(wie W3C XML Schema Datatypes) zusammenarbeiten. [Rel 2010] Dieses Kapitel befasst sich mit der RELAX NG Compact Syntax. Eine Datei die eine RELAX NG Compact Syntax enthält hat die Dateiendung rnc. 28
6.3. REGULAR LANGUAGE DESCRIPTION FOR XML - NEW GENERATION(RELAX NG) 6.3.1 Aufbau RELAX NG Compact verwendet eine Syntax auf der Grundlage der EBNF (Extended Backus Naur Form). Der folgende Ausschnitt zeigt die grobe Struktur der Grammatik: toplevel decl*(pattern grammarcontent*) pattern element nameclass { pattern } attribute nameclass { pattern } grammar { grammarcontent* } { pattern }... ) grammarcontent start define dif { grammarcontent* } include anyuriliteral [inherit] [ { includecontent* } ] In der Deklaration werden die verwendeten Namespaces angegeben. Wird ein einfaches Dokument erstellt, beginnt die Struktur unmittlebar mit einem Element, Attribut oder ähnlichen Anweisungen. Wird eine größere Grammatik erstellt, verwendet das Pattern als Angabe das Grammar. Dabei können Verweise auf andere Elemente eingebaut werden. Dies ist insbesondere von Vorteil, wenn mehreren Elementen das gleiche Element zugewiesen werden sollen. Weitere Ersetzungsregeln der RELAX NG Compact Syntax findet man in der Spezifikation. Folgende Tabelle zeigt die möglichen Einschränkungen, die mit RELAX NG verwendet werden können. In der rechten Spalte wird das dazugehörige Element in der XML- Schreibweise angegeben. Syntax Beschreibung RELAX NG Element pattern Mehrere Patterns können mittels Komma getrennt pattern (, pattern)+ werden. Dabei müssen alle Pattern, die aufgeführt sind, später in der gleichen Reihenfolge im XML-Dokument erscheinen. pattern Mehrere Patterns werden mit getrennt. Das choice pattern ( pattern)+ Symbol beschreibt das logische Oder. pattern Die angegebenen Pattern können in einer beliebigen interleave pattern ( & pattern)+ Reihenfolge angegeben werden pattern Das Element darf einmal oder gar nicht vorkommen. optional pattern? pattern Das Element darf nicht oder beliebig oft vorkommen. zeroormore pattern * pattern Das Element muss mindestens einmal vorkommen. oneormore pattern + 29
6.3. REGULAR LANGUAGE DESCRIPTION FOR XML - NEW GENERATION(RELAX NG) Beispiel: grammar { start = element Song { element Artist { artistinformation }+, attribute Title {text}, attribute Genre {text}? } artistinformation = element name { text } & element vorname { text }? & element email { text }? } Das Beispiel enthält einen Song, der Informationen über mehrere Artisten enthält und zusätzlich zwei Attribute (Title und Genre). Der Artist hat weitere Kindelemente, die in einem weiteren Pattern-Block beschrieben werden. Jedes Attribut oder Element mit den oben angegebenen Pattern kann eingeschränkt werden. Es ist auch möglich, logische Verknüpfungen zwischen Elementen und Attributen (entsprechend durch die Syntax) zu verwenden. Zum Beispiel kann ein Element entweder ein Kindelement oder ein Attribut enthalten. Enthält ein Element weder ein Attribut noch ein Kindelement wird dies mit dem Bezeichner empty in der geschweiften Klammer angegeben. Im Startblock wird das Wurzelelement angegeben. 6.3.2 Datentypen RELAX NG erlaubt das Pattern auf extern definierte Datentypen zu verweisen. Jede RELAX NG Grammatik kann je nach Implementierung verschiedene Datentypen unterstützen. Meistens werden die Datentypen aus dem XML-Schema verwendet. Um die Datentypen nutzen zu können, werden diese am Anfang über einen Namespace deklariert. Zudem können je nach Datentyp, dessen vordefinierte Einschränkungen verwendet werden. Beispiel [Clark u. a. 2003]: datatype xsd = http://www.w3.org/2001/xmlschema-datatypes element number {xsd:integer} element email {xsd:string {minlength= 6 maxlength= 128 }} 6.3.3 Enumerationen Enumerationen können bei Elementen oder Attributen verwendet werden werden. Bei Elementen aber nur, wenn diese nur Text enthalten. In RELAX NG gibt es zwei Datentypen, die bei Enumerationen unterstützt werden. Entweder string oder token:token. Im Gegensatz zu den Tokens wird bei Strings keine Whitespace-Normalisierung durchgeführt. Defaultmäßig (ohne explizite Angabe) wird immer der string verwendet. 30
6.3. REGULAR LANGUAGE DESCRIPTION FOR XML - NEW GENERATION(RELAX NG) Beispiel: element Spielkarte { attribute Bild={ Bube Dame Ass Koenig } } 6.3.4 Listen Wie schon bei XML-Schemas, können bei RELAX NG Listen defniert werden. Listen werden mit dem list -Pattern definiert. Die Elemente in einer Liste werden durch Leerzeichen getrennt. In Listen werden die Datentypen notiert. Beispiel: element Vektor { list {(xsd:double xsd:date)+ } } Diese Liste kann beliebige viele Elemente enthalten, es muss aber mindestens eins der beiden Elemente vorkommen. Der Datentyp kann entweder Double oder Date sein. 6.3.5 Vorteile und Einschränkungen RELAX NG bietet einige Vorteile: Deklaration in XML-Syntax und in kompakter Schreibweise. Kann Zusammenhänge zwischen Attributen und Elementen definieren. RELAX NG Schemas können in XML-Schemas und in DTD konvertiert werden, jedoch nicht umgekehrt. Unterstützt nicht sortierten Inhalt. Unterstützt kontext-senitive Inhaltsmodelle. Unterstützt Namespaces Neben den Vorteilen, die RELAX NG bietet, gibt es auch einige Einschränkungen: Keine Defaultwerte für Attribute. Entitäten können nicht spezifiziert werden. Notationen sind nicht möglich. Gibt nicht an, ob Leerzeichen signifikant sind. Keine ID/IDREF Validierung 31
Literaturverzeichnis [etu 2010] Learing XML - Basic Concepts. Website, 2010. URL: http://etutorials.org/pragramming/learning+xml/chapter+4. +Quality+Control+with+Schemas/4.1+Basic+Concepts/ (24.10.2010) [Rel 2010] RELAX NG home page. Website, 2010. URL: http://www.relaxng.org/ (24.10.2010) [xml 2010] XML Schema Tutorial. Website, 2010. URL: http://www.w3schools.com/schema/default.asp (22.10.2010) [Auer 2010] Auer, Jürgen: Xml programmieren - ein Tutorial. Website, 2010. URL: http://www.sql-und-sml.de/xml-lernen/ (22.10.2010) [Baier u. a. 2001] Baier, Toby ; Ebert, Michael ; Geissel, Andreas: XML Schema Teil 0: Einführung. Website, 2001. URL: http://www.edition-w3c.de/tr/2001/rec-xmlschema-0-20010502/#string (22.10.2010) [Berstel u. Boasson 2008] Berstel, Jean ; Boasson, Luc: Formal Properties of XML Grammars and Languages. (2008), Februar. URL: http://arxiv.org/ps_cache/cs/pdf(0011/0011011v1.pdf (22.10.2010) [Bray u. a. 2008] Bray, Tim ; Paoli, Jean ; Sperberg-McQueen, C.M.: Extensible Markup Language (XML) 1.0 (Fifth Edition). Website, November 2008. URL: http://www.w3.org/tr/rec-xml/ (22.10.2010) [Clark 2002] Clark, James: RELAX NG Compact Syntax. Website, November 2002. URL: http://relaxng.org/compact-20022121.html (24.10.2010) [Clark u. a. 2003] Clark, James ; Makoto, Murata ; Cowan, John: RELAX NG Compact Syntax Tutorial. Website, März 2003. URL: http://relaxng.org/compact-tutorial-20030326.html (24.10.2010) [Fries 2008] Fries, Norbert: Chomsky Grammatik. Website, Februar 2008. URL: http://www2.huberlin.de/linguistik/institut/syntax/onlinelexikon/c/chomsky_grammatik.htm (22.10.2010) [Görz u. Schneeberger ] Görz, G. ; Schneeberger, J.: XML Schema-Sprachen / Lehrstuhl Informatik 8 (KI), Uni Erlangen. Forschungsbericht. URL: http://www8.informatik.uni-erlangen.de/immd8/lectures/digidok/04-schema- 2.pdf (22.10.2010) 32
Literaturverzeichnis [Heymann 2003] Heymann, Stefan: DTD - Document Type Definition. Website, 2003. URL: http://www.stefanheymann.de/xml/dtdxml.htm#externedtds (22.10.2010) [Koch 2008] Koch, L.: The Apache XML Project. Website, September 2008. URL: http://isys53.informatik.htw-dresden.de/internet/xml/xml/syntax.html#misc (22.10.2010) [Microsoft 2010] Microsoft: Xml Glossary. Website, 2010. URL: http://msdn.microsoft.com/en-us/library/ms256452.aspx (22.10.2010) [Schöning 2003] Schöning, Uwe: Theoretische Informatik - kurzgefasst. 2. Auflage. Heidelberg, Berlin : Spektrum Akademischer Verlag GmbH, 2003. ISBN 3 8274 1099 1 [Shermin 1999] Shermin, Voshmgir: XML - Tutorial. Website, 1999. URL: http://www.javacommerce.com/diplaypage.jsp?name=into.sql&id=18238 (22.10.2010) [Vlist 2003] Vlist, Eric van d.: XML Schema. 1. Auflage. Köln : O Reilly Verlag GmbH & Co. KG, 2003. ISBN 3 89721 345 1 [Wittenbrink u. Bergmann ] Wittenbrink, Heinz ; Bergmann, Olaf: XML - Grundlagen. Website,. URL: http://www.teialehrbuch.de/kostenlose-kurse/xml/ (22.10.2010) 33
Abbildungsverzeichnis 2.1 Hierarchie der Chomsky Grammatiken.................... 5 6.1 Typenhierarchie von XML-Schema [Vlist 2003]................ 21 34