element> Mit

Werbung
XML mit
Java OpenSource
(c) Mark Egloff 2003
Validierung
<< Validierung von
XML Dokumenten >>
1
XML mit
Java OpenSource
(c) Mark Egloff 2003
Validierung
Übersicht / Lernziele:
2
z
Was ist und warum Validierung ?
z
Prinzip der Validierung
z
Validierung & JAXP
z
Einführung in DTD
z
Einführung in XML Schema
XML mit
Java OpenSource
(c) Mark Egloff 2003
Validierung
Was ist Validierung ?
Unter Validierung wird der Prozess der
Überprüfung der Gültigkeit eines XML
Dokumentes verstanden.
Ein XML Dokument ist dann gültig, wenn es
„well formed“ und der jeweiligen Grammatik
entspricht.
• „well formed“: Betrifft nur den Syntax, wird
durch den Parser immer erledigt.
• Grammatik: Bezieht sich nur auf den Aufbau.
Wird nur auf Anfrage vom Parser vorgenommen.
„well formed“ XML Daten müssen nicht
unbedingt gültig sein!
3
XML mit
Java OpenSource
(c) Mark Egloff 2003
Validierung
Warum Validierung ?
Die Syntax von XML alleine garantiert noch
nicht, dass das jeweilige Dokument von der
Applikation verwendet werden kann.
XML ist eine flexible Datenstruktur, sie kann
schnell ändern. Beim Datenaustausch muss
somit sichergestellt werden, dass beide
Seiten die gleiche Struktur und Regeln
verwenden.
• Struktur: z.B. Reihenfolge der Elemente
• Regeln: z.B. Mögliche Werte für Attribute
4
Die Struktur und Regeln werden mittels
einer Grammatiksprache verfasst.
XML mit
Java OpenSource
(c) Mark Egloff 2003
Validierung
Übersicht Grammatiksprachen für XML:
DTD: Document Type Definition. W3C Standard ,Mit
SGML beschrieben, kompakt, beschränkte Typen, zu
ungenau, veraltet.
XML Schema: Nachfolger von DTD. W3C Standard In
XML geschrieben. Beliebige Typen,Vererbung,Erweiterbar
XDR: XML Data Reduced. Microsoft. Beschreibt mittels
DCD (Document Content Description, v. Microsoft & IBM).
SOX: Schema Object Oriented. Veo-Systems
Weiterentwicklung von DTD, objektorientiert
5
Schematron: Rick Jelliffe, arbeitet mit internem Parser und
unterstützt patterns. Unglaublich Mächtig !
XML mit
Java OpenSource
(c) Mark Egloff 2003
Validierung
Wie wird validiert ?
1. Die Grammatik wird mittels einer DTD
(Doctype Definition) oder XSD (XML
Schema Definition) festgelegt.
2. Diese Grammatik wird entweder extern oder
intern mit dem XML Dokument verknüpft.
3. Ein eigener Error Handler wird
implementiert (Optional)
4. Parser instanzieren und konfigurieren
5. Parser überprüft auf
a. „well formed“
b. Grammatik
6
XML mit
Java OpenSource
(c) Mark Egloff 2003
Validierung - JAXP
Handhabung der Validierung bei JAXP:
Validierung ist als default deaktiviert. Falls
DTD oder XSD zum Einsatz kommen, muss
zuerst die Factory konfiguriert werden.
Die Aktivierung folg durch setzen eines Flags in
der jeweiligen Factory (SAX / DOM):
setValidating(true)
Sobald die Validierung aktiviert wurde erwarten
die Parser auch jeweils eine DTD oder XSD,
wenn diese nicht vorhanden ist wird der
Vorgang abgebrochen
7
XML mit
Java OpenSource
(c) Mark Egloff 2003
Validierung - JAXP
Aktivierung der DTD Validierung bei SAX
File f = new File("book.xml");
// factory erzeugen
SAXParserFactory saxFactory = SAXParserFactory.newInstance();
// factory konfigurieren, XSD hat Namespace
saxFactory.setNamespaceAware( true ); // nur falls Namespace
saxFactory.setValidating( true );
// parser erzeugen und original SAX reader holen
SAXParser saxParser = saxFactory.newSAXParser();
// parsen und validieren
saxParser.parse(f, new DefaultHandler());
8
XML mit
Java OpenSource
(c) Mark Egloff 2003
Validierung - JAXP
Aktivierung der DTD Validierung bei DOM
File f = new File("book.xml");
// Erzeugung der Factory
DocumentBuilderFactory dbf =
DocumentBuilderFactory.newInstance();
// Factory konfigurieren
dbf.setNamespaceAware( true ); // nur falls Namespace
dbf.setValidating( true );
// Parser erzeugen
DocumentBuilder db = dbf.newDocumentBuilder();
// parsen und validieren
Document doc = db.parse(f);
9
XML mit
Java OpenSource
(c) Mark Egloff 2003
Validierung
Unterstützung von XML Schema:
Die heutigen Parser Implementationen
unterstützen standardmässig nur DTD.
XML Schema muss bei manchen speziell
aktiviert werden. Dies kann über die so
genannten Features, Properties und Attributes
erreicht werden
Bei Xerces wird diem mittels dem Feature
„http://apache.org/xml/features/valida
tion/schema“ erreicht.
z.B. setzen eines Features bei JAXP
10
saxFactory.setFeature("http://apache.org/xml/features
/validation/schema", true );
XML mit
Java OpenSource
(c) Mark Egloff 2003
Validierung - XSD mit Xerces
Aktivierung der XSD Validierung bei SAX
File f = new File("book.xml");
// factory erzeugen
SAXParserFactory saxFactory = SAXParserFactory.newInstance();
// factory konfigurieren, XSD hat Namespace
saxFactory.setNamespaceAware( true );
saxFactory.setValidating( true );
// bei Xerces 2.6.2 muss die XML Schema Unterstützung speziell
// aktiviert werden
saxFactory.setFeature("http://apache.org/xml/features/validati
on/schema", true );
// parser erzeugen und original SAX reader holen
SAXParser saxParser = saxFactory.newSAXParser();
XMLReader xmlReader = saxParser.getXMLReader();
11
// parsen und validieren
xmlReader.parse(f.getAbsolutePath());
XML mit
Java OpenSource
(c) Mark Egloff 2003
Validierung - XSD mit Xerces
Aktivierung der XSD Validierung bei DOM
File f = new File("book.xml");
// Erzeugung der Factory
DocumentBuilderFactory dbf =
DocumentBuilderFactory.newInstance();
// Factory konfigurieren
dbf.setNamespaceAware( true );
dbf.setValidating( true );
// bei Xerces 2.6.2 muss die XML Schema Unterstützung speziell
// aktiviert werden
dbf.setAttribute("http://apache.org/xml/features/validation/sc
hema", Boolean.TRUE);
// Parser erzeugen
DocumentBuilder db = dbf.newDocumentBuilder();
// parsen und validieren
Document doc = db.parse(f);
12
XML mit
Java OpenSource
(c) Mark Egloff 2003
DTD
<< Einführung in DTD >>
1
XML mit
Java OpenSource
(c) Mark Egloff 2003
DTD
Was ist eine DTD ?
DTD = Document Type Definition
Eine DTD erlaubt auf einfache Weise die
Grammatik von XML Dokumenten festzulegen.
Sie wird im SGML Syntax beschrieben.
Was in der DTD nicht festgelegt wird, wird bei
der Validierung als Fehler angenommen.
2
XML mit
Java OpenSource
(c) Mark Egloff 2003
DTD
Einsatzbereiche einer DTD ?
SGML / XML Dokument Validierung
Dokumentgliederung: Festlegung der Struktur
von SGML Dokumenten
Definition Vorgabewerte für Attribute
Entities: Definition von Konstanten welche mit
Text Replacement eingebunden werden können.
Einbindung von binären Daten in SGML
Dokumenten.
3
XML mit
Java OpenSource
(c) Mark Egloff 2003
DTD
Was ist eine DTD ?
Eine DTD legt folgende Dinge fest :
• Mögliche Elemente, deren Typen sowie
Reihenfolge
• Typen und Werte von Attributen
• Definitionen von Entities
• Beziehungen zu Elementen, Entites u. Notationen
Eine DTD besitzt folgende Elemente:
4
• <!DOCTYPE> : Definition einer DTD
•<!ELEMENT> : Elemente
• <!ATTLIST> : Attribut Listen
• <!ENTITY> : Entities
• <!NOTATION>: Notationen
• <!-- -->
: Kommentare
XML mit
Java OpenSource
(c) Mark Egloff 2003
DTD
<!DOCTYPE>
5
XML mit
Java OpenSource
(c) Mark Egloff 2003
DTD - <!DOCTYPE>
DTD – Doctype Element:
Mittels <!DOCTYPE rootName … > leiten wir
eine Doctype Definition ein. Dabei muss das
Root Element angegeben werden.
Das Doctype Element muss am Anfang der
XML Datei stehen, direkt nach der XML
Deklaration.
6
Die DTD kann extern oder direkt im selben
Dokument definiert werden.
• Interne DTD‘s werden im Doctype Element
nach dem Root Namen beschrieben mit „[ ]“
• Externe DTD‘s verweisen mittels PUBLIC
oder SYSTEM Keyword auf eine URI.
XML mit
Java OpenSource
(c) Mark Egloff 2003
DTD - <!DOCTYPE>
Beispiel einer internen DTD:
<?xml version="1.0"?>
<!DOCTYPE note [
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to
(#PCDATA)>
<!ELEMENT from
(#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body
(#PCDATA)>
<!ATTLIST note priority CDATA "0">
]>
<note priority="3">
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend</body>
</note>
7
XML mit
Java OpenSource
(c) Mark Egloff 2003
DTD - <!DOCTYPE>
Beispiel einer externen DTD:
Datei: note.xml
<?xml version="1.0"?>
<!DOCTYPE note SYSTEM "note.dtd">
<note priority="3">
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this
weekend</body>
</note>
8
Datei: note.dtd
<!ELEMENT note (to,from,
heading,body)>
<!ELEMENT to
(#PCDATA)>
<!ELEMENT from
(#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body
(#PCDATA)>
<!ATTLIST note priority
CDATA "0">
XML mit
Java OpenSource
(c) Mark Egloff 2003
DTD
<!ENTITY>
9
XML mit
Java OpenSource
(c) Mark Egloff 2003
DTD - <!ENTITY>
Was sind Entities ?
Entities sind Platzhalter, um Wiederverwendungen zu realisieren oder um Daten mit
nicht parsbaren z.B. binären Inhalt einzubinden.
Entities werden in einer XML Datei mit Ihrem
Kürzel integriert. Bei der späteren Parser
Verarbeitung wird das Kürzel durch den Inhalt
ersetzt (Î Replacement).
Bei der Ersetzung muss das Ergebnis
wiederum ein gültiges XML Dokument sein.
10
XML mit
Java OpenSource
(c) Mark Egloff 2003
DTD - <!ENTITY>
Definieren von Entities:
Die Deklarierung erfolgt mit dem
<!ENTITY> Element.
Arten von Entities:
• Internal Entities (Inhalt im Dokument definiert)
• External Entities (Inhalt als externes Dokument)
• Parameter Entities (Macros, Gruppierungen)
• Nicht geparste Entities (NDATA,binäre Daten)
Syntax zur Definition von Entities:
<!ENTITY [%] Name [SYSTEM|PUBLIC] "Wert" [zusätzl. Angaben] >
Parameter
Entities
11
Externe
Entities
Parameter
Entities N.Gep.
Entities
XML mit
Java OpenSource
(c) Mark Egloff 2003
DTD - <!ENTITY>
Definition von Internen Entities
Interne Entities verweisen auf einen direkt
festgelegten Wert z.B. String wie „Hans“
Syntax:
<!ENTITY name "wert">
Die Deklarierung besteht aus einem Namen (ein
ganzes Wort) und einem Wert, welcher in ““
eingeschlossen wird.
Beispiel einer internen Entity Deklarierung:
<!ENTITY hm "Hans Müller">
12
XML mit
Java OpenSource
(c) Mark Egloff 2003
DTD - <!ENTITY>
Beispiel Verwendung einer internen Entity:
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE inhalt
[
<!ENTITY mfg "Mit freundlichen <a>Grüssen</a>">
]>
<inhalt>
&mfg;
</inhalt>
Entities werden nach der Definierung immer mit
„&xxx;“ angesprochen. Der Name wird in “&“
und “;“ eingeschlossen.
13
XML mit
Java OpenSource
(c) Mark Egloff 2003
DTD - <!ENTITY>
Internen Entities: Character Entities
Character Entities sind dazu da um bestimmte
einzelne Zeichen einen Namen zu geben.
Geeignet um Zeichen zu benennen, die wir
nicht direkt über die Tastatur eingeben können
sondern nur über ihren Unicode.
Schema:
&nnn; (nnn = decimal Unicode)
&xhhh; (hhh = hexadecimal Unicode)
Beispiel:
<!ENTITY sad_smiley "遥">
<!ENTITY happy_smiley "⍪">
14
XML mit
Java OpenSource
(c) Mark Egloff 2003
DTD - <!ENTITY>
Interne Entities: verschachtelte Entities
Entities können wiederum als Wert andere
Entities enthalten.
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE address
[
<!ENTITY f "Hatzelbutz und Partner GmbH" >
<!ENTITY m "[email protected]" >
<!ENTITY fm "&f;, &m;" >
]>
<address>
&fm;
</address>
15
XML mit
Java OpenSource
(c) Mark Egloff 2003
DTD - <!ENTITY>
Interne Entities: Regeln bei verschachtelten Entities
Entities dürfen sich selber nicht gegenseitig
referenzieren !
Beispiel sich selbst referenzierenden Entities:
<!ENTITY selfRef "Dancing with my &selfRef;">
<!ENTITY hinRef
"Referenziere auf &ruckRef;">
<!ENTITY ruckRef "Noch eine Referenzierung &hinRef;">
16
XML mit
Java OpenSource
(c) Mark Egloff 2003
DTD - <!ENTITY>
Externe Entities
Externe Entities verweisen auf externe
Dokumente (irgendwelcher Inhalt ).
Bei externen Entities wird das Kürzel vom Parser
durch den Inhalt der externen Datei ersetzt.
Standardmässig wird der Inhalt ebenfalls vom
Parser ausgewertet.
Externe Entities benutzen nach dem Namen das
Schlüsselwort:
• SYSTEM Î eigene URL (File Pfade od. www Adr.)
• PUBLIC Î URN‘s
Beispiel einer externen Entity Deklarierung:
<!ENTITY hm SYSTEM "hm.xml">
17
XML mit
Java OpenSource
(c) Mark Egloff 2003
DTD - <!ENTITY>
Beispiel Verwendung einer externen Entity:
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE inhalt
[
<!ENTITY news SYSTEM "news.xml">
]>
<inhalt>
&news;
</inhalt>
Das Kürzel „news“ wird durch den Inhalt
der Datei „news.xml“ ersetzt.
18
XML mit
Java OpenSource
(c) Mark Egloff 2003
DTD - <!ENTITY>
Externe Entities: Nicht zu parsenden Inhalt, NDATA
Externe Entities können auch auf Daten mit
binären Inhalt verweisen z.B. Bild Dateien
Damit der Parser den Inhalt nicht auswertet, muss
dieser als nicht „parsbaren“ Inhalt festgelegt
werden Î Typ NDATA.
Syntax:
<!ENTITY name SYSTEM "path" NDATA typ-name>
Der „typ-name“ muss hierbei auf eine festgelegte
Notation verweisen.
Beispiel einer externen Entity Deklarierung mit NDATA:
<!ENTITY foto SYSTEM "diana.gif" NDATA GIF>
19
XML mit
Java OpenSource
(c) Mark Egloff 2003
DTD - <!ENTITY>
Parameter Entities:
Parameter Entities werden zum Text Replacement
benötigt. Diese können nur innerhalb der gleichen
DTD verwendet werden.
Syntax:
<!ENTITY % name "wert">
Der Syntax ist ähnlich wie internen Entites, jedoch
wird noch ein „%“ vorangestellt.
Beispiel einer Parameter Entity:
<!ENTITY % block "text | bild">
20
XML mit
Java OpenSource
(c) Mark Egloff 2003
DTD - <!ENTITY>
Parameter Entities: Benutzung
<!ENTITY % block "text | bild">
<!ELEMENT buch
(kapitel+)>
<!ELEMENT kapitel
(titel, abschnitt+, (%block;)*>
<!ELEMENT abschnitt (titel, (%block;)*>
<!ELEMENT titel
text>
<!ELEMENT text
(#PCDATA)>
<!ELEMENT bild
EMPTY>
Referenzierungen passieren mit „%name;“ . Diese
werden mit dem Wert der Parameter Entity
ersetzt.
21
XML mit
Java OpenSource
(c) Mark Egloff 2003
DTD
<!NOTATION>
22
XML mit
Java OpenSource
(c) Mark Egloff 2003
DTD - <!NOTATION>
Notationen
Notationen dienen um dem Parser andere
Dateiformate bekannt zu machen.
Diese Dateitypen werden dann vom Parser
zur Bearbeitung an einer anderen
Anwendung gegeben.
Syntax:
<!NOTATION name SYSTEM "anwendung">
„anwendung“ verweist auf die Applikation
die dann jeweils aufgerufen werden soll
z.B.:
23
<!NOTATION jpg SYSTEM "acdcviewer.exe">
<!NOTATION avi SYSTEM "mediaplayer.exe">
XML mit
Java OpenSource
(c) Mark Egloff 2003
DTD
<!ELEMENT>
24
XML mit
Java OpenSource
(c) Mark Egloff 2003
DTD - <!ELEMENT>
DTD – Element:
Mittels <!ELEMENT name (Inhalt)>
definieren wir ein XML Element und dessen
Inhalt.
Inhalte können wie folgt definiert werden:
• EMPTY: kein Inhalt, leeres Element
• #PCDATA: parsed character data, encoded text
• #CDATA: unparsed character data , any text
• ANY: Element kann alles enthalten
• (Liste,…): Liste von Kind Elementen, definiert
Reihenfolge sowie Anzahl der Vorkommnisse
1
z.B.:
25
<!ELEMENT article (title,lead,text)>
<!ELEMENT title (#PCDATA)>
...
XML mit
Java OpenSource
(c) Mark Egloff 2003
DTD - <!ELEMENT>
DTD – Element: Definitionen von Child Elementen
Um eine feste Reihenfolge der Kinder Elemente
festzulegen werden die Einträge mit Komas
getrennt .
Syntax:
z.B.:
<!ELEMENT element-name
( child-element-name, child-element-name, ...)>
<!ELEMENT note (to, from, heading, body)>
Element „to“ muss jeweils das erste Kind
Element von „note“ sein. 2. dann „from“ etc.
26
<note>
<to>Tove</to>
…
</note>
XML mit
Java OpenSource
(c) Mark Egloff 2003
DTD - <!ELEMENT>
DTD – Element: Definitionen von Child Elementen
Zusätzlich können bei den einzelnen Einträge
die Anzahl Vorkommnisse angegeben werden.
Hierbei wird wie folgt ein Zeichen angehängt:
• child-name: nur einmal
• child-name+: „+“ mindestens einmal
• child-name*: „*“ keinmal oder mehr
• child-name?: „?“ maximal nur einmal
z.B.:
27
<!ELEMENT note (to+, from?, subject?, text+)>
...
<note>
<to>Andy</to>
<text>ABC ABC ABC</text>
<text>123 123 123</text>
</note>
XML mit
Java OpenSource
(c) Mark Egloff 2003
DTD - <!ELEMENT>
DTD – Element: „either / or“ Child Elements
Ein „entweder oder“ Auswahl an Kinder
Element wird mit dem Pipe „|“ definiert. Die
Auswahl wird dabei in zusätzliche Klammern
„()“ gepackt.
z.B.:
<!ELEMENT note (to, from, header?, (message | body))>
...
<note>
<to>Andy</to>
<from>Christina</from>
<body>ABC ABC ABC</body>
</note>
28
XML mit
Java OpenSource
(c) Mark Egloff 2003
DTD - <!ELEMENT>
DTD – Element: mixed content, Child Elements
Falls ein Element Text und Kind Elemente
besitzt, muss der Text (#CDATA, #PCDATA)
zuerst angegeben werden.
z.B.:
<!ELEMENT note (to, from, message>
...
<!ELEMENT message (#PCDATA,title?)>
<note>
29
<to>Andy</to>
<from>Christina</from>
<message>
<title>Hallo !</title>
ABC ABC ABC
</message>
</note>
XML mit
Java OpenSource
(c) Mark Egloff 2003
DTD
<!ATTLIST>
30
XML mit
Java OpenSource
(c) Mark Egloff 2003
DTD - <!ATTLIST>
DTD Attribut-Listen:
Attribute eines Elementes werden mit
„<!ATTLIST … >“ definiert. Als erstes wird der
Elementname und dann die einzelnen Attribute
und deren Eigenschaften aufgelistet.
Syntax:
<!ATTLIST element-name
attribute-name1 attribute-type1 default-value1
attribute-name2 attribute-type2 default-value2
...
>
31
XML mit
Java OpenSource
(c) Mark Egloff 2003
DTD - <!ATTLIST>
Beispiele von Attribut-Listen:
<!ATTLIST payment type CDATA "check">
...
<payment type="check" />
<!ATTLIST payment
type CDATA "check"
signed CDATA "false"
amount CDATA #REQUIRED
currency CDATA #REQUIRED>
...
<payment type="check" amount="100.00" currency="CHF" />
32
XML mit
Java OpenSource
(c) Mark Egloff 2003
DTD - <!ATTLIST>
DTD Attribute –Typen:
Folgende Attribut-Typen sind erlaubt:
• CDATA: unparsed Character Data
• (a|b|c): Enumeration von Werten
• ID: eindeutiger Wert (Schlüssel)
• IDREF: Wert einer ID
• IDREFS: Eine Liste von ID‘s
• NMTOKEN: Ein gültiger XML Namen
• NMTOKENS: Liste von gültigen XML Namen
• ENTITY: Wert ist eine definierte Entity
• ENTITIES: Liste von Entities
• NOTATION: Name einer Notation
33
XML mit
Java OpenSource
(c) Mark Egloff 2003
DTD - <!ATTLIST>
DTD Attribut-Typen: CDATA
Mittels CDATA wird normaler Text definiert der alle
Zeichen des aktuellen Encodings enthalten darf.
z.B.:
<!ATTLIST payment type CDATA "check">
<payment type="check" />
DTD Attribut-Typen: (a|b|c) Enumeration von Werten
Mittels Pipes und "()" wird eine Liste von
möglichen Werten festgelegt.
z.B.:
34
<!ATTLIST text align (left|center|right) "left">
<text align="center" />
XML mit
Java OpenSource
(c) Mark Egloff 2003
DTD - <!ATTLIST>
DTD Attribut-Typen: ID, IDREF, IDREFS
ID legt eine eindeutiger Wert fest, kein anderes als
ID definiertes Attribut darf diesen Wert annehmen.
Mittels IDREF und IDREFS können dann somit
Relationen auf die ID's festgelegt werden.
z.B:
<!ATTLIST person persnr ID #REQUIRED>
<!ATTLIST kunde id IDREF #REQUIRED>
<!ATTLIST team mitglieder IDREFS #REQUIRED>
<person persnr="103" />
<person persnr="104" />
<kunde id="103"/>
<kunde id="104"/>
35
<team mitglieder="103 104"/>
XML mit
Java OpenSource
(c) Mark Egloff 2003
DTD - <!ATTLIST>
DTD Attribut-Typen: NMTOKEN, NMTOKENS
NMTOKEN muss ein gültiger XML Namen sein. Es
sind Alphanumerische Zeichen (a-z, A-Z, 0-9)
sowie folgende Zeichen ('.', '_', '-', ':') erlaubt.
Leerzeichen sind nicht erlaubt.
NMTOKENS ist eine Liste von NMTOKEN welche
durch Leerzeichen (white spaces) getrennt sind.
z.B.:
<!ATTLIST
<!ATTLIST
product code NMTOKEN #REQUIRED>
products codes NMTOKENS #REQUIRED>
<product code="p12" />
<products codes="p12 a32 c45" />
36
XML mit
Java OpenSource
(c) Mark Egloff 2003
DTD - <!ATTLIST>
DTD Attribut-Typen: ENTITY, ENTITIES
Entities sind Platzhalter, um Wiederverwendungen
zu realisieren oder um Daten mit nicht parsbaren
z.B. binären Inhalt einzubinden
Attribute mit dem Typ ENTITY müssen als Wert
auf eine zuvor definierte Entity verweisen.
z.B:
<!ATTLIST endbericht diagramm ENTITY #REQUIRED>
<!ENTITY verkaufs_chart SYSTEM "1005672.jpg" NDATA
JPEG>
<endbericht diagramm="verkaufs_chart" />
37
XML mit
Java OpenSource
(c) Mark Egloff 2003
DTD - <!ATTLIST>
DTD Attribut-Typen: ENTITY, ENTITIES
z.B:
<!ELEMENT unfallbericht (#PCDATA)>
<!ATTLIST unfallbericht photos ENTITIES #IMPLIED>
<!ENTITY
<!ENTITY
<!ENTITY
<!ENTITY
ort SYSTEM "aabach13g.gif" NDATA GIF>
pkw1 SYSTEM "auto145.gif" NDATA GIF>
pkw2 SYSTEM "auto157.gif" NDATA GIF>
person SYSTEM "hansmuel.jpg" NDATA JPEG>
<unfallbericht photos="ort pkw1 pkw2 person">
UnfallBericht vom ...
</unfallbericht>
38
XML mit
Java OpenSource
(c) Mark Egloff 2003
DTD - <!ATTLIST>
DTD Attribut-Typen: NOTATION
Notationen dienen um dem Parser Dateiformate
bekannt zu machen, die er mit einer anderer
Anwendung verarbeiten soll. Trifft der Parser auf
so eine Anweisung, veranlasst es Ihn diese dann
zu starten.
Attribute vom Typ NOTATION müssen auf einen
zuvor definierte Notation verweisen.
z.B.:
<!NOTATION jpg SYSTEM "acdcviewer.exe">
<!NOTATION avi SYSTEM "mediaplayer.exe">
<!ELEMENT media (#PCDATA)>
<!ATTLIST media type NOTATION (jpg|avi) "jpg">
39
<media type="avi">425525.avi</media>
XML mit
Java OpenSource
(c) Mark Egloff 2003
DTD
<< DTD Beispiel >>
40
XML mit
Java OpenSource
(c) Mark Egloff 2003
DTD
Beispiel DTD Newspaper:
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
newspaper (article+)>
article (headline,byline,lead,body,notes)>
headline (#PCDATA)>
byline (#PCDATA)>
lead (#PCDATA)>
body (#PCDATA)>
notes (#PCDATA)>
<!ATTLIST
<!ATTLIST
<!ATTLIST
<!ATTLIST
article
article
article
article
author CDATA #REQUIRED>
editor CDATA #IMPLIED>
date CDATA #REQUIRED>
edition CDATA #IMPLIED>
<!ENTITY newspaper "Vervet Logic Times">
<!ENTITY publisher "Vervet Logic Press">
<!ENTITY copyright "Copyright 1998 Vervet Logic Press">
41
XML mit
Java OpenSource
(c) Mark Egloff 2003
DTD
Beispiel XML Newspaper:
<? xml version="1.0" ?>
<!DOCTYPE newspaper SYSTEM "news.dtd" >
<newspaper>
???
</newspaper>
42
XML mit
Java OpenSource
(c) Mark Egloff 2003
XSD
<< Einführung in XSD >>
1
XML mit
Java OpenSource
(c) Mark Egloff 2003
XSD
Übersicht / Lernziele:
2
z
Was ist ein Schema ?
z
Übersicht Einsatzbereiche
z
Unterschiede XSD zu DTD
z
XSD Syntax
z
Anwendung von XSD
z
Eigene einfache XSD schreiben können
XML mit
Java OpenSource
(c) Mark Egloff 2003
XSD
Was ist XSD ?
XSD = XML Schema Definition
Ein XSD legt die Grammatik einer XML Datei
fest.
XSD ist eine alternative zu DTD. Jedoch kann
vieles hinsichtlich Grammatik und Datentypen
noch viel genauer beschrieben werden.
Was in der XSD nicht festgelegt wird, wird bei
der Validierung als Fehler angenommen.
3
XML mit
Java OpenSource
(c) Mark Egloff 2003
XSD
Unterschiede XSD vs. DTD:
XSD wird in XML verfasst. Die DTD wird
mittels SGML Syntax beschrieben.
Eine DTD ist Dokumenten orientiert. XSD ist
Daten Typen orientiert:
Eine DTD erlaubt die Definition und
Verwendung von Entities. XML Schema
nicht.
XSD unterstützt Namespaces DTD nicht
direkt.
XSD unterstützt Vererbung von Datentypen
DTD nicht.
4
XML mit
Java OpenSource
(c) Mark Egloff 2003
XSD
Einsatzbereiche von XSD:
XML Validierung. Validierung von XML Daten
Datenmodulierung: Mittels XSD lassen sich
beliebige Datentypen beschreiben, auch eigene.
Unterstützt Vererbung.
Objektmodulierung: XSD zusammen mit RDF
(Resource Description Framework) lassen sich
Objekte sowie ihre Relationen u. Klassen
beschreiben..
5
XML mit
Java OpenSource
(c) Mark Egloff 2003
XSD
Einsatzbereiche von XSD:
Code Generierung. z.B. bei JAXB wird XSD zur
Java Code Generierung eingesetzt.
Datenbindung: Mapping und Transformation der
Eingangsdaten auf die Applikationsspezifischen
Formate. z.B. bei JAXB.
6
XML mit
Java OpenSource
(c) Mark Egloff 2003
XSD - Beispiel
Beispiel einer XSD:
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="note">
<xs:complexType>
<xs:sequence>
<xs:element name="to" type="xs:string"/>
<xs:element name="from" type="xs:string"/>
<xs:element name="heading" type="xs:string"/>
<xs:element name="body" type="xs:string"/>
</xs:sequence>
<xs:attribute name=priority" type="xs:integer"/>
</xs:complexType>
</xs:element>
</xs:schema>
7
XML mit
Java OpenSource
(c) Mark Egloff 2003
XSD - Beispiel
Beispiel einer XML Datei mit Verweis auf XSD:
<?xml version="1.0"?>
<note
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="note.xsd">
priority="3">
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend</body>
</note>
8
XML mit
Java OpenSource
(c) Mark Egloff 2003
XSD
<< Aufbau und Verwendung
von XSD Dokumenten >>
9
XML mit
Java OpenSource
(c) Mark Egloff 2003
XSD – Aufbau
Aufbau einer XSD Datei:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" >
Element und Type Definitionen …
</xs:schema>
Eine XSD Datei beginnt mit dem Root Tag
„xsd:schema“ wobei die Namespace Definition
fest vorgegeben ist (W3C):
http://www.w3.org/2001/XMLSchema
Danach folgen verschieden Komponenten, wie
Element und Typ Definitionen
10
XML mit
Java OpenSource
(c) Mark Egloff 2003
XSD – Aufbau
Ein XSD enthält folgenden Komponenten (1/2):
Primäre Komponenten, sind Typen Definitionen
welche einen Namen besitzen:
• Simple Datatypes Definitionen
• Complex Datatypes Definitionen
• Attribut Deklarationem
• Element Deklarationen
Sekundäre Komponenten:
• Attribut Group Deklarationem
• Identity-constraint Deklarationen
• Model Group Definitionen
• Notation Deklarationen
11
XML mit
Java OpenSource
(c) Mark Egloff 2003
XSD – Aufbau
Ein XSD besteht aus folgenden Komponenten (2/2):
Hilfskomponenten, bilden Teile der anderen
Komponenten:
• Annotations
• Model Groups
• Particles
• Wildcards
• Attribute uses
12
XML mit
Java OpenSource
(c) Mark Egloff 2003
XSD – Verwendung
Verweisung auf ein Schema im XML Dokument
Um bei einem XML Dokument auf ein Schema zu
verweisen muss der Schema Instanz Namespace
„xmlns:xsi“ sowie der Pfad angegeben werden
mit „xsi:schemaLocation“ oder
„xsi:noNamespaceSchemaLocation“
Falls mehrere angegeben werden, so werden
diese mit Space getrennt aufgelistet.
z.B.: Verweisung auf zwei XSD Dateien
13
<?xml version="1.0" encoding="ISO-8859-1"?>
<persons xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://www.microsoft.com/p.xsd
http://www.w3schools.com/children.xsd">
...
</persons>
XML mit
Java OpenSource
(c) Mark Egloff 2003
XSD
<< Elemente und Attribute >>
14
XML mit
Java OpenSource
(c) Mark Egloff 2003
XSD – Elemente
<xs:element>: Elemente beschreiben
Mit „<xs:element>“ kann ein Element sowie
dessen Typ festgelegt werden. Hierbei
unterscheidet man zwischen Simple und
Complex–Types.
Simple-Types stehen für primitive Datentypen.
Solche Elemente besitzen nur Daten, keine
weiteren Elemente oder Attribute.
z.B.: Einfaches Root Element festlegen
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="name" type="xs:string"/>
</xs:schema>
Beispiel XML Instanz:
15
<name>Hans Müller</name>
XML mit
Java OpenSource
(c) Mark Egloff 2003
XSD – Elemente
<xs:element>: Elemente beschreiben
Elemente vom Typ Complex-Types können
Attribute, Daten und weitere Elemente
beinhalten
z.B.: Root Element mit mixed Content festlegen
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="letter">
<xs:complexType mixed="true">
<xs:sequence>
<xs:element name="name" type="xs:string"/>
<xs:element name="orderid" type="xs:positiveInteger"/>
<xs:element name="shipdate" type="xs:date"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
16
XML mit
Java OpenSource
(c) Mark Egloff 2003
XSD – Elemente
<xs:element>: Elemente beschreiben
XML Instanz mit mixed Content
<letter xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="letter.xsd">
Dear Mr.<name>John Smith</name>.
Your order <orderid>1032</orderid>
will be shipped on <shipdate>2001-07-13</shipdate>.
</letter>
17
XML mit
Java OpenSource
(c) Mark Egloff 2003
XSD – Element
<xs:element>: Elemente beschreiben
<xs:element> unterstützt folgende Angaben:
• abstract: „true“ / „false“ (default)
• block: „all“ / „extension“/ „restriction“ / „substitution“
• default: Default Wert falls keiner angegeben
• final: „all“ / „extension“/ „restriction“
• fixed: fest vorgebenen Werten
• form: „qualified“ (Namespace) / „unqualified“ (none)
• id: interne id
• ref: Referenz auf andere Attribute id Definition
• name: Name des Elementes
• nillable: „true“ (kein Wert) / „false“ (default)
• minOccurs: minimale Anzahl an Auftritte
• maxOccurs: maximale Anzahl an Auftritte
• type: Typ des Elements (Simple / Complex Type)
• use: „prohibited“ / „optional“ / „required“
18
XML mit
Java OpenSource
(c) Mark Egloff 2003
XSD – Element
<xs:element>: maxOccurs, min Occurs
Mittels „maxOccurs“ und „minOccurs“ kann
festgelegt werden wieviel mal ein Element
auftreten darf (default = 1 mal).
<xs:element name="person">
<xs:complexType>
<xs:sequence>
<xs:element name="fullname" type="xs:string"/>
<xs:element name="childname" type="xs:string"
maxOccurs="10" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
19
XML mit
Java OpenSource
(c) Mark Egloff 2003
XSD – Attribute
<xs:attribute>: Attribute beschreiben
Mit <xs:attribute> wird ein Attribut sowie
dessen Typ festgelegt werden.
Als Typ können nur Simple-Types verwendet
werden.
z.B.: Attribute festlegen
<xs:element name="shoesize" >
<xs:complexType>
<xs:attribute name="country" type="xs:string" />
<xs:attribute name="size" type="xs:integer" />
<xs:complexType>
</xs:element>
z.B.: XML Instanz
20
<shoesize country="FR" size="35"/>
XML mit
Java OpenSource
(c) Mark Egloff 2003
XSD – Attribute
<xs:attribute>: Attribute beschreiben
<xs:attribute> unterstützt folgende Angaben:
• default: Default Wert falls keiner angegeben
• fixed : fest vorgebenen Werten
• form: „qualified“ (Namespace) / „unqualified“ (none)
• id : interne id
• ref: Referenz auf andere Attribute Definition
• name: Name des Attributs
• type : Typ des Attributs (Simple Types)
• use : „prohibited“ / „optional“ / „required“
z.B.: nicht optionales Attribut mit Defaultwert festlegen
<xs:attribute name="name" type="xs:string" default="Hans"
use="required"/>
21
XML mit
Java OpenSource
(c) Mark Egloff 2003
XSD – Attribute
<xs:attribute>: Attribute beschreiben
Mittels <xs:simpleType> können komplexere
Angaben zum Typ und deren Werten angegeben
werden.
z.B.: <xs:simpleType> und Auswahl an festen Werten
<xs:attribute name="value" use="required">
<xs:simpleType>
<xs:restriction base="xs:NMTOKEN">
<xs:enumeration value="preserve"/>
<xs:enumeration value="replace"/>
<xs:enumeration value="collapse"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
22
XML mit
Java OpenSource
(c) Mark Egloff 2003
XSD
<< Data Types >>
23
XML mit
Java OpenSource
(c) Mark Egloff 2003
XSD – Data Types
XSD unterstützt 2 Datentypen:
Simple Datatypes. Sind einfache, grundlegende
Datentypen (auf „Byte“ Ebene).
Î Built in, bereits schon vorhanden
Complex Datatypes: Sind zusammengesetzte
Datentypen, die entweder aus einfachen oder
wiederum aus komplexen aufgebaut sind. (ähnlich
wie Klassen). Hiermit lassen sich auch ganze
Datensequenzen beschreiben.
Î Müssen selber erstellt werden
Î Werden für die jeweilige Anwendung erstellt
24
XML mit
Java OpenSource
(c) Mark Egloff 2003
XSD – Simple Data Types
Übersicht Simple Data Types:
simpleType
25
duration
dateTime
time
boolean
base64binary
date
hexbinary
IDREFS
anyURI
integer
NMTOKENS
ENTITIES
gDay
normalizedString
NCName
ID
double
gMonth
decimal
NMTOKEN
IDREF
float
gYear
string
Name
ENTITY
gYearMonth
gMonth
QName
NOTATION
token
nonPositiveInteger
long
nonNegativeInteger
language
negativeInteger
int
unsignedLong
short
unsignedInt
byte
unsignedShort
unsignedByte
positiveInteger
XML mit
Java OpenSource
(c) Mark Egloff 2003
XSD – Simple Data Types
Beispiel Verwendung von Simple Data Types:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="book">
<xs:complexType>
<xs:all>
<xs:element name="author" type="xs:string"/>
<xs:element name="title" type="xs:string"/>
<xs:element name="born" type="xs:date"/>
<xs:element name="isbn" type="xs:string"/>
</xs:all>
</xs:complexType>
<xs:attribute name="id" type="xs:ID"/>
<xs:attribute name="available" type="xs:boolean"/>
</xs:element>
</xs:schema>
26
Simple Datatypes können direkt verwendet werden,
z.B. bei Element oder Attribut Deklarationen
XML mit
Java OpenSource
(c) Mark Egloff 2003
XSD – Simple Data Types
Beispiel XML Dokument mit Simple Datatypes:
<book xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="book.xsd"
id="b0836217462" available="true">
<author>Charles M Schulz</author>
<born>1922-11-26</born>
<isbn>0836217462</isbn>
<title>Being a Dog is a Full-Time Job</title>
<qualification>
brought classical music to the Peanuts strip
</qualification>
</book>
27
XML mit
Java OpenSource
(c) Mark Egloff 2003
XSD – Complex Datatypes
<xs:complexType>: zusammengesetzte Datentypen
Complex Types unterstützen verschiedene
Möglichkeiten um die Struktur genauer zu
beschreiben.
Im Gegensatz zu Simple Datatypes, Complex
Datatypes müssen zuerst definiert werden. Dies
geschieht mit dem Tag „<xs:complexType>“
<xs:complexType name="personinfo">
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
<xs:attribute name="persNr" type="xs:integer"/>
</xs:complexType>
28
XML mit
Java OpenSource
(c) Mark Egloff 2003
XSD – Complex Datatypes
<xs:complexType>: zusammengesetzte Datentypen
Danach können Elemente dieses Typs definiert
werden.
<xs:element name="employee" type="personinfo"/>
<xs:element name="chairman" type="personinfo"/>
<xs:complexType name="personinfo">
<xs:all>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
</xs:all>
<xs:attribute name="persNr" type="xs:integer"/>
29
</xs:complexType>
XML mit
Java OpenSource
(c) Mark Egloff 2003
XSD – Complex Datatypes
<xs:complexType>: zusammengesetzte Datentypen
Falls nur ein Elementtyp benötigt wird, kann
Typ und Element Definition kombiniert werden.
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="employee">
<xs:complexType>
<xs:all>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
</xs:all>
<xs:attribute name="persNr" type="xs:integer"/>
</xs:complexType>
</xs:element>
30
</xs:schema>
XML mit
Java OpenSource
(c) Mark Egloff 2003
XSD – Complex DataTypes
Beispiel XML Dokument:
<employee persNr="33">
<lastname>Müller</lastname>
<firstname>Hans</firstname>
<lastname>Fridolin</lastname>
</employee>
31
XML mit
Java OpenSource
(c) Mark Egloff 2003
XSD – Complex Datatypes
Um die Strukturen genauer zu beschreiben,
müssen sogenannte „Indicators“ benützt
werden.
Folgende Indicators existieren:
• All
• Choice
• Sequence
• maxOccurs
• minOccurs
• Element Groups
• Attribute Groups
32
XML mit
Java OpenSource
(c) Mark Egloff 2003
XSD – Complex Datatypes
<xs:all> Indicator:
„<xs:all>“ bestimmt, dass alle Elemente in
beliebiger Reihenfolge vorkommen können.
Jedoch müssen Sie genau einmal erscheinen.
z.B.:
<xs:element name="person">
<xs:complexType>
<xs:all>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
</xs:all>
</xs:complexType>
</xs:element>
33
XML mit
Java OpenSource
(c) Mark Egloff 2003
XSD – Complex Datatypes
<xs:choice> Indicator:
„<xs:choice>“ definiert das entweder das eine
oder andere Elemente aufgelistet werden muss.
z.B.:
<xs:element name="person">
<xs:complexType>
<xs:choice>
<xs:element name="employee" type="employee"/>
<xs:element name="member" type="member"/>
</xs:choice>
</xs:complexType>
</xs:element>
34
XML mit
Java OpenSource
(c) Mark Egloff 2003
XSD – Complex Datatypes
<xs:sequence> Indicator:
Um die genaue Reihenfolge festzulegen kann
der Tag „<xs:sequence>“ festgelegt werden.
<xs:complexType name="personinfo">
<xs:sequence>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
<xs:attribute name="persNr" type="xs:integer"/>
</xs:sequence>
</xs:complexType>
35
XML mit
Java OpenSource
(c) Mark Egloff 2003
XSD – Complex Datatypes
Zusammenfassendes Beispiel Schema:
<xs:element name="persons">
<xs:complexType>
<xs:sequence>
<xs:element name="person" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="fullname" type="xs:string"/>
<xs:element name="childname" type="xs:string"
minOccurs="0" maxOccurs="5"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
36
</xs:element>
XML mit
Java OpenSource
(c) Mark Egloff 2003
XSD – Complex Datatypes
Zusammenfassendes Beispiel XML Dokument
<persons xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="family.xsd">
<person>
<fullname>Hege Refsnes</fullname>
<childname>Cecilie</childname>
</person>
<person>
<fullname>Tove Refsnes</fullname>
<childname>Hege</childname>
<childname>Stale</childname>
<childname>Jim</childname>
<childname>Borge</childname>
</person>
</persons>
37
XML mit
Java OpenSource
(c) Mark Egloff 2003
XSD – Complex Datatypes
<xs:group> Indicator: Element Gruppen
Mittels „<xs:group>“ werden Element Gruppen
definiert, die dann bei anderen Typ Definitionen
einfach wiederverwendet werden können.
<xs:group name="persongroup">
<xs:sequence>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
<xs:element name="birthday" type="xs:date"/>
</xs:sequence>
</xs:group>
38
XML mit
Java OpenSource
(c) Mark Egloff 2003
XSD – Complex Datatypes
<xs:group> Indicator: Element Gruppen
Bei der Verwendung wird dann auf die zuvor
festgelegte Element Gruppe verwiesen.
<xs:element name="person" type="personinfo"/>
<xs:complexType name="personinfo">
<xs:sequence>
<xs:group ref="persongroup"/>
<xs:element name="country" type="xs:string"/>
</xs:sequence>
</xs:complexType>
39
XML mit
Java OpenSource
(c) Mark Egloff 2003
XSD – Complex Datatypes
<xs:attributeGroup> Indicator: Attribut Gruppen
Mittels „<xs:attributeGroup>“ werden Gruppen
von Attributen definiert, die dann bei anderen
Typ Definitionen einfach wieder verwendet
werden können.
<xs:attributeGroup name="personattrgroup">
<xs:attribute name="firstname" type="xs:string"/>
<xs:attribute name="lastname" type="xs:string"/>
<xs:attribute name="birthday" type="xs:date"/>
</xs:attributeGroup>
40
XML mit
Java OpenSource
(c) Mark Egloff 2003
XSD – Complex Datatypes
<xs:attributeGroup> Indicator: Attribut Gruppen
Bei der Verwendung wird dann auf die zuvor
festgelegte Attribut Gruppe verwiesen.
<xs:element name="person">
<xs:complexType>
<xs:attributeGroup ref="personattrgroup"/>
</xs:complexType>
</xs:element>
41
XML mit
Java OpenSource
(c) Mark Egloff 2003
XSD
<< Any >>
42
XML mit
Java OpenSource
(c) Mark Egloff 2003
XSD – Any
Das <xs:any> Element
Mit „<xs:any>“ können wir unsere Strukturen um
weitere Elemente erweitern die jetzt aber noch
nicht bekannt sind. Sie dienen als zukünftige
„Platzhalter“ und besitzen keinen Typ.
<xs:element name="person">
<xs:complexType>
<xs:sequence>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
<xs:any minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
43
XML mit
Java OpenSource
(c) Mark Egloff 2003
XSD – Any
z.B. Verwendung von <xs:any> im XML Dokument
Das Beispiel wird hier um ein „children“ Schema
erweitert und kann wegen der zuvor „<xs:any>“
Definition gleich in „person“ eingebettet werden.
<persons xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:SchemaLocation="http://www.microsoft.com family.xsd
http://www.w3schools.com children.xsd">
<person>
<firstname>Hege</firstname>
<lastname>Refsnes</lastname>
<children>
<childname>Cecilie</childname>
</children>
</person>
44
<persons>
XML mit
Java OpenSource
(c) Mark Egloff 2003
XSD – Any
Das <xs:anyAttribute> Element
Mit <xs:anyAttribute> können zukünftige
Attribute schon im voraus festgelegt werden.
Sie dienen als zukünftige „Platzhalter“ und
besitzen keinen Typ.
<xs:element name="person">
<xs:complexType>
<xs:sequence>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
</xs:sequence>
<xs:anyAttribute/>
</xs:complexType>
</xs:element>
45
XML mit
Java OpenSource
(c) Mark Egloff 2003
XSD – Any
z.B.Verwendung von <xs:anyAttribute> im XML Dokument
Das Beispiel wird hier um ein Attribut erweitert
und kann wegen der „xs:anyAttribute“ Definition
gleich in „person“ verwendet werden.
46
<persons xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:SchemaLocation="http://www.microsoft.com family.xsd
http://www.w3schools.com attribute.xsd">
<person gender="female">
<firstname>Hege</firstname>
<lastname>Refsnes</lastname>
</person>
<person gender="male">
<firstname>Stale</firstname>
<lastname>Refsnes</lastname>
</person>
</persons>
XML mit
Java OpenSource
(c) Mark Egloff 2003
XSD
<< Restrictions >>
47
XML mit
Java OpenSource
(c) Mark Egloff 2003
XSD – Restrictions / Facets
<xs:restriction>:
Restriction = Einschränkung, Limitierung
Mittels „<xs:restriction>“ können bestimmte
Einschränkungen für Werte angegeben werden.
Restricitons werden auch oft als Facets
bezeichnet.
Folgende Restrictions sind definiert:
48
• length / minLength / maxLength
• minExclusive / maxExclusive
• minInclusive / maxInclusive
• enumeration
• pattern
• whiteSpace
• fractionDigits / totalDigits
XML mit
Java OpenSource
(c) Mark Egloff 2003
XSD – Restrictions / Facets
<xs:restriction>“: length / minLength / maxLength
Mit „<xs:length>“ , „<xs:minLength>“,
„<xs:maxLength>“ können Grössenangaben für
Stringtypen festgelegt werden.
z.B. minimale und maximale Länge bei einem Passwort
<xs:element name="password">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="5"/>
<xs:maxLength value="8"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
49
XML mit
Java OpenSource
(c) Mark Egloff 2003
XSD – Restrictions / Facets
<xs:restriction>: minInclusive / maxInclusive
minExclusive / maxExclusive
Mit „<xs:minInclusive>“ , „<xs:maxInclusive>“,
„<xs:minExclusive>“ und „<xs:maxExclusive>“
können Wertebereiche für Numeric Typen
festgelegt werden.
z.B. Wertebereich bei Integer
<xs:element name="age">
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:minInclusive value="0"/>
<xs:maxInclusive value="100"/>
</xs:restriction>
</xs:simpleType>
50
</xs:element>
XML mit
Java OpenSource
(c) Mark Egloff 2003
XSD – Restrictions / Facets
<xs:restriction>: enumeration
Mit „<xs:enumeration>“ wird eine Auswahl an
vordefinierten Werten festgelegt.
z.B. Auswahl an Auto-Marken
<xs:element name="car">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="Audi"/>
<xs:enumeration value="Golf"/>
<xs:enumeration value="BMW"/>
</xs:restriction>
</xs:simpleType>
51
</xs:element>
XML mit
Java OpenSource
(c) Mark Egloff 2003
XSD – Restrictions / Facets
<xs:restriction>: pattern
Mit „<xs:pattern>“ werden die möglichen Werte
durch einen regulärer Ausdruck (regExp)
bestimmt.
z.B. 5 stellige ProdukteNummer aus Zahlen
<xs:element name="prodid">
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:pattern value="[0-9][0-9][0-9][0-9][0-9]"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
52
XML mit
Java OpenSource
(c) Mark Egloff 2003
XSD – Restrictions / Facets
<xs:restriction>: pattern
z.B. Auswahl an Werten, Geschlecht
<xs:element name="gender"><xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="male|female"/>
</xs:restriction>
</xs:simpleType></xs:element>
z.B. Nur Alpha Zeichen
<xs:element name="letter"><xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="([a-z][A-Z])+"/>
</xs:restriction>
</xs:simpleType></xs:element>
53
XML mit
Java OpenSource
(c) Mark Egloff 2003
XSD
<< Vererbung >>
54
XML mit
Java OpenSource
(c) Mark Egloff 2003
XSD – Vererbung
<xs:extension>: Erweiterung von Datentypen
Mit „<xs:extension>“ kann von anderen
Datentypen vererbt werden. Es können somit
Simple oder Complex Types erweitert werden.
„<xs:extension>“ muss immer zusammen mit
„<xs:simpleContent>“ oder
„<xs:complexContent>“ verwendet werden.
<xs:complexType name="typeName">
<xs:complexContent>
<xs:extension base="baseType">… </xs:extension>
</xs:complexContent>
55
</xs:complexType>
XML mit
Java OpenSource
(c) Mark Egloff 2003
XSD – Vererbung
<xs:extension>: Erweiterung von Datentypen
z.B. Erweiterung eines Complexen Types
<xs:complexType name="fullpersoninfo">
<xs:complexContent>
<xs:extension base="personinfo">
<xs:sequence>
<xs:element name="address" type="xs:string"/>
<xs:element name="city" type="xs:string"/>
<xs:element name="country" type="xs:string"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
56
</xs:complexType>
XML mit
Java OpenSource
(c) Mark Egloff 2003
XSD – simple Content
<xs:extension>: Erweiterung von Datentypen
z.B. Definition Schuhgrösse fürs jeweilige Land
<xs:element name="shoesize">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:integer">
<xs:attribute name="country" type="xs:string" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
XML instanz
<shoesize country="france">35</shoesize>
57
XML mit
Java OpenSource
(c) Mark Egloff 2003
XSD
<< Annotations >>
58
XML mit
Java OpenSource
(c) Mark Egloff 2003
XSD – Annotations
Zusätzliche Beschreibungen in XSD:
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" >
<xsd:annotation>
<xsd:documentation> This is a sample XML
Schema for Chapter 1 of XML Schema Essentials.
</xsd:documentation>
</xsd:annotation>
</xsd:schema>
59
Mittels „<xsd:annotation>“ können
Beschreibungen eingegliedert werden, ähnlich
wie Kommentare jedoch können diese gezielter
verarbeitet werden.
XML mit
Java OpenSource
(c) Mark Egloff 2003
XSD - Links
60
z
W3C XSD: http://www.w3.org/XML/Schema
z
SUN Webservice Tutorial:
http://java.sun.com/xml/jaxp/dist/1.1/docs/tutorial/dom/index.html
z
IBM Webservice Tutorial:
http://java.sun.com/webservices/docs/1.0/tutorial/doc/JAXPSAX13.
html
z
Xerces: http://xml.apache.org/xerces2-j/index.html
Herunterladen