GnuCash XML format
This article collects some notes about the XML file format of GnuCash. It is descriptive, and neither normative nor authoritative.
Beginning with version 1.6, the primary GnuCash storage mechanism is an XML file. The file is optionally compressed with gzip, which is a preference that is set at Edit→Preferences→General→Use file compression.
There is a non-normative RELAX NG schema for the XML file format (gnucash-v2.rnc). There are also DTD schema definitions, but these are outdated and do not define the current format correctly (libgnucash/doc/xml).
Many elements in the XML file are identified by Globally Unique Identifiers (GUID). GnuCash includes its own GUID implementation.
With GnuCash 1.9.0, GnuCash writes the XML document using UTF-8 encoding and includes the appropriate encoding declaration in the opening XML text declaration.
The RELAX NG schema file mentioned above can be used to validate an uncompressed GnuCash XML data file. This requires that you:
- save your GnuCash data file in uncompressed format
- use an XML validator--e.g., Jing, which will be used in this example.
As stated above, the GnuCash data file is by default stored using gzip compression. You must first save your data file in an uncompressed state. The easiest way to do this is to change the storage preference and save your file. (Remember to reset the preference afterwards).
Then download jing and run the following command
jing -c path-to-gnucash-v2.rnc path-to-your-datafile.gnucash
jing will report any validation errors it finds.
- The validation should not be considered authoritative, as the schema is not updated or tested very often. So validation errors can just as easily be due to errors in the schema than due to errors in the data file.
Based on information provided by Baptiste Carvello in bug 680887.