Weitere Python-XML-Werkzeuge

(Auszug aus "Python & XML" von Christopher A. Jones & Fred L. Drake, Jr.)

Diese Seite stellt einige weitere Möglichkeiten vor, mit Python und XML zu arbeiten, die im Buch nicht ausführlich behandelt wurden. Python & XML hat versucht, die populären API-Standards zu behandeln, da diese am wahrscheinlichsten über mehrere Programmierumgebungen, -sprachen und sogar -jobs anzutreffen sind. Wenn Sie mit XML arbeiten werden, müssen Sie DOM verstehen. Python ist zufällig eine Sprache, in der alle Standard-APIs verfügbar sind. Aus all diesen Gründen konzentriert sich dieses Buch auf DOM, XPath, XSLT, SOAP und andere.

In diesem Abschnitt untersuchen wir einige Alternativen zum Arbeiten mit XML in Python. Einige dieser Werkzeuge bieten äquivalente Funktionalität zu Werkzeugen, die an anderer Stelle im Buch benutzt wurden, verwenden aber eine Implementierung, die in einem anderen Kontext vielleicht angemessener ist.

Pyxie

Das von Sean McGrath entwickelte Pyxie ist unter SourceFourge.net: Pyxie verfügbar und basiert auf einer zeilenorientierten Notation namens PYX. PYX und Pyxie sind eine Alternative zu SAX und DOM und laut Autor für die Pipeline-Verarbeitung optimiert, bei der die Ausgabe einer Anwendung als Eingabe der nächsten Anwendung fungiert. Dieses Idiom ist sehr verbreitet bei Unix-Werkzeugen, wird aber auch unter Windows benutzt, wenn auch weniger bei Werkzeugen für Endbenutzer.

Pyxie kann ein XML-Dokument in ein zeilenorientiertes Format namens PYX parsen, das je nach Dokumentinhalt entsprechende Signale gibt. Ähnlich wie SAX ist es ereignisbasiert, allerdings werden die Ereignisse als PYX-Notation auf die Standardausgabe ausgegeben, statt Callback-Schnittstellen zu implementieren. Die Ausgabe von PYX kann dann von anderen Textverarbeitungswerkzeugen wie grep, sed und awk weiterverarbeitet oder in andere Skripten gespeist werden, die mit Text umgehen können und vielleicht in Python oder Perl geschrieben sind.

Die Ausgabe von PYX erscheint in Form einzelner Zeilen, die verschiedene Arten von Auszeichnungen darstellen. Betrachten Sie folgendes XML:

<Book>
  <Name>Python und XML</Name>
  <Publisher>O’Reilly Verlag</Publisher>
</Book>

Das obige XML würde mit Pyxie oder anderen PYX-fähigen Prozessoren in folgendes PYX konvertiert werden:

(Book
-\n
(Name
-Python und XML
)Name
-\n
(Publisher
-O’Reilly Verlag
)Publisher
-\n
)Book

Bei der PYX-Ausgabe ist zu beachten, daß jedem behandelten Dokumentkonstrukt eine eigene Zeile gewidmet ist. Das ist sehr praktisch für Unix-artige Verarbeitungswerkzeuge auf der Kommandozeile. Außerdem beginnen die PYX-Auszeichnungen jede Zeile mit einem Symbol, das auf den angetroffenen Knotentyp deutet:

(     Die linke Klammer bezeichnet Start-Elemente.

)     Die rechte Klammer bezeichnet das Ende von Elementen.

A     Ein großes A markiert Attribute.

-     Ein Bindestrich (oder Minus) markiert Zeichendaten.

?     Ein Fragezeichen steht für Verarbeitungsanweisungen.

Diese Symbole decken nicht alle möglichen XML-Konstrukte ab. Es gibt z. B. keine Unterstützung von CDATA-Abschnitten, DTDs oder Kommentaren.

Aufgrund unserer Erfahrung mit Unix-Systemadministration können wir definitiv sagen, daß das zeilenorientierte Markup der PYX-Syntax unglaublich wertvoll für all jene sein wird, die sich mit sed, awk und grep auskennen und die ein XML-Dokument parsen müssen, aber keine Zeit darauf verwenden wollen, so zu codieren, wie es ein Parser vorschreibt.

Eine weitere sehr mächtige Eigenschaft von PYX ist die Möglichkeit, schnell den Inhalt eines Dokuments zu untersuchen, was zu grep-ähnlichen Suchmöglichkeiten führt. Die zeilenorientierten Inhalte können sehr leicht mit einem Werkzeug wie grep durchsucht werden, so daß einige komplexe Operationen mit dem Dokument möglich werden. So können Sie z. B. mit grep und PYX die Optionen von grep auf der Ausgabe von PYX-Daten verwenden. Beispiel:

$> <PYX-erzeugendes-Kommando> | grep –v "Celsius"

Wenn Ihre PYX-Ausgabe voll von Temperaturangaben der Art »38 Grad Celsius« ist, garantiert das obige grep-Kommando, daß in der Ausgabe Temperaturen in Celsius nicht vorkommen. Solche Filter sind wesentlich komplexer mit XPath und DOM. Andererseits glauben wir, daß PYX nicht sehr hilfreich ist, wenn Ihre Aufgabe etwa darin besteht, SQL-Datensätze nach XML zu konvertieren, und dabei DTDs und Namensräume zu beachten sind. In einem solch komplexen Fall muß man mit DOM arbeiten.

Python-XML-Werkzeuge

XML Tools baut auf PyXML auf und bietet zwei GTK-Widgets: XmlTree und XmlEditor. Die Python-XML-Werkzeuge sind unter logilab-xmltools verfügbar. Mit diesen Paketen kann man XML-Dateien anzeigen (XmlTree) und editieren (XmlEditor).

XmlTree zeigt XML-Dateien in Baumform an, was all jenen bekannt vorkommen wird, die Datei-Browser unter Windows, KDE oder GNOME benutzt haben. Diese Struktur hat die Form eines GTK-Widgets – sie ist vom GtkCTree-Widget abgeleitet.

Die API bietet mehrere Methoden zum Einstellen der Anzeige des XML-Dokuments sowie von XPath-Filtern für den Baum und eine Klasse zum Erzeugen von Metadaten über den Baum.

Zusätzlich zu API-Methoden bietet der Baum konfigurierbare Tastenbelegungen. Das Drücken eines Sterns (*) expandiert rekursiv den ausgesuchten Knoten, während sie mit einem Schrägstrich (/) wieder geschlossen werden.

Der XmlEditor ist ebenfalls ein GTK-Widget, erlaubt aber das Editieren von XML-Dokumenten. Zur Anzeige benutzt er den zuvor erwähnten XmlTree. Die Struktur, die editiert werden kann, basiert im Moment auf einer DTD, was sich später jedoch ändern kann, um Schemata zu verwenden.

Über eine einfache API zum Ansteuern des Editors hinaus enthält XmlEditor auch eine Methode namens add_change_listener, mit der Sie eine Callback-Funktion angeben können. Diese Callback-Funktion wird immer dann ausgeführt, wenn die Buttons Apply oder Ok im Editor gedrückt werden.

XML Schema-Validierer

Der XML Schema-Validierer (XSV) ist unter Edinburgh Language Technology Group: XSV verfügbar. Obwohl noch mit heißer Nadel gestrickt (wie XML Schema selbst), wird die Software häufig aktualisiert und scheint Fortschritte zu machen. XSV versucht, einer der ersten schemafähigen XML-Prozessoren in Open Source zu sein. Er stellt eine nette Ergänzung zum TREX-Validierer in PyXML und zum Schematron-Validierer in 4Suite dar.

Sab-pyth

Sab-pyth ist ein Schnittstellenmodul zum Sablotron-XSLT-Prozessor, der in C++ geschrieben ist. Sab-pyth ermöglicht Ihren Python-Programmen, die Sablotron-APIs zu benutzen. Die Schnittstelle ist klein und effektiv, hat aber auch ihre eigenen Tücken und speziellen Konstanten. Mit Sablotron kann man auch speziell angepaßte Handler benutzen. Durch das Hinzufügen von Handlern können Sie Nachrichten abfangen, die vom Prozessor generiert werden.

Sab-pyth ist online verfügbar unter python-org: SabPyth 1.0.1.

Redfoot

James Tauber und Daniel Krech haben dieses Toolkit zum Arbeiten mit RDF-Daten (Resource Description Framework) entwickelt. Zu den Werkzeugen gehören ein RDF-Parser und -Serialisierer, eine RDF-Datenbank, eine API für Abfragen, eine bequeme Benutzerschnittstelle und ein Webserver, der eine Schnittstelle zur Verfügung stellt, um RDF in der Datenbank zu sehen und zu editieren. Mehrere Beispielanwendungen, die auf Redfoot aufbauen, sind ebenfalls verfügbar.

Weitere Informationen sind unter GitHub: redfoot verfügbar, ebenso die Implementierung und die komplette Dokumentation.

XML-Komponenten für Zope

Zope ist ein in Python und C geschriebener Open Source-Anwendungsserver, der von der Zope Corporation entwickelt wurde. Die Implementierung und mehr Informationen über Zope selbst findet man auf der Zope-Benutzer-Website. Obwohl es selbst kein explizites XML-Projekt ist, gibt es eine Reihe interessanter XML-Komponenten dafür, die man beim Bau von Websites benutzen kann.

Parsed XML

Parsed XML (Geparstes XML) ist eine optionale Zope-Komponente, mit der ein persistentes DOM in der Zope-Objektdatenbank gespeichert werden kann. Das von Karl Anderson begonnene Projekt wird nun von Martijn Pieters geleitet. Die zugrundeliegende DOM-Implementierung ist hauptsächlich das Werk eines der Autoren dieses Buches, Fred L. Drake, Jr.

Page Templates

Page Templates (Seitenvorlagen) sind eine weitere optionale Zope-Komponente. Sie dienen dazu, Ergebnisse von Operationen auf einer Website zu präsentieren, die die Geschäftslogik implementieren, die der Site zugrundeliegt. Die Template-Sprache ist so definiert, daß die Vorlagen weiterhin mit den graphischen Werkzeugen editiert werden können, die Site-Designer so sehr lieben, ohne die Verknüpfungen zur Geschäftslogik zu trennen, die von den Site-Programmierern implementiert wird. Die Vorlagen selbst können in HTML, XML oder XHTML geschrieben sein. Geleitet wird das Projekt von Evan Simpson, der auch einen Großteil des Wissens über die Erstellung von Zope-Komponenten beigesteuert hat. Fred L. Drake, Jr. (Koautor dieses Buches) und Guido van Rossum haben viele der nicht-Zope-spezifischen Teile des Pakets beigesteuert.

Online-Ressourcen

Die Python/XML-Gemeinde schart sich um die Python XML Special Interest Groups, kurz XML-SIG.

Wie bei den meisten Python-SIGs passiert das allermeiste auf einer Mailing-Liste. Informationen zur Mailing-Liste inklusive Links zu den Listenarchiven und einem Anmeldeformular sind auf der Webseite der XML-SIG verfügbar.

Die XML-SIG ist nicht nur für die Pflege des in diesem Buch ausgiebig benutzten PyXML-Pakets zuständig, sondern auch für den Python/XML Topic Guide, der Übersichten enthält, was in Python für die Arbeit mit XML verfügbar ist, sowie Links zu weiterführenden Online- und gedruckten Ressourcen.

  

<< zurück vor >>

 

 

 

Tipp der data2type-Redaktion:
Zum Thema Python & XML bieten wir auch folgende Schulungen zur Vertiefung und professionellen Fortbildung an:

Copyright © 2002 O'Reilly Verlag GmbH & Co. KG
Für Ihren privaten Gebrauch dürfen Sie die Online-Version ausdrucken.
Ansonsten unterliegt dieses Kapitel aus dem Buch "Python & XML" denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.

O’Reilly Verlag GmbH & Co. KG, Balthasarstraße 81, 50670 Köln, kommentar(at)oreilly.de