[Gnucash-changes] r13713 - gnucash/trunk - Work around the fact that a validating XML parser barfs on gnucash's

Mike Alexander mta at umich.edu
Fri Mar 31 00:53:46 EST 2006


--On March 30, 2006 2:13:13 PM -0500 David Hampton 
<hampton-gnucash at rainbolthampton.net> wrote:

> The problem I was seeing is related to the following (class of) line
> in the data file:
>
>   <gnc:count-data cd:type="commodity">161</gnc:count-data>
>
> Gnucash writes the <gnc:count-data> tag with an attribute named
> 'cd:type' but doesn't declare the 'cd' namespace.  (The declaration of
> 'cd' that you see on line 6 of the data file is in the wrong scope.)
> When a validating xml parser reads this attribute it on input, it
> ignores the attribute leaving gnucash with no idea of what the number
> 161 applies to.  This was considered a parse error and caused the
> loading of the data file to be considered a failure even though all
> the data was read.  Also since all counts to be loaded are zero,
> gnucash has no way to properly update the progress bar.

I believe that this is a misunderstanding of XML namespaces.  A 
namespace prefix declared on a tag can be used on any attribute on that 
tag or any tag in the contents of that tag.  I've spent much of the 
last few months making namespaces work better in Arbortext Epic editor, 
so I'm fairly familiar with them right now.  One of the test cases I 
used to debug this is attached to this message.  It contains

<emphasis xmlns:pre2="www.uri.com">
<pre2:tag pre2:attr="pre2val" pre2:glarp="pre2glarp">Namespaced
tag</pre2:tag>
</emphasis>

This declares the pre2 prefix on the emphasis tag and uses it on an 
attribute in the enclosed pre2:tag tag.  It doesn't matter that the 
prefix on the tag name is the same as on the attribute name.

Another example from the test file (leaving out the contents of the 
table and part of the para) is

<para xmlns:pre1="www.uri.com" pre1:attr="pattr">
<table pre1:attr="table">
</table>
<pre1:tag pre1:attr="attrValue" pre1:glarp="glarp1">Namespaced tag
</pre1:tag>
</para>

Here the pre1 prefix is used on an attribute on the table tag.  I 
wanted to make sure that the table editor preserved namespace qualified 
attributes when you edited the table.

I think that the use of the "cd" prefix by gnucash was legal as it 
stood.  You're right that it's unusual to use namespace prefixes on 
attribute names, but it's legal.

-- 
Mike Alexander           mta at umich.edu
Ann Arbor, MI            PGP key ID: BEA343A6

-------------- next part --------------
A non-text attachment was scrubbed...
Name: namespace-test.xml
Type: application/octet-stream
Size: 1502 bytes
Desc: not available
Url : http://lists.gnucash.org/pipermail/gnucash-devel/attachments/20060331/d13ca377/namespace-test.obj


More information about the gnucash-devel mailing list