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 "&#x9065;"> <!ENTITY happy_smiley "&#x236A;"> 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