[XML-SIG] DOM code now in CVS tree
Greg Stein
gstein@lyra.org
Sun, 4 Oct 1998 16:05:53 -0700
Andrew wrote:
> * Attributes in the IDL DOM definition are implemented as
> methods, prefixed with get_. For example, to retrieve the childNodes
> attribute, you call .get_childNodes() .
>
> This is not an optimal solution. Ideally it would be as
> simple as accessing .childNodes, but this faces some problems. First,
> the low-level tree of elements is implemented as a tree of _nodeData
> instances, with no circular references. Element, Text, etc. instances
> are then implemented as proxies for the corresponding _nodeData
> instance. This provides two useful features:
>
> 1) If there are several proxies for a given _nodeData,
> changes are instantly visible to all of the proxies.
> 2) As Ken McLeod suggested, this should avoid circular
> references, and, therefore, memory leaks. (I haven't
> actually verified that there are no leaks, though.)
>
> However, this also means that just setting up static
> childNodes attributes would break property 1. So you'd have to write
> __getattr__/__setattr__ functions. I'm worried that this would exact
> too great a performance penalty. Thoughts?
In both cases, you're executing a method, so I don't see that there would be
much of a perf difference. Go for __getattr__.
> * You can add extended interfaces and still remain compliant
> with the Recommendation. Therefore, feel free to suggest other useful
> things. I've added a few convenient aliases: the DOM spec specifies
> get_nodeName() and get_nodeValue(), so I've added get_name() and
> get_value(). We can add other alises to fix other annoyances.
You could always create subclasses of the DOM code for the Python-extended
versions. Have a "pure" version and one with the additional Python
interfaces. This goes along with the getattr from above.
Cheers,
-g
--
Greg Stein (gstein@lyra.org)