- From: Christian Geuer-Pollmann <geuer-pollmann@nue.et-inf.uni-siegen.de>
- Date: Sun, 17 Mar 2002 20:26:32 +0100
- To: John Boyer <JBoyer@PureEdge.com>, Gregor Karlinger <gregor.karlinger@iaik.at>, merlin <merlin@baltimore.ie>
- Cc: TAMURA Kent <kent@trl.ibm.co.jp>, w3c-ietf-xmldsig@w3.org, reagle@w3.org
Hi John, from what I understood from your mails is that you need a transform which allows to easily iterate (tree-traversal) over a structure like a DOM tree without evaluating an costly XPath expression against every node in the XPath node set. First of all, if the document [1] should become stable in it's current processing model, I would add a comment that this transform only makes sense as a first Transform after dereferencing a nodeset or after transforms which produced an octet stream which is reparsed. Why? Because if I e.g. have an XMLDSIG 1.0 XPath transform prior the new XPath filter, the results of the original transform are discarded. But now to my approach: For me, it's not that clear how to use a sequence chain of multiple http://www.w3.org/2002/02/xmldsig-xpath-filter transforms to select the correct subset. But anyhow, I recently solved a similar problem and I thing that my solution would work in an alternative form of your filter. Let's discuss the example in terms of DOM, even if the input is an XPath node set.: We 'label' the tree with three different labels: 1.) The "dont-include-any-descendant-or-self" label 2.) The "include-descendant-or-self-and-search-forward" label 3.) The "dont-include-self-but-search-forward" label Let's take Gregor's example to show how this transform works: The input document is: <root> <child1> <grandChild1/> <grandChild2/> </child1> <child2> <grandChild1/> <grandChild2/> </child2> </root> And I want to get as output of the transform <child1> <grandChild1/> </child1> Which means all descendant-or-selfs of child1 but not it's grandchild2: <Transform URI="http://www.w3.org/2002/03/xmldsig-the-next-alternative-xpath"> <!-- don't output / but descend - you maybe find subtrees to be outputted --> <XPath Filter="dont-include-self-but-search-forward"> / </XPath> <!-- We output the subtree under child1 but maybe something inside this subtree is omitted --> <XPath Filter="include-descendant-or-self-and-search-forward"> /root/child1[1] </XPath> <!-- don't output grandchild2 and don't descend - you won't find subtrees to be outputted --> <XPath Filter="dont-include-any-descendant-or-self"> /root/child1[1]/grandchild2 </XPath> </Transform> Does this makes sense to you? You can do the same optimizations: You only evaluate 3 XPath expressions, you make a simple tree traversal and you don't descend into subtrees which only contain unselected information. Regards, Christian [1] http://www.w3.org/Signature/Drafts/xmldsig-xpath
Received on Sunday, 17 March 2002 14:22:23 UTC