XML-Datenbindung
Der Begriff XML Daten-Bindung (engl. "XML data binding") ist ein Begriff der Objektorientierung welcher für den Prozess der Abbildung/Repräsentation von XML Dokumente durch Objekte und vice versa steht. Dieser Prozess erlaubt es Programmierern auf XML Daten über Objekte zuzugreifen ohne komplexe Mechanismen wie XPath, DOM oder SAX zu beherrschen.
Die zur Laufzeit einer Applikation stattfindende Abbildung eines Objektes in XML Daten nennt man dabei Marshalling oder Serialisierung. Der umgekehrte Weg, die Abbildung von XML Daten in einem Objekt nennt man Unmarshalling oder Deserialisierung.
Funktionsweise
XML Daten-Bindung muss zur Abbildung von Objekten auf XML Daten und umgekehrt Attribute der Objekte auf XML Elemente mappen. Dies kann je nach Aufgabenstellung beziehungsweise Unterstützung durch das verwendete XML Bindungs-Framework auf unterschiedliche Art und Weise erfolgen:
- XML Schema basierend
- Basierend auf einem gegebenen XML Schema werden Klassen generiert, welche dem XML Schema entsprechen. Die zu dem XML Schema passenden XML Dokumente werden zur Laufzeit dann von Instanzen dieser Klassen repräsentiert.
- Klassen basierend
- Basierend auf gegebenen zu serialisierenden Klassen wird ein dazupassendes XML Schema generiert. Zur Laufzeit werden die Instanzen dieser Klassen in zu dem XML Schema passende XML Dokumente gespeichert.
- Mapping basierend
- Ein üblicherweise in XML definiertes Mapping beschreibt die Abbildung von XML Elementen auf Attribute. Basierend auf diesem Mapping werden dann zur Laufzeit Objekte in XML Dokumente serialisiert bzw. XML Dokumente in Objekte deserialisiert.
Alle drei Methoden können auf unterschiedliche Art und Weise implementiert werden. So ist es beispielsweise bei einigen Frameworks möglich die benötigten Klassen erst zur Laufzeit zu generieren bzw. durch Bytecode Manipulation sogar ganz ohne eigene Klassen auszukommen.
Probleme
XML Schemas und Klassen lassen sich nicht immer vollständig aufeinander abbilden. Beispielsweise ist es oft schierig die bei beiden möglichen Kommentare aufeinander abzubilden. Darüberhinaus ist es oft problematisch die Reihenfolge der XML Elemente in Klassen abzubilden während Selbst-Referenzen von Objekten in XML schwer abzubilden sind. Somit kann es der Fall sein, dass XML Daten-Bindung nicht die gesamte Information der zu bindenden Elemente berücksichtigt. Moderne XML Daten-Bindungs-Frameworks sind allerdings in der Lage die vollständigen Informationen zu bewahren.
Alternative
Die Alternative zu XML Daten-Bindung ist die manuelle Serialisierung und Deserialisierung von Objekten in XML Dokumente mittels bekannter XML Techniken wie XPath, DOM oder SAX. Der wichtigste Nachteil dieser Alternative ist der Mehraufwand für die dazu notwendige proprietäre Implementierung und die damit verbundenen Folgekosten.
XML Daten-Bindungs-Frameworks und Tools
C++
- gSOAP - Open source XML data binding compilers and autocoders for C and C++, supports SOAP, WSDL and XSD.
- Liquid XML Studio - Generates cross platform C++ classes from XSD, XDR & DTD Schemas. Memory management is performed using reference counting via smart pointers, the code is thread safe, and compiles on Windows, Linux, Solaris.
- CodeSynthesis XSD - Open source XML data binding compiler for C++ which provides an event-driven, SAX-like C++ mapping in addition to the standard, tree-like in-memory object model. For closed source use, the company also offers a commercial license.
- CodeSynthesis XSD/e - Open source, validating XML parser/serializer and C++ data binding generator for mobile and embedded systems.
- xmlbeansxx - A C++ library for easing the processing of XML data. It is very similar to and in fact was inspired by XMLBeans.
- Codalogic LMX - GUI and command-line driven royalty-free C++ XML data binding tool. Code generator runs on Windows and Linux. Generated code runs on wide range of C++ compliant platforms. Free edition available.
- XMLSpy - A Windows only XML/XSD editor that supports Java and C++ code generation in the Enterprise edition.
Delphi
- Xml Data Binding Wizard - Standard CodeGear XML binding tool, included in Delphi product (from version 6 Enterprise onwards)
Java
- Castor, open source (original BSD), object/XML/relational mapping tool
- Schemaless Java-XML data binding with XPath and VTD-XML
- Java Architecture for XML Binding (JAXB), and JaxMe variation
- Eclipse Modeling Framework (EMF) open source (EPL), dynamic and static binding
- XMLBeans data binding over Document Object Model view of data
- JiBX, open source (modified BSD), a high performance Java/XML binding framework
- CookXml, open source (MIT License), dynamically configurable XML binding tool.
- XStream, a simple Java library to serialize objects to XML and back again.
- Betwixt (Java) provides XML introspection mechanism for mapping beans to XML
.Net
- Integrated into the .NET Framework, in the System.Xml.Serialization namespace.
- xsd.exe - A tool Supplied with Visual Studio which generates C# or VB.Net code from an XSD.
Python
- Amara open source Python library for XML data-binding
- EaseXML An open source XML Data Binding library Python. Translate XML to Python objects and vice-versa.
- generateDS generateDS generates Python data structures and parsers that load an XML document into those data structures from an XML Schema document.
Visual Basic
- Liquid XML Studio - Generates Visual Basic 6.0 classes from an XSD, XDR or DTD. This code can then be used from any COM compliant language including VBScript & ASP.
Weblinks
- XML Data Binding Resources, by Ronald Bourret
- XML Schema Patterns for Databinding Working Group
Weitere Infos
[[Category:XML]]