Verteilte Systeme: Übung 1 XML - Dokumente und Schemata Oliver Kleine Institut für Telematik Was ist eigentlich ein Namespace? • Definiert den Gültigkeitsbereich (=Namensraum) von Elementen und Typen – targetNamespace: Namensraum für alle im Schema neu definierten Elemente und Typen – xmlns und xmlns:<prefix> um Namensräume zu referenzieren • Zugriff auf Typen und andere Elemente im gleichen Schema • Zugriff auf Typen und Elemente anderer Schemata • Analogie zu JAVA: import <package> oder import <klasse> • Identifiziert ein Schema (nicht ein-eindeutig!) – XML-Schema kann genau einen targetNamespace haben (oder keinen) – Mehrere Schemata können den gleichen targetNamespace haben 2 Etwas hinkende Analogien zu JAVA • Package beinhaltet bestimmte Klassen Namespace beinhaltet bestimmte Datentypen JAXB erzeugt eine Klasse je Datentyp (siehe Übung 2) • Objekte sind Instanzen einer Klasse Elemente im XML-Dokument sind Instanzen eines Datentyps aus einem Schema • Klassen importieren Packages oder andere Klassen Schemata und XML-Dokumente referenzieren andere Schemata 3 XML - Best Practices • Gut geeignet als Namespace-Identifier: – URI mit Versionsnummer – Einige XML-Parser suchen das entsprechende Schema automatisch anhand des Namens (URI) • Groß-/Kleinschreibung im Schema (zur Übersichtlichkeit) – Typen: Große Anfangsbuchstaben – Elemente: Kleine Anfangsbuchstaben • Namen für Typen (zur Übersichtlichkeit) – „<element->Type“ als Typname (z.B. SpeiseplanType für Element speiseplan) – <xs:element name=„speiseplan“ type=„SpeiseplanType“/> 4 Target Namespace • Attribut von <schema>: <schema targetNamespace=„my_namespace“> • Definiert den Namespace für alle im Schema definierten – Types – Elements • Hilfreich, um von anderen XSDs oder XML-Dateien aus die im Schema definierten Types und Elements referenzieren zu können • Notwendig, wenn XML-Dokumente auf mehrere Schemata referenzieren 5 Namespace(s)-Referenzierung im Dokument • Explizite Namespace-Definition – xmlns:ns=„my_namespace“ – ns:vorname referenziert auf Element oder Type „vorname“ im Schema mit targetNamespace „my_namespace“ • Default-Namespace – xmlns=<String> – Definiert Namespace für alle Komponenten innerhalb des aktuellen Dokuments, für die kein Namespace explizit definiert wurde • Siehe Beispiel: Person 6 Element vs. Types • Alle im XSD direkt unter <schema> definierten Elemente können RootElemente eines validen XML-Dokuments sein! • Das ist aber oft nicht gewollt! • Darum: Typdefinitionen auslagern (siehe Beispiel Personenliste) 7 Attribut elementFormDefault • Attribut des Elements <schema> • 2 Werte möglich – „qualified“: Subelemente eines Root-Elements im XML-Dokument müssen MIT Namespace angegeben werden – „unqualified“: Subelemente eines Root-Elements im XML-Dokument müssen OHNE Namespace angegeben werden (default) 8 Referenz auf ein Schema zur Validierung eines XML Dokuments • xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance – Das XML-Dokument soll auf ein Schema referenzieren. Welches das ist, steht in • xsi:schemaLocation=„my_namespace <URI>“ verweist auf ein Schema MIT targetnamespace my_namespace oder • xsi:noNamespaceSchemaLocation=„<URI>“ Verweist auf ein Schema OHNE targetnamespace! • Um auf eine Schema-Location verweisen zu können, muss ein Präfix (hier: xsi) für den Namespace des locationAttribut definiert werden! 9 Byte Order (Endianess) • Hat NICHTS mit der Reihenfolge der Bitwertigkeit innerhalb der Bytes zu tun!!!! • Varianten – Big Endian: Byte mit den höherwertigen Bits steht vorn – Little Endian: Byte mit den niedrigwertigen Bits steht vorn • Beispiel: 1234510=110000001110012 – Big Endian: [00110000] [00111001] – Little Endian: [00111001] [00110000] • Unterschiede ergeben sich erst bei Zahlen, die zur Darstellung mehr als 1 Byte benötigen! 10