Hochschule Harz FB Automatisierung und Informatik Versuch: XML Thema: Grundkenntnisse in XML mit DTD s und Schemata Versuchsziele XML-Dateien für eine vorgegebene DTD-Datei erstellen können. XML-Dateien für eine vorgegebene Schemata-Datei erstellen und ändern können. 1. Aufgabe Erstellen einer XML-Datei für eine vorhandene DTD-Datei: Im diesem Teil soll eine XML-Datei erstellt werden, die genau einer vorgegebenen DTD-Datei entspricht. Abgebildet werden soll eine Bibliothek mit folgenden Eigenschaften: Das Wurzelelement ist eine Bibliothek. Diese kann mehrere Bücher enthalten. Ein Buch ist durch mehrere Elemente beschrieben (siehe Labor4a.dtd). Einige der Elemente können mehrfach vorkommen (buch, autor, lagerplatz). Ein Element des Buches hat vier weitere Elemente. Beispielcode der DTD-Datei: labor4a.dtd: <!ELEMENT bibliothek (buch)+> <!ELEMENT buch (titel, (autor)+, inhalt, (lagerplatz)*)> <!ELEMENT titel (#PCDATA)> <!ELEMENT autor (#PCDATA)> <!ELEMENT inhalt (#PCDATA)> <!ELEMENT lagerplatz (ort, nummer)> <!ELEMENT ort (#PCDATA)> <!ELEMENT nummer (#PCDATA)> Ihre Aufgabe: Fügen Sie die unten aufgelisteten Bücher in die XML-Datei ein, so dass die Daten vollständig in der Datei sind, diese aber trotzdem validiert werden kann. 1. Buch Bezeichnung Inhalt titel Visual C++ 6 autor Richard Leinecker Tom Archner inhalt Das Standardwerk zur professionellen Programmierung lagerplatz WR, EIC 460 0417-01 WR, EIC 460 0417-02 2. Buch Bezeichnung Inhalt titel Einführung in die Informatik autor Gumm, H.P. Sommer, M.: inhalt Binärsysteme, BCD, Resim, HTML, XML lagerplatz HBS, EIE 420 0117-01 1
3. Buch Bezeichnung titel autor inhalt lagerplatz WR, DED 200 0446 WR, DED 200 0455 WR, DED 200 0458 Inhalt Ajax Stefanie Mintert Christoph Leisegang Weberstellung mit Asynchron XML und Javascript 4. Buch Bezeichnung Inhalt titel Per Anhalter durch die Galaxis autor Douglas Adams inhalt Alle Romane in einem Band, sehr viel Text zum Lesen lagerplatz HBS, SFI 125 1245 WR, SFI 111 1246 5. Buch Bezeichnung Inhalt titel Grundkurs Web-Programmierung autor Beate Porska inhalt HTML, CSS, Datenbanken, PHP, mysql, Java Server Pages lagerplatz WR, DED 100 0394 HBS, EDV 007 0343 HBS, EDV 007 0344 Vorgehensweise: Laden Sie die Zip-Datei mit den Quellcodes auf Ihrem Rechner. Am besten in dem Ordner d:\daten\xml Laden Sie die Zip-Datei mit dem Programm editix-free-2010-raw.zip auf Ihrem Rechner. Entpacken Sie das Programm. Starten Sie das Programm, indem Sie im Ordner bin die Batch-Datei run.bat doppelklicken. Laden der beiden Dateien Labor4a.xml und Labor4a.dtd. Öffnen des Registers Labor4a.xml Testen auf Validate mit der Tastenkombination Strg+K Fügen Sie die Bücher in die XML-Datei ein. 2
Definitionen in einer DTD-Datei Elements Tags Attributes PCDATA CDATA // Person, Buch // <person>. </person> // <person geschlecht= "m"> // Parsed Character Data // Character Data, einfacher Text PCDATA = Parsed Character Data o Der enthaltene Text muss bestimmten Kriterien entsprechen o Die Zeichen < und & dürfen nicht im Text sein CDATA = Character Data o Dieser Abschnitt kann beliebigen Text enthalten o Auch {, <, & Beispiel: <?xml version="1.0"?> <!DOCTYPE note [ <!ELEMENT note (to,from,heading,body)> <!ELEMENT to (#PCDATA)> <!ELEMENT from (#PCDATA)> <!ELEMENT heading (#PCDATA)> <!ELEMENT body (#PCDATA)> ]> <note> <to>andreas</to> <from>beate</from> <heading>erinnerung</heading> <body>vergiss nicht fuer die Klausur GDI zu lernen!</body> </note> 3
2. Aufgabe Die mitgelieferten Dateien Labor4b.xml und Labor4b.xsd beschreiben die Struktur eines Bestellsystems in einer Datenbank. Der aktuelle Stand ist eher auf DTD-Niveau. Es bestehen keinerlei Prüfungen bezüglich der Anzahl und der Wertebereiche. Ändern Sie beide Dateien so, dass die unteren Restriktionen eingehalten werden. Restriktionen: Die Datenbank kann mehrere Bestellungen haben. Das Element artikelnr muss mindestens drei und darf maximal 20 Zeichen haben. Eventuelle Fehler müssen natürlich korrigiert werden. Die Anzahl sollte positiv, also größer Null sein. Eventuelle Fehler müssen auch hier korrigiert werden. Das Element status soll als Aufzählung realisiert werden. Folgende Zeichenketten sind möglich: (Eventuelle Fehler müssen auch hier korrigiert werden) o ordered o sended o cash Datei: Labor4b.xml <?xml version="1.0" encoding="utf-8"?> <datenbank xsi:nonamespaceschemalocation="labor4b.xsd" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance"> <bestellung> <artikelnr>cpu-i7-12</artikelnr> <anzahl>2</anzahl> <bez>intel i7 260QM, 2.6 GHz</bez> <status>ordered</status> </bestellung> <bestellung> <artikelnr>monitor-17 Montagsproduktion</artikelnr> <anzahl>0</anzahl> <bez>asus 1276</bez> <status>cash</status> </bestellung> <bestellung> <artikelnr>maus-ms-12</artikelnr> <anzahl>10</anzahl> <bez>microsoft Mouse TR-1234</bez> <status>ordered fast</status> </bestellung> <bestellung> <artikelnr>tablet-asus-10.1</artikelnr> <anzahl>2</anzahl> <bez>tablet ASUS 10.1 white, 32 GByte</bez> <status> sended </status> </bestellung> </datenbank> 4
Datei: Labor4b.xsd <xsd:schema xmlns:xsd="http://www.w3.org/2001/xmlschema"> <xsd:element name="datenbank" type="datenbanktyp"/> <xsd:complextype name="datenbanktyp"> <xsd:sequence> <xsd:element name="bestellung" type="bestellungtyp" /> </xsd:sequence> </xsd:complextype> <xsd:complextype name="bestellungtyp"> <xsd:sequence> <xsd:element name="artikelnr" type="xsd:string" /> <xsd:element name="anzahl" type="xsd:integer" /> <xsd:element name="bez" type="xsd:string" /> <xsd:element name="status" type="xsd:string" /> </xsd:sequence> </xsd:complextype> </xsd:schema> Vorgehensweise: Starten des Programms. Laden der beiden Dateien Labor4b.xml und Labor4b.xsd. Öffnen des Registers Labor4b.xml Testen auf Validate (Strg+K). Eventuelle Fehlermeldungen dann in der XSD bzw. XML-Datei ändern. 5
Schemata XML Schema beschreibt in einer XML-Schemasprache mittels Datentypen und Hierarchien die Struktur einer XML-Datei. Ein XML Schema wird auch als eine XSD (XML Schema Definition) bezeichnet und hat als Datei üblicherweise die Endung.xsd. Eigenschaften: Der Ersatz der DTD-Datei. Bessere Datentypen (int, double, date, time, boolean). Bessere Definitionen bzgl. der Anzahl (minoccurs und maxoccurs). Einschränkung des Wertebereichs (minexclusive, maxinclusive, minlength, Pattern). Aufbau einer XSD-Datei: Header (xs:schema) Elemente und Unterelemente à la DTD Einfache Datentypen (atomare Datentypen à la Java) xsd:string xsd:byte xsd:unsignedbyte xsd:hexbinary // MIME xsd:unsignedinteger xsd:unsignedlong xsd:unsignedshort xsd:integer xsd:float xsd:double xsd:decimal -INF, +INF, NAN -INF, +INF, NAN Definition der Stellen möglich xsd:boolean xsd:date xsd:time xsd:datetime xsd:id ID à la Matrikelnummer 6
1. Beispiel: Speichern eines Studenten (xsd_bsp1) XML-Datei <?xml version="1.0" encoding="utf-8"?> <vorlesung xsi:nonamespaceschemalocation='xsd_bsp1.xsd"> <student> Meier </student> </vorlesung> XSD-Datei <?xml version="1.0" encoding="utf-8"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/xmlschema"> <xsd:element name="vorlesung"> <xsd:complextype> <xsd:sequence> <xsd:element ref="student" /> </xsd:sequence> </xsd:complextype> </xsd:element> <xsd:element name="student" type="xsd:string"/> </xsd:schema> Erläuterung: Die XSD-Datei ist wie eine XML-Datei aufgebaut und kann auch nach deren Regeln getestet werden. Die beiden ersten Zeilen zeigen die xml-startsequenz: o Version und Schema Die dritte Zeile startet mit dem root-element, hier vorlesung Mit den Anweisungen complextype und sequence werden Unterelement und Strukturen definiert. Die Anweisung element ref zeigt an, dass eine Vorlesung einen Studenten hat und dass dieser weiter unten definiert ist. Die vorletzte Zeile definiert den Datentyp des Studenten als Zeichenkette. Weitere Elemente einer XSD-Datei Bemerkungen (annotation) Bemerkungen können an jeder Stelle eingetragen werden: <xs:annotation> <xs:documentation>xml macht Spaß</xs:documentation> </xs:annotation> 7
Begrenzungen Um die einzelnen Knoten einschränken zu können stehen folgende Techniken zur Verfügung: Anzahl (minimal und maximal) o minoccurs bestimmt die untere Grenze (einschließlich). o maxoccurs bestimmt die obere Grenze (einschließlich). maxoccurs kann auch "unbounded" als Wert haben. Wertebereich: o minexclusive o mininclusive o maxexclusive o maxinclusive Längenbeschränkungen bei Strings: o length enumeration pattern o minlength o maxlength o Beschränkung durch Angabe alternativer Werte. o enumeration value="ati" o Beschränkung durch Angabe eines regulären Ausdrucks. o Deutsche Postleitzahlen: pattern value="(d )?[0-9]{5}" o D ist optional gefolgt von fünf Ziffern Einschränkung der Dezimalstellen (Gesamtzahl und Nachkommastellen) o totaldigits o fractiondigits whitespace Behandlung von Leerzeichen und Tabs Beispiele <xs:element name="anzstudenten" type="xsd:integer" minoccurs="0"/> <xs:element name="kommentar" type="xs:string" minoccurs="0" maxoccurs="unbounded"/> 8
SimpleTyp Dieser Typ hat keine weiteren Unterelemente, sondern hier wird definiert, welche Eigenschaften das Element hat. Selbstdefinierter Typ: <xs:simpletype name="monatinttyp"> <xs:restriction base="xs:integer"> <xs:mininclusive value="1"/> <xs:maxinclusive value="12"/> </xs:restriction> Selbstdefinierter Typ mit interner Defintion: 1. Möglichkeit (implizit, ohne den Typ autotyp ) <xs:element name="autotyp"> <xs:simpletype> <xs:restriction base="xs:string"> <xs:enumeration value="audi"/> <xs:enumeration value="volkswagen"/> <xs:enumeration value="bmw"/> </xs:restriction> </xs:simpletype> </xs:element> 2. Möglichkeit <xs:element name="auto" type="autotype"/> <xs:simpletype name="autotype"> <xs:restriction base="xs:string"> <xs:enumeration value="audi"/> <xs:enumeration value="volkswagen"/> <xs:enumeration value="bmw"/> </xs:restriction> </xs:simpletype> Aufzählung als externe Definition: <xs:simpletype name="size"> <xs:restriction base="xs:string"> <xs:enumeration value="xs"/> <xs:enumeration value="s"/> <xs:enumeration value="m"/> <xs:enumeration value="l"/> <xs:enumeration value="xl"/> </xs:restriction> </xs:simpletype> Längenbeschränkung: <xsd:simpletype name="mytyp"> <xsd:restriction base="xsd:string"> <xsd:minlength value="3"/> </xsd:restriction> </xsd:simpletype> 9
2. Beispiel: Bestellung (xsd_bsp4) XML-Datei <?xml version="1.0" encoding="utf-8"?> <adressen xsi:nonamespaceschemalocation="xsd_bsp4.xsd" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance"> <datensatz> <vorname>hans</vorname> <nachname>mustermann</nachname> <matrnr>12345</matrnr> </datensatz> <datensatz> <vorname>franz</vorname> <nachname>meier</nachname> <matrnr>12741</matrnr> </datensatz> <datensatz> <vorname>hans Hugo</vorname> <nachname>schulze</nachname> <matrnr>17741</matrnr> </datensatz> </adressen> XSD-Datei <xsd:schema xmlns:xsd="http://www.w3.org/2001/xmlschema"> <xsd:element name="adressen" type="adressentyp"/> <xsd:complextype name="adressentyp"> <xsd:sequence> <xsd:element name="datensatz" type="datensatztyp" minoccurs="1" maxoccurs="unbounded" /> </xsd:sequence> </xsd:complextype> <xsd:complextype name="datensatztyp"> <xsd:sequence> <xsd:element name="vorname" type="xsd:string" /> <xsd:element name="nachname" type="xsd:string" /> <xsd:element name="matrnr" type="matrnrtyp" /> </xsd:sequence> </xsd:complextype> <xsd:simpletype name='matrnrtyp'> <xsd:restriction base='xsd:integer'> <xsd:mininclusive value='1'/> </xsd:restriction> </xsd:simpletype> </xsd:schema> Erläuterung: Die obige Definition verwendet die externe Definition von Typen. Das Element adressen ist in adressentyp definiert. Da in der XML-Datei mehrere Datensätze stehen, muss der Wert von maxoccurs auf mindestens drei gesetzt sein oder auf unbounded. Eine Beschränkung des Wertebereichs funktioniert nur mit einem neuen simpletyp. Dort kann man die minimalen bzw. maximalen Werte eingeben. Es ist immer besser, wenn man die Subelemente in einem zusätzlichen Abschnitt definiert: Die Matrikelnummer wird in matrnrtyp definiert. 10