XML und das .NET Framework 2.0

Veröffentlicht: 06. Mai 2005
Von Jürgen Mauerer

XML hat sich über die Jahre hinweg zum universellen Standard für die Beschreibung von und den Zugriff auf Daten aller Art entwickelt. Mit dem .NET Framework 2.0 erweitert und verbessert Microsoft die XML-Funktionen der zuständigen Klassen im Namensraum System.Xml. Dieses Feature beschreibt die Neuerungen in System.Xml 2.0.

Auf dieser Seite

 System.Xml 2.0 - eine Einführung
 Verbesserte Sicherheit
 Typunterstützung, neue Klassen und Methoden

System.Xml 2.0 - eine Einführung

Das .NET-Framework 2.0 und damit auch Visual Studio 2005 bringen in puncto XML eine Menge Neuerungen. Die Klassen zum Bearbeiten und Überprüfen von XML-Daten befinden sich überwiegend im Namensraum System.Xml. Das Hauptziel bei der Entwicklung von System.Xml 2.0 war die Verbesserung der Leistung beim Parsen, Schreiben und Transformieren von XML. Die ersten verfügbaren Zahlen sprechen hier für sich.

Der XmlTextReader und der XmlTextWriter (bzw. deren Nachfolgeimplementierungen) arbeiten in der neuen Version doppelt so schnell als vorher, die XML Schema-Überprüfung läuft um rund 20 Prozent schneller ab. Außerdem hat Microsoft bei der Unterstützung von XML Schema ein größeres Augenmerk auf die Übereinstimmung mit dem W3C-Standard gelegt. Den größten Sprung gibt es aber bei der Geschwindigkeit von XSLT-basierten Transformationen. Microsoft hat diese in System.Xml 2.0 vervierfacht (basierend auf Performance-Messungen mit der Beta 1-Version)!

Der XSLT-Standard bereitet XML-basierte Dokumente für verschiedene Plattformen auf und definiert Mechanismen, wie bestehende XML-Dokumente in neue, textbasierte Dokumente transformiert werden. Die erhebliche Leistungssteigerung gelang durch eine grundlegende Erneuerung des XSLT-Prozessors, der MSIL (Microsoft Intermediate Language) jetzt direkt generieren und kompilieren kann. Dieser neue Prozessor befindet sich ab der Beta 2 sich in der XslCompiledTransform-Klasse und im Namensraum System.Xml.Xsl. MSIL ist die Zwischensprache des .NET Framework und ermöglicht eine sprachübergreifende objektorientierte Programmierung. Intermediate-Code-Anwendungen liegen als Portable Executable (PEs) vor und enthalten neben dem MSIL-Code einen speziellen CLR Header, Schnittstellenbeschreibungen (unsichtbare IDL) und weitere Metadaten. Der IL Code wird dann durch einen Just-In-Time Compiler zur Laufzeit in Maschinen-Code übersetzt.

Neben der besseren Performance bietet das .NET Framework 2.0 im Namensraum System.Xml neue Klassen, beispielsweise Settings-Klassen beim XmlReader und XmlWriter. Einen größeren Stellenwert hat jetzt die Klasse XPathDocument für das Bearbeiten und das Weiterreichen von XML-Dokumenten in einer Anwendung. Sie bietet ein cursorbasiertes API, um per XPath XML-Daten zu bearbeiten.

Zudem hat Microsoft auch die Unterstützung von Typen und XML Schemas erweitert bzw. eingeführt. Bislang gab es keine typbezogenen XML-APIs, mit denen man Typen aus XML schreiben und lesen konnte, ohne über spezielle Konverterklassen gehen zu müssen. Die Daten in den XML-APIs werden nur als Strings gespeichert und gezeigt (zum Beispiel in der DOM-API). Die Integration von Schema-Informationen in die System.Xml-APIs bietet auch eine verbesserte Leistung, ein effizienteres Speichern der Daten sowie eine bessere Integration mit den .NET-Programmiersprachen.

System.Xml 2.0 - das ist neu
Dieser englischsprachige Artikel beschreibt ausführlich die Verbesserungen und neuen Funktionen im Namensraum System.Xml des .NET Framework 2.0 auf Basis der Beta 1-Version.

Neue und gestrichene Funktionen in der Beta 2
Der MSDN-Experte Dare Obasanjo zeigt in seinem Weblog die Änderungen in System.XML 2.0, die sich von der Beta 1 auf die Beta 2 des .NET Framework 2.0 ergaben.

Hintergründe der Änderungen in der Beta 2
Hier erklärt Dare Obasanjo, warum Microsoft die Änderungen von der Beta 1 auf die Beta 2 vornahm.

Allgemein: Metasprache XML
XML (eXtensible Markup Language) ist die wohl wichtigste Neuentwicklung seit Einführung der Webtechnologie. Der offene Standard vereinfacht den Austausch von Daten zwischen zentralen Anwendungen unabhängig von Plattform, Betriebssystem und Programmiersprachen - auch über Unternehmensgrenzen hinaus. Das .NET Framework 1.x bietet eine Reihe von Klassen zum Bearbeiten und Überprüfen von XML-Daten. Dieses Feature führt in XML ein und beschreibt die XML-Funktionen des .NET Framework 1.x.

Verbesserte Sicherheit

Mit System.Xml 2.0 wird die XML-Verarbeitung sicherer, da die .NET Code Access Security (CAS) jetzt auch auf XML angewendet werden kann. Sicherer Code in .NET basiert auf Rechten und Beweisen. Dank der Vergabe von Rechten kann der Code geschützte Operationen ausführen; um zum Beispiel eine Datei löschen zu können, muss der Benutzer das Recht zum Löschen besitzen. Beweise sichern die Echtheit einer Assembly durch die Prüfung bestimmter Eigenschaften im Rahmen der Sicherheitsrichtlinien des Systems – zum Beispiel die Herkunft der Assembly.

Nutzt man den XmlReader beispielsweise, um ein XML-Dokument von einer URL herunterzuladen, wird die URL als Beweis genommen. Die Vertraulichkeitsstufe des Dokuments ist durch die Sicherheitsrichtlinien festgelegt und bestimmt, welche Dinge es ausführen darf.

Mit System.Xml 2.0 sind auch keine DoS-Attacken (Denial of Service) mehr über DTDs (Document Type Definition) möglich. Bei der XML 1.0-Spezifikation stand Sicherheit eher im Hintergrund. Daher war es möglich, über DTDs DoS-Attacken zu starten. Um diese zu verhindern, bietet System.Xml 2.0 die Option, das Parsen von DTDs während des Ladens von XML-Dokumenten zu unterbinden. Die Abwehr geschieht beispielsweise über die Eigenschaft ProhibitDtd in der XmlReaderSettings-Klasse. Der XmlReader unterbindet das Parsen sofort, wenn er im XML-Dokument den Inhalt von DTDs erkennt.

XML-Tools in Visual Studio 2005
Dieser englischsprachige Artikel führt in den XML-Editor sowie den XSLT-Debugger von Visual Studio 2005 ein.

Typunterstützung, neue Klassen und Methoden

Unterstützung von Typen
Die Klassen XmlReader, Xml Writer und XPathNavigator unterstützen jetzt .NET-Typen, d.h. es ist möglich, Typen direkt ohne explizite Konvertierung aus XML zu lesen oder zu schreiben. Den Klassen liegt das XPath 2.0 Daten-Modell zugrunde, das auf der XML Infoset-Spezifikation aufbaut und um XML Schema-Typinformationen sowie die Unterstützung für Sammlungen von Dokumenten und komplexen Werten (Sequenzen) erweitert ist.

XmlReader & Co. machen dadurch zugrunde liegende XML Schema-Typen sichtbar und unterstützen die Umwandlung von XML Schema-Typen in CLR-Typen sowie umgekehrt. In Version 1.0 von System.Xml war dies nur über den XmlValidatingReader und die XmlConvert-Hilfsklasse möglich. In System.Xml 2.0 hingegen kann grundsätzlich jeder XmlReader, XmlWriter und XPathNavigator die Typinformationen anzeigen und konvertieren.

Neue Klasse für die Schema-Bibliothek
System.XML 2.0 ersetzt die bisherige XmlSchemaCollection-Klasse durch die neue XmlSchemaSet-Klasse. Sie unterstützt mehr Standards als die Vorgängerklasse, ist leistungsfähiger und macht das proprietäre Microsoft XDR-Schemaformat überflüssig. Sie unterstützt damit nur diejenigen XML-Schemas, die der W3C-Spezifikation entsprechen. Da die Schemas nicht standardmäßig kompiliert werden, wenn die Add-Methode aufgerufen wird, wird die Schemabibliothek schneller aktualisiert.

Statische Methoden bei XmlReader und XmlWriter
Neu sind statische Methoden in der XmlReader- und XmlWriter-Klasse, die in System.Xml 2.0 speziell in den Subklassen XmlTextReader und XmlTextWriter genutzt werden.

Damit sind folgende Ziele verbunden:

  • Einfachere und flexiblere Konfiguration (es entfallen Spezialimplementationen der XmlWriter- und XmlReader-Klasse wie etwa XmlValidatingReader)

  • Spezielle interne Optimierungen sind möglich.

  • XmlReader- und XmlWriter-Instanzen lassen sich besser miteinander verbinden und durch neue Funktionen ergänzen, zum Beispiel Gültigkeitsprüfung.

  • Die Optionen für den Typ von XmlReader und XmlWriter kommen bei den statischen Erzeugungsmethoden von der XmlReaderSettings- und XmlWriterSettings-Klasse. Mit den Settings-Klassen können Entwickler mehrere XmlWriter oder XmlReader erstellen.

XML-Standards „by default“
Der XmlTextReader und XmlTextWriter in .NET 1.1 stimmen in der Grundeinstellung (by default) nicht mit der XML 1.0-Spezifikation überein. Durch die Einführung der obigen statischen Methoden für XmlReader und XmlWriter steigt die Übereinstimmung. So unterstützte der XmlTextReader keine DTDs und konnte Referenzen im Dokument nicht auflösen. Um dies zu beheben, benötigte man die XmlValidatingReader-Klasse für die korrekten Einstellungen; die Funktionalität war also über mehrere Klassen verteilt. In System.Xml 2.0 unterstützt der XmlTextReader jetzt DTDs und kann Referenzen auflösen, so dass er zu einem kompatiblen XML-Parser wird.

Hilfsmethoden für XmlReader und XmlWriter
System.Xml 2.0 bietet eine Reihe von Hilfsmethoden für die XmlReader- und XmlWriter-Klasse, die das Schreiben und Lesen von XML vereinfachen.

  • Beim XmlReader gibt es exemplarisch folgende neue Methoden:

    • bool XmlReader ReadSubTree()
      Diese Methode erzeugt einen neuen XmlReader, der den aktuellen Knoten in der baumförmigen Struktur des XML-Dokuments und all seine Untereinheiten liest und „false“ zurückgibt, wenn der komplette Unterbaum gelesen ist.

    bool ReadToDescendent(string qname)
    Diese Methode findet ein Namenselement, indem es den XmlReader zum nächsten Unterelement bewegt, das den speziellen Namen auf Übereinstimmung prüft und „true“ zurückgibt, wenn das Element gefunden ist. Die Methode ähnelt der XPath-Abfrage bei einem aktuellen Knoten oder dem „.//“-Abfrageausdruck.

    bool ReadToNextSibling(string qname)
    Diese Methode bewegt den XmlReader zum nächsten verwandten Element, das den speziellen Namen auf Übereinstimmung prüft und „true“ zurückgibt, wenn das Element gefunden ist.

    object ReadAsObject (System.Type type)
    Diese Methode verbindet die XmlReader- und die XmlSerializer-Klasse und macht CRL-Klassen direkt vom XmlReader-Stream aus erkenntlich.

    ReadToFollowing(string localname, string namespaceURI)
    Diese Methode bewegt den XmlReader zum nächsten Namenselement im Dokument.

  • Beim XmlWriter gibt es exemplarisch folgende neue Methoden:

    • void WriteNode(XPathNavigator navigator, bool defattr)
      Mit dieser Methode kann man einen XPathNavigator auf dieselbe Weise serialisieren wie einen XmlReader.

    • void WriteFromObject(object value)
      Diese Methode ergänzt die ReadAsObject()-Methode und ruft den XmlSerializer im XmlWriter auf, um ein CLR-Objekt zum XML-Stream zu serialisieren.

Einfachere XPath-Abfragen mit Namensräumen
Eine der häufigsten Fragen in XML-Newsgroups ist die nach XPath-Abfragen, wenn das Dokument Aussagen zu Namensräumen enthält. Die XmlDocument-Klasse bietet jetzt eine Überladung für die SelectNodes-Methode, mit der man mit Hilfe eines Präfixes in der XmlNamespaceManager-Klasse einen Namensraum für Elemente spezifizieren kann, damit diese Ergebnisse zurückgeben.

XML Developer Center
Dieses Developer Center bietet technische Artikel und weitere wichtige Informationen rund um das Thema XML, auch zur Version System.Xml 2.0. In englischer Sprache.


Anzeigen: