Question regading evaluation context

Hi,

I'm just trying to implement the calculation of the evaluation context 
(7.3 from the spec). I have run into the following problem: let's assume 
I have a model with id="M1" (and the sample instance from 7.3 of the 
spec) and another model with id="M2" (with instance data <root 
xyz="5"/>). Now how do I resolve this:

<group ref="level2/level3" model="M1">
   <select1 ref="/root/@xyz" model="M2"/>
</group>

I would expect the reference for select1 to be resolved to "5". But if I 
apply the rules from 7.3, I find the following:

(1) <select1 ref="/root/@xyz" model="M2"/> is not an outermost binding

(2) So rule 2. from 7.3 applies: "The context node for non-outermost 
binding elements is the first node of the binding expression of the 
immediately enclosing element."

(3) So, my context node is "level3" from model "M1".

(4) Applying the xpath expression "/root/@xyz" to this results (at best) 
in something empty.

(5) Have I forgotten to apply rule 3. from 7.3? Maybe. "The context node 
[even of my non-outermost binding element] resides within the context 
model, which is determined choosing the first item that applies from 
this list: a. if a model attribute is present on the binding element, 
the attribute determines the context model...". OK but how does it help? 
It is obviously not true for the result returned in (3). Is the above 
example illegal?

(6) Does rule 3. from 7.3 have a kind of precedence? I.e. should I 
evaluate "level2/level3" using model "M2"? This contradicts rule 2. from 
7.3 because is states that "The context node for non-outermost binding 
elements is the first node of the binding expression of the immediately 
enclosing element.". The "binding expression" of the group element, 
however, is obviously "level3" from model "M1".

(7) Should I assume that a rule is missing: "A non-relative path in 
"ref" binds the context node to the first node returned from applying 
the path to the instance data of the context model". I wouldn't like 
this. First, it is not easy to be sure that a path is non-relative: 
"node1/node2/instance('I2')/root" is (though silly) absolute but it does 
not look like it. Second, I would expect "<select1 ref="@xyz" 
model="M2"/> to return "5" in the example above as well (though I'd also 
accept this to be defined as an illegal selection -- note, however, that 
it is not illegal based on the current rules).

(8) Should I assume that the "immediately enclosing element" should be 
defined like this: "An element is 'immediately enclosing' when it is the 
first binding element node THAT HAS THE SAME CONTEXT MODEL AS THE 
NON-OUTERMOST BINDING ELEMENT in the node-set returned by the XPath 
expression ancestor::*.". I'd prefer this, because it is easy to 
implement ;-) and I think matches intuitive expectations.

(9) Have I totally misunderstood something?

  - Michael

Received on Sunday, 2 February 2003 12:15:02 UTC