QSF XML file backend for gnucash-gnome2-dev branch

Josh Sled jsled at asynchronous.org
Tue Jan 25 17:35:32 EST 2005

I wanted to echo Derek's comments: nice job!  :)

On Tue, 2005-01-25 at 11:38, Neil Williams wrote:

> I've got code in the patch just sent to gnucash-patches to correctly 
> distinguish a QSF XML file from v1, v2 or the older binary GnuCash text 
> formats and it loads using the QofBackendProvider mechanism rather than as a 
> GnuCash module.

A question came up on the IRC channel regarding this process... Can you
elaborate on how it's done?  Is the namespace [or lack thereof, in the
older XML case] of the file being opened used to branch on which backend
to use, or some other process?

> The patch includes the QSF schema for object and map files, it includes code 
> to install the schema in a qsf sub-directory of $prefix/share/ and it also 
> includes a test QSF map that will be the next phase of development to map 
> pilot-link QOF objects into GnuCash objects.

One problem I wanted to call out was the use of the URIs
"urn:qof-qsf-map" and "urn:qof-qsf-container" as the XML namespaces. 
Not only are they not registered URN namespace, but best practices are
to use a namespace-name which is generally resolveable [i.e., an
http-scheme URI], and which resolves into a useful document [i.e., is a

I'd recommend something date-stamped under http://qof.sourceforge.net/ 
... maybe: 


... each of which is probably simply an HTTP redirect [303] back to the

> The backend can cope with partial QofBooks and is designed to handle routines 
> that create a second QofSession, populate that session with data for export - 
> any QOF compatible objects - and save the session to export as QSF XML. There 
> is absolutely no requirement for AccountGroup or any other specific object to 
> be present, the backend will write out just invoices or just accounts, just 
> customers or any mix.

A better way to say this might be: "it is the caller's responsibility to
ensure to the consistency, validity and coherence of the sub-set of data
being serialized".

> QSF increases the libxml2 requirement to 2.6.0 for the gnome2 branch to 
> support the schema validation which identifies QSF files relative to existing 
> files.

Is this the only reason for 2.6.0?

Can we make schematic validation optional?

Can we get rid of it entirely?

> QSF uses UTC time throughout and uses this time format string:
> #define QSF_XSD_TIME   "%Y-%m-%dT%H:%M:%SZ"
> The datestring must be timezone independent and include all specified fields.

To clarify:

* MUST the timezone be in UTC, or MAY it be in some non-UTC timezone, 
  as per [1]?
* If it MUST be, do you intend to fully support xsd:dateTime, or no?

[1] http://www.w3.org/TR/xmlschema-2/#dateTime

> as well as QOF_TYPE_DEBCRED as a QOF_TYPE_BOOLEAN currently. The parameter 
> will be converted back during the creation of the QofObject concerned.

Hmm.  I'm assuming debcred is actually an enumerated value; is the
intent to support that, or just to use boolean?


http://asynchronous.org/ - `a=jsled; b=asynchronous.org; echo ${a}@${b}`

More information about the gnucash-devel mailing list