[cddlm] Sourceforge and a new CDL resolution bug in my implementation.

Jun Tatemura tatemura at sv.nec-labs.com
Thu May 18 18:17:48 CDT 2006


I think Guilherme is right in terms of interpretation of the current spec.
Prototype resolution resolves the <example> as
<example>
   <entry cdl:ref="todo">something</entry>
</example>
That means we cannot override a reference by specifying a value
of a property. For the further example by Steve on @cdl:lazy,
you need to specify @cdl:lazy="false" to turn lazyness off.
What we miss is a way to override @cdl:ref and @cdl:refroot with null..
if this is an issue, we can have one of the following fixes applied to 
prototype resolution:
[1] (explicit approach) allow @cdl:ref="" and @cdl:refroot="" to 
override value reference
[2] (implicit approach) when @cdl:ref is specified, @cdl:refroot is 
overridden by default value
when a child node is specified, @cdl:ref and @cdl:refroot are overrideen

Another issue is  if the above description is allowed - the spec says: 
"Value references
MUST NOT be placed in an element that has child elements" (7.3.1)
I think (I wanted to mean) this is "an element that has child nodes"
then the above description should be failed.

I will appreciate your comments on the above two issues
Thanks,
Jun

Steve Loughran wrote:
>
> ooh, this is worrying.
>
> You cannot say 'drop all cdl: attributes' because there are some 
> things, particularly, cdl:type, that you do want.
>
> Its only cdl:ref and cdl:refroot attributes that must be stripped when 
> you extend something (and, presumably of cdl:lazy). Without that, you 
> cannot extend any attribute that is bound to a reference, because that 
> reference binding is retained.
>
> You dont want any of the following to have the parent stuff merged
>
> refroots:
>
>              <component>
>                <entry cdl:ref="todo" cdl:refroot="a:newroot" />
>              </component>
>
>              <c2 cdl:extends="component">
>                <entry cdl:ref="value">
>                <value>7</value>
>              </c2>
>
> lazy links
>              <component>
>                <entry cdl:ref="todo" cdl:lazy="true" />
>              </component>
>
>              <c2 cdl:extends="component">
>                <entry cdl:ref="value">
>                <value>7</value>
>              </c2>
>
> Jun, what do you think?
>
> -steve
>
> Guilherme Mauro Germoglio Barbosa / Projeto Ourgrid - Projeto 
> Ourgrid/LSD wrote:
>> 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
>>>
>>>
>>>
>>>
>>
>>
>>





More information about the cddlm-wg mailing list