[xquery-talk] distance between elements and hierarchical order
Charles Brooking
charles.brooking at research.canon.com.au
Fri Dec 9 11:01:13 PST 2005
Wolfgang Hoschek wrote:
> Both can probably be solved by walking the ancestor axis of the
> elements towards the root.
> For 2) find the nearest common ancestor, and add up the steps.
People can possibly correct me on this, but:
let $a :=
element a
{
attribute id {"1"},
element b
{
attribute id {"1-1"},
element c {attribute id {"1-1-1"}},
element c {attribute id {"1-1-2"}}
},
element b
{
attribute id {"1-2"},
element c {attribute id {"1-2-1"}},
element c {attribute id {"1-2-2"}}
}
}
let
$x := $a[@id="1"]/b[@id="1-1"]/c[@id="1-1-1"],
$y := $a[@id="1"]/b[@id="1-2"]/c[@id="1-2-2"]
let $possible-distances :=
let
$x-ancestors := $x/ancestor-or-self::element(),
$y-ancestors := $y/ancestor-or-self::element()
for
$x-ancestor at $x-ancestor-position in $x-ancestors,
$y-ancestor at $y-ancestor-position in $y-ancestors
where
$x-ancestor is $y-ancestor
return
count($x-ancestors) - $x-ancestor-position +
count($y-ancestors) - $y-ancestor-position
return
min($possible-distances)
Now a question:
If I had the following as one of the for-clauses:
$x-ancestor at $x-ancestor-position in $x/ancestor-or-self::element()
would $x itself (always) be at position 1, or should it be last?
Later
Charlie
--
Charles Brooking
Associate Software Engineer
Canon Information Systems Research Australia
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://xquery.com/pipermail/talk/attachments/20051209/ef0b7409/attachment.htm
More information about the talk
mailing list