1. GXml
GXml provides a GObject API for XML manipulation.
Details
- DOM Level 1 Core API[0]
- select DOM Level 2 Core API support (for namespaces)
- built atop libxml2 for proven performance
- GObject serialization
Its development has been sponsored through
- 2012 Google Summer of Code (Serialisation)
- 2011 Google Summer of Code (DOM Level 1 Core API)
0. http://www.w3.org/TR/DOM-Level-1/idl-definitions.html
2. news
Progress can be tracked by blog posts at:
http://blog.kosmokaryote.org/search/label/%23GNOME
3. status
Updated: 2012-08-20
- finished Serialization class (automatically handles most of GObjects)
- finished Serializable interface (allows classes to handle parts of serialization themselves)
- finished test cases. (Some target features for the future, e.g. finding a magical way to serialize private fields, and thus are supposed to fail at present, run the test suite with -k to not block on those)
finished documentation (GtkDoc style for devhelp!)
- uses autotools (built on work from Daniel Espinoza)
4. source tree
It's living at GNOME's Git repositories:
http://git.gnome.org/browse/gxml/
release as of 2012-08-20:
http://ftp.gnome.org/pub/GNOME/sources/gxml/0.3/
5. bugzilla
Please file bugs at: https://bugzilla.gnome.org/browse.cgi?product=gxml
6. SAX notes
Simple API for XML.
libxml2 API:
Wikipedia description:
Java, the de facto standard:
http://docs.oracle.com/javaee/1.4/tutorial/doc/JAXPSAX.html (Java tutorial)
Java provides users with a DefaultHandler to handle SAX parsing. Users can extend it and override methods to handle different events themselves. Such methods include
- {start,end}{Document,Element}, characters, comment, etc.
7. Serialization notes
Serialization is being added as part of GSoC 2012 along with some other features: http://www.google-melange.com/gsoc/proposal/review/google/gsoc2012/aquarichy/17003
Goals:
- convert GObjects (and potentially) GVariants to XML
- be able to serialise XML to disk and back
- perhaps have a generic interface so we could have an XML or a JSON back end
7.1. Serialization as XML GObject Model
As for .NET implementation, actual work at serialization branch, adds to Serializable interface with methods to convert any GObject implementing it as a GObject representation of XML nodes.
XML GObject Model, allows to consider a GXml.Element as a GObject and GXml.Attr as properties, where any GObject property is handle as a child GXml.Element tag.
Serialization class will be used to actual implementation of serialization process.
A new GXml.ObjectModel abstract class has been added to easy Serializable classes implementation. As you can see at some Tests.
Comming features will include:
Handle GLib.Array<G>, GLib.HashTable<G>, arrays properties, by emitting events and providing default handlers
- Emit events on unknown nodes or properties present in existing XML deserializable
- Allows Unknown Elements and properties to be handle and saved without any change
- Fix most GXml bugs in the process
- Request for master merging
7.2. existing methods
.NET XML serialisation http://msdn.microsoft.com/en-us/library/ms950721.aspx
JSON serialisation http://live.gnome.org/JsonGlib
goffice
7.2.1. Buzztard (digital music studio)
with their BtPersistence
website: http://buzztard.org/
source: http://sourceforge.net/scm/?type=git&group_id=55124
BtPersistence's .c: http://buzztard.git.sourceforge.net/git/gitweb.cgi?p=buzztard/buzztard;a=blob;f=src/lib/core/persistence.c;h=3a969d56515046437f08644948021db6dc70f0c2;
BtPersistence's .h: http://buzztard.git.sourceforge.net/git/gitweb.cgi?p=buzztard/buzztard;a=blob;f=src/lib/core/persistence.h;h=5e9d08c91a062019df8917ab01dfa2af51b24af0;hb=HEADhb=HEAD
- can save GLists, GHashTables
- heart: bt_persistence_{save,load}
- works with libxml
- functions to convert GValues to strings and vice versa
serialisable objects implement BtPersistence interface, and the save() and load() methods
- save() takes a serialisable object, returns an xmlNodePtr
- load() takes an xmlNodePtr and either fills a serialisable object or instantiates a new one from a type
7.2.2. goffice
source: http://git.gnome.org/browse/goffice/
go-data.c at http://git.gnome.org/browse/goffice/tree/goffice/data/go-data.c
- has go_data_serialize and go_data_unserialize
- not sure if this is the serialisation that Stefan Sauer mentioned, need to investigate further
8. related projects
8.0.1. libgeexml
We hope to incorporate this as an element tree component to GXml.
http://git.gnome.org/browse/libgeexml/ A library implementing an API inspired by python etree.
https://gitorious.org/libgeexml-gdom A testing branch, trying to bring the above up to date and relearning some vala.
8.1. future
Short term plans include (summer 2012)
- XML reader/writer stream
- SAX parsing
- performance measurements to make sure we're not catastrophically slower or heavier than libxml2
- object serialisation
- GVariant too, potentially
ElementTree based on libgeexml (perhaps)
Long term ideas include:
- DOM Level 3 Core support (delicious namespacery!)
- XPath support
- XQuery support
- native implementation (rather than just wrapping libxml2)