Re: [xml] seeking help with namespaces and SAX
- From: Alex Graveley <alex ximian com>
- To: veillard redhat com
- Cc: xml gnome org
- Subject: Re: [xml] seeking help with namespaces and SAX
- Date: 11 Jan 2002 16:02:46 -0500
Hi,
On Fri, 2002-01-11 at 03:18, Daniel Veillard wrote:
I was essentially thinking that I would keep an array of lists of valid
namespace prefixes (one entry in the array for each parent node). I
would walk up the array looking for the current element/attributes'
prefix. On startElement the index into the array would be incremented,
and an array constructed of new prefixes for my namespace. The reverse
would happen on endElement.
More complex than that, I think you need one dictionary per level.
Well you need at least to keep all the informations from the parents
nodes, including their level.
Ya, I decided (about 5 minutes after sending the mail :) on using a
sparse array, with one entry for each node which has namespace
definitions. Each sparse array element contains a dictionary of
prefixes defined (and an entry for the default namespace if defined) on
the node. The value of each entry being a boolean marking whether the
prefix represents my blessed namespace.
On startElement, I first iterate the namespace attributes adding their
prefixes to a new entry in the sparse array. If none are present, I
increment the reference count in the last entry in the sparse array.
Then to check if a given attribute or element is in my namespace, I walk
up the sparse array looking in each dictionary for the first prefix that
matches (handling the default namespace as well).
On endElement I decrement the last sparse array entry's refcnt, and free
the prefix dictionary if it drops to zero.
Hmm... this doesn't cover the redefine of a parent node's valid prefix
to another namespace... uggg... I guess I could keep an allow list and a
deny list for each node. Anyways, every way I can think of seems gross
and makes way too many allocations.
A child node can remove a prefix from the subtree scope by using
xmlns:foo = ""
or simply redefine foo to a new value (same applies to default namespaces too)
so you can't just pass the same array/dictionary underneath.
Good to know about the removal from scope. Though my code handles this
already as "" doesn't match "my-special-namespace".
The spec is short. You should read it.
http://www.w3.org/TR/REC-xml-names/
Bah! Why do that when I can base my code on purely empirical data! ;-)
(thanks for the url)
-Alex
--
Think about it man! Rock singers are only rockin you half the time...
the other time they're... they're breathing... in! But not anymore
baby!
-- Tenacious D
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]