[closed] Re: (still few) troubles with p:namespaces

"Innovimax SARL" <innovimax@gmail.com> writes:

> I have still trouble to fully understand the code fragment provided as
> sample in the spec
>
> Especially this one
>
> [[
> <p:pipeline type="ex:delete-in-div"
>             xmlns:p="http://www.w3.org/ns/xproc"
>             xmlns:ex="http://example.org/ns/ex"
>             xmlns:h="http://www.w3.org/1999/xhtml">
> <p:option name="divchild" required="true"/>
>
> <p:delete>
>   <p:with-option name="match" select="concat('h:div/',$divchild)">
>     <p:namespaces xmlns:h="http://www.w3.org/1999/xhtml"
>                   xmlns:html="http://www.w3.org/1999/xhtml"/>
>   </p:with-option>
> </p:delete>
>
> </p:pipeline>
> ]]
>
> In my understanding, the binding of the prefix "h" has been done on
> p:pipeline element, so we don't need to recall the binding on
> p:namespaces element, do we ?

No, I suppose not, since it's already in-scope. But it's not wrong
to put it there and it does make the intent explicit. Still, it might
mislead someone into thinking that p:namespaces uses only the *declared*
namespaces not the in-scope ones, so I'll remove xmlns:h.

> Furthermore again by the same rule ("Otherwise, the in-scope
> namespaces from the element providing the value are used."), we can
> completely get rid of p:namespaces in this case
>
> <p:delete>
>   <p:with-option name="match" select="concat('h:div/',$divchild)"
> xmlns:html="http://www.w3.org/1999/xhtml"/>
> </p:delete>
>
> Am I right ?

Yes, you could do that. This example is really just a setup ("here's
how you *could* do it") for the next example ("here's how you *should*
do it").

On further reflection, I'm happy with these examples as they stand.
However, I'll add a note to point out that it's not strictly
necessary.

> Hence we got also
> [[
> <?xml version='1.0'?>
> <p:pipeline type="ex:delete-in-div"
> xmlns:p="http://www.w3.org/ns/xproc"
> xmlns:ex="http://example.org/ns/ex"
> xmlns:h="http://www.w3.org/1999/xhtml">
> <p:option name="divchild" required="true"/>
>
> <p:delete>
>   <p:with-option name="match" select="concat('h:div/',$divchild)">
>     <p:namespaces binding="divchild"/><!-- this one makes full sense for me -->

Here you *do* need the second p:namespaces element with the xmlns:h binding.
Otherwise you won't have one because:

   If a p:variable, p:with-option or p:with-param includes one or more
   p:namespaces elements, then the union of all the namespaces
   specified on those elements are used as the bindings for the
   variable, option or parameter value. In this case, the in-scope
   namespaces on the p:variable, p:with-option or p:with-param are
   ignored.

and 

   If the binding attribute is specified, it must contain the name of a
   single in-scope binding. The namespace bindings associated with that
   binding are used.

Since divchild is specified in a context where xmlns:h isn't bound, it wouldn't
otherwise be bound.

>   </p:with-option>
> </p:delete>
>
> </p:pipeline>
> ]]

I've made a few editorial corrections, please let us know if you're
unsatisfied with the result.

                                        Be seeing you,
                                          norm

-- 
Norman Walsh <ndw@nwalsh.com> | The richness of life lies in memories
http://nwalsh.com/            | we have forgotten.--Cesare Pavese

Received on Wednesday, 17 September 2008 11:16:22 UTC