[xmlsec] inconsistent XPath: xmlsec vs apache.org's xml-security

Daniel Veillard veillard at redhat.com
Tue Jan 4 09:57:56 PST 2005

On Tue, Jan 04, 2005 at 09:35:50AM -0800, Aleksey Sanin wrote:
> - Third Signature element has Reference with the following XPath2
> transform:
>   intersect: here()/ancestor::frog:compliance[1]
>   subtract: here()/ancestor::frog:compliance[1]/child::ds:Signature
> This selects the <compliance> element from the document and
> then removes the *third Signature* element only (see attached third.xml
> file, formatting is added to make it readable) and I think you expect
> it to remove *all Signature* elements from the document.
> I believe, that this behaiviour is related to "here()" function. And we 
> need Daniel to say if this is correct or not. Daniel, what should the
> following XPath query return
>    here()/ancestor::frog:compliance[1]/child::ds:Signature
> 1) Only the current (from here() context) Signature element
> 2) All the Signature elements under <frog:compliance> element

  I'm don't think I grasp the example fully, but I would expect
here() to return a nodeset with a single element, so 
should also contain a single element (as it is selecting the first
node in the node set of the frog:compliance ancestors).
And then here()/ancestor::frog:compliance[1]/child::ds:Signature should
select all the ds:Signature children from that frog:compliance node, 
and I think there is only one such child in this case.
  here() in xmlsec is if I remember correctly related to the here()
we defined in XPointer which means the node carrying the XPointer expression,
and in that case that would be the node carrying the 
XPath string.


Daniel Veillard      | Red Hat Desktop team http://redhat.com/
veillard at redhat.com  | libxml GNOME XML XSLT toolkit  http://xmlsoft.org/
http://veillard.com/ | Rpmfind RPM search engine http://rpmfind.net/

More information about the xmlsec mailing list