Hi Steve,
I think your implementation is correct (not the test). In the
specification, the inheritance of elements algorithm (7.2.2.1) states:
7.2.2.1 Inheritance of Elements
Inheritance of elements from a node n’ to a node n is defined as
follows:
1 Let N an empty node list.
2 For each child element e’ of n’ from the first element to the
last element:
2.1 If the node n has child elements E = {e1, e2,…} that
have the same name as e’
2.1.1 If N does not contain an element that has the
same name as e’:
2.1.1.1 For each element ei in E in the
document order, append ei to the end
of N. Inherit attributes from e’ to
ei.
2.2 Otherwise, append e’ to the end of N.
3 For each child element e of the node n from the first element
to the last element:
3.1 if the element e’ does not have a child element that
has the same name as e,
append e to the end of N.
4 Replace n’s children with the nodes in N.
And your code, based on what you said on the e-mail, does what was
underlined above.
Guilherme
Steve Loughran wrote:
Sourceforge
is back up, but you need to check out everything again in a new
directory tree.
Incidenally I just found a little thing my CDL impl. can't resolve
<cdl:cdl>
<cdl:configuration>
<component>
<entry cdl:ref="todo"/>
</component>
<c2 cdl:extends="component">
<entry>something</entry>
</c2>
</cdl:configuration>
<cdl:system>
<example cdl:extends="c2" />
</cdl:system>
</cdl:cdl>
This fails on my impl, with the entry being undefined.
<example xmlns="">
<entry cdl:ref="todo">something</entry>
</example>
I'm clearly not scrubbing cdl:ref stuff when I extend an element, when
in reality I should strip that and cdl:refroot.
This is now a new test:
/org/ggf/cddlm/files/cdl/valid/set_02_references/cddlm-cdl-2005-02-0023.xml
Its interesting to see that I can still find problems in my code while
writing more CDL files. If anyone has more example CDL Files,
especially those that work on their system, please add them as CDL
tests just to give us as broad a set of
tests as possible.
-Steve