Thomas Kramer

IT-COW | Reminder

Reminder: XML-Dateien, XML-Schemata und Validierung

By Administrator at April 18, 2010 21:45
Filed Under: Anleitungen, Reminder

Unterschieden wird allgemein zwischen XML- und XSD-Dateien (und XML-Stylesheets), Dateien vom ersten Typ enthalten Datensätze und XSD-Dateien enthalten das XML-Schema mit den von den XML-Dateien referenzierten Datentypen.

 

Nun besteht die Möglichkeit die XML-Dateien auf Gültigkeit zu überprüfen, indem man sie mit einem geeigneten Tool gegen das XML-Schema validieren lässt. Als Programme dazu bieten sich z. b. das Addin XMLTools für Notepad++, das XML-Notepad oder Altova XMLSpy (kostenpflichtig) an.

Bei den XML-Dateien wird zwischen Elementen und Attributen unterschieden. Das hier z. B. ist ein Element:

<geburtsJahr>

das muß natürlich auch geschlossen werden, mit

</geburtsJahr>


Die Jahreszahl, die "geburtsJahr" nun zugewiesen werden soll, muß sich zwischen diesen beiden Elementen befinden. In XML-Notepad werden Elemente durch das blaue Icon hervorgehoben. Dagegen hat ein Attribut kein eigenes Tag sondern ist Bestandteil des Elements:

<geburtsJahr id="9">

Das Attribut ist demnach in diesem Beispiel id="9". Attribute werden in XML-Notepad trotzdem in einer eigenen Zeile aufgelistet, mit einem roten Icon.

Ähnlich wie in C# haben XML und XSD-Dateien Namensräume (Namespaces), also einen Raum dem sie zugewiesen werden - das ist sinnvoll, falls Typen mehrfach vorkommen. Namespaces werden durch das Attribut xmlns definiert, am Anfang des Dokuments. xmlns ohne Doppelpunkt definiert den Standard-Namespace im Dokument, auf den alle Elemente in der XML/XSD-Datei per Default zugreifen.

 

Aber es gibt noch die Möglichkeit weitere Namensräume über Aliase hinzuzufügen, Beispiel: xmlns:test="Datentypen" - der Namensraum ist hier also "Datentypen" und der Alias dafür test. Die Namensräume können frei vergeben werden und stellen keine Adresse dar - der Namensraum xs ist jedoch für die Standard-XML-Datentypen wie boolean und date vorgesehen (xmlns:xs="http://www.w3.org/2001/XMLSchema")

Will man nun auf die Elemente des Namespaces "Datentypen" zugreifen, muss der Zugriff im Beispiel über den Alias test geschehen - in einem XML-Schema geschieht der Verweis auf ein anderes Schema so folgendermaßen:
 


<xs:element name="TestTyp" type="test:Datentyp" [..]

 

Damit kann man also im Schema einen Datentyp inkludieren, der in einem anderen Schema definiert wurde.


Desweiteren gibt es in den XML-Schemata das Attribut targetNamespace - dies legt den Ziel-Namespace fest, also über welchen Namespace auf die Elemente (die in dieser Datei definiert wurden) zugegriffen werden kann. Damit die Validierung in XML Notepad funktioniert müssen sowohl XML-Datei wie auch das Schema auf denselben Namespace verweisen - dementsprechend müssen das Attribut xmlns in der XML-Datei (ohne Alias) sowie das targetNamespace-Attribut im XML-Schema identisch sein. Darüber hinaus ist es aber egal, ob der Standort des Schemas in der XML-Datei selbst festgelegt (import namespace) oder in XML Notepad über den Menüpunkt Schemas hinzugefügt wurde.

 

Außerdem gibt es die Möglichkeit in einer XML-Schema-Datei auf eine andere XML-Schema-Datei zu verweisen. Für diesen Fall muss das "import namespace="-Attribut oben hinzugefügt werden, wobei das nachfolgende Attribut schemaLocation auf den Dateinamen verweist. Am besten sollten die Dateien alle im selben Verzeichnis liegen, damit nicht mit relativen/absoluten Verzeichnisangaben herumprobiert werden muss.

 

Das sind die Grundlagen. In Visual Studio gibt es nun auch Konvertierungsfunktionen, um z. b. ein typisiertes Dataset in eine XML-Datei umzuwandeln und ähnliches...

 

Als weiterführende Quellen möchte ich vor allem die Kurzreferenz zu XML-Schemata empfehlen, siehe hier. Das W3C hat desweiteren einen Online-Schema-Validator frei verfügbar gemacht, unter dieser Adresse - wo man aber leider nur eine einzelne Datei zur Überprüfung hochladen kann, also ein auf mehrere Dateien aufgesplittetes XML-Schema ein Problem darstellt.

 

Übrigens gibt es eine eigene Abfragesprache für XML-Dokumente, XPath - eine Kurzreferenz dazu befindet sich hier. Leider funktionierten meine Tests mit den XMLTools von Notepad++ in dieser Hinsicht nicht, die XMLTools scheinen noch nicht ausgereift zu sein.

 

Weitere Links: XML-Überblick, XPath, XML-Tutorial, SelfXML, MSDN-Referenz zu XML-Schemata.

 

Tag-Wolke

Monats-Liste