Verteilte Systeme: Übung 1 XML

Werbung
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
Herunterladen