- From: Norman Walsh <ndw@nwalsh.com>
- Date: Mon, 14 May 2007 16:17:59 -0400
- To: public-xml-processing-model-wg@w3.org
- Message-ID: <87fy5ztb0o.fsf@nwalsh.com>
/ Jeni Tennison <jeni@jenitennison.com> was heard to say: | Norman Walsh wrote: |> / Jeni Tennison <jeni@jenitennison.com> was heard to say: |> | (1) I don't understand the difference between the context position |> | (exposed through position()), $p:position and $p:stepname_index. When |> | does $p:stepname_index differ from $p:position? |> |> Does this example help? |> |> http://lists.w3.org/Archives/Public/public-xml-processing-model-wg/2007May/0156.html | | I had looked at that, and didn't understand that before I didn't | understand the wording in the spec. I also note that your explanation | seems to be different from Mohamed's, which makes me think that | there's a certain amount of confusion over these variables. Perhaps. |> In brief, what's exposed to the steps inside a for-each or viewport |> isn't a sequence. Instead, the for-each feeds each each document in a |> sequence that *it* receives to the inner steps, one document at a time. |> |> So (directly) inside a for-each, the $p:position is always 1. There's |> never a "second" document because it's not a sequence. | | If $p:position is always 1, why have $p:position? Position is always 1 in for-each and viewport because they're odd cases. Consider this example instead: <p:matching-documents> <p:input port="source"> <p:inline> <odd/> </p:inline> <p:inline> <even/> </p:inline> <p:inline> <odd/> </p:inline> <p:inline> <even/> </p:inline> <p:inline> <odd/> </p:inline> </p:input> <p:option name="test" value="$p:position mod 2 = 1"/> </p:matching-documents> It returns all the "<odd/>" documents. I think this example also illustrates why it would be a mistake to overload XPath's built-in position() function. A complex expression might use position() in a more natural context and it would be confusing (though I grant not explicitly illegal) to have position() used in two different ways in the same expression. |> Compare that with $p:stepname_index which counts the interations of |> the for-each or viewport loop. | | If you reference the index of a for-each nested within a for-each, | does $p:stepname_index give the total number of iterations, or does it | reset to 1 when the outer for-each moves on to its next document? I believe it should reset to 1 each time. |> I suppose we *could* use position() but I think it would be wrong. | | I strongly disagree. XPath has the concept of an environment which I still think it would be wrong. Not only for the reason I gave just above but also because it might encourage people to believe that they could use last() and the streaming folks explicitly don't want to have to support that. |> | Finally, I observe that, should we want to, we can define functions |> | that degrade elegantly when used out of context, whereas variable |> | references that refer to variables that don't exist will always raise |> | an error. |> |> I worked around that editorially by making sure that these variables |> always have a value. | | Doesn't that mean that implementations have to parse XPaths to know | what variable bindings to supply to the XPath engines they're using? Uhm. I just supply all the ones that could be referenced. There are only n+2 of them, where n is the depth of nesting of compound steps. | Yes, that explains why the $myval variable reference doesn't get | replaced when the XSLT stylesheet is constructed, but the comparison I | was making was with: | | <p:option name="replace" value="$myval" /> | | Again, option values are considered "quoted": if you want to set them | dynamically you use the select attribute rather than the value | attribute. I don't think that's quite right. You use select if you want to calculate their value dynamically. That's independent of how the *step* actually uses the value. | However, in both cases we have a decision to make about which | variables are bound in the environment in which the stylesheet or | XPath is evaluated. Indeed. Be seeing you, norm -- Norman Walsh <ndw@nwalsh.com> | The Future Begins Tomorrow!--Yoyodyne http://nwalsh.com/ | Propulsion Systems
Received on Monday, 14 May 2007 20:18:11 UTC