[Bug 5400] Clarification of deref() needed

http://www.w3.org/Bugs/Public/show_bug.cgi?id=5400


kumarp@microsoft.com changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|editorial                   |needsReview




------- Comment #3 from kumarp@microsoft.com  2008-02-01 06:16 -------
Please review the changes made to section 4.2.6 deref() XPath Extension
Function. Bulleted lists are hard to see properly in bug history. It may be
easier to review the changes by looking at the spec.

------------
4.2.6 deref() XPath Extension Function
Each SML processor MUST provide an implementation of the deref() XPath
extension function. This function takes a node set of elements and returns a
node set consisting of element nodes corresponding to the elements referenced
by the input node set.  In particular, for each SML reference R in the input
node set the output node set contains at most one element node.

Let, I = input node set. That is, the set of nodes passed to deref() function.

Let, O = output node set. That is, the set of nodes returned by deref()
function.

The behavior of deref() function MUST satisfy the following constraints:

For each SML reference R in the input node set I:

If the implementation recognizes no SML reference scheme used in the SML
reference R, then no element is added to O.

If the implementation recognizes R as using N supported reference schemes, then
deref() is not required to attempt to resolve all N schemes. Its behavior in
this case is implementation-defined and the set of reference schemes that are
actually attempted may be any subset of the recognized schemes. This is subject
to the following constraints:

If deref() doesn't attempt to resolve any reference scheme or if none of the
attempted reference schemes resolves, then no element is added to O.

If at least one of the attempted reference schemes resolves to more than one
target element, then 0 or 1 of the targets is added to O.

If one attempted reference scheme resolves to a target different from the
target resolved by another attempted reference scheme, then 0 or 1 of the
targets is added to O.

If one attempted reference scheme resolves and another doesn't, then 0 or 1 of
the targets is added to O.

If none of the above is true (that is, all attempted reference schemes resolve
to the same one and only one target element, call it T), then one target
element (namely, T) is added to O, if it does not already exist in O.

Received on Friday, 1 February 2008 06:16:29 UTC