- From: Michael Kay <mhk@mhk.me.uk>
- Date: Sat, 10 Dec 2005 00:15:59 -0000
- To: "'Sergio Andreozzi'" <sergio.andreozzi@cnaf.infn.it>, <www-ql@w3.org>
I assume you've got the answer you wanted over on talk@xquery.com, which is proving a rather more useful forum for such questions. Michael Kay > -----Original Message----- > From: www-ql-request@w3.org [mailto:www-ql-request@w3.org] On > Behalf Of Sergio Andreozzi > Sent: 07 December 2005 16:40 > To: www-ql@w3.org > Subject: grouping by closest ancestor > > > Dear all, > > I'm facing a problem in XQuery/XPath. I would like to ask you for some > advice. Please, consider the following XML document: > > <?xml version="1.0" encoding="UTF-8"?> > <S> > <A> > <B> > <F>4</F> > <C> > <D>3</D> > <E>5</E> > <G> > <H>3</H> > </G> > <G> > <H>2</H> > </G> > </C> > </B> > <B> > <F>2</F> > <C> > <E>2</E> > <G> > <H>5</H> > </G> > <G> > <H>4</H> > </G> > </C> > <C> > <D>7</D> > <E>2</E> > </C> > </B> > </A> > <A> > <B> > <F>3</F> > <C> > <D>3</D> > <E>2</E> > </C> > <C> > <D>5</D> > <E>2</E> > </C> > </B> > </A> > <A> > <B> > <F>2</F> > <C> > <D>5</D> > <E>2</E> > </C> > </B> > </A> > </S> > > given a for clause like this: for $A in doc ("doc.xml")/S/A > as an example, I would like to work on the result of the > following XPath > expressions: > > $A/B/F ... > $A/B/C/D ... > $A/B/C/E ... > $A/B/C/G/H ... > > but I need to have the results reorganized in such a way that I can > create groups based on the closest common ancestor (per each pair of > elements) as follows: > > first A element, the XPath queries return: > > $A/B/F = (4,2) > $A/B/C/D = (3,7) > $A/B/C/E = (5,2,2) > $A/B/C/G/H = (3,2,5,4) > > a possible refatctoring of the result is ( _ can be replaced with 0 ): > > $A/B/F = (4,4,2,2,2) > $A/B/C/D = (3,3,_,_,7) > $A/B/C/E = (5,5,5,5,2) > $A/B/C/G/H = (3,2,5,4,_) > > In this result, considering each column, every pair of values > refers to > the elements which have the closest ancestor (among all the elements > with the same QName part of the XPath sequence result). For instance: > > col 1, row 1: F=4 > col 1, row 4: H=3 > > they have the first B element as closest ancestor. Conversely, in the > generated result, I don't have H=3 coupled with F=2 as they have A as > closest ancestor. A is farer than the common ancestor between H=3 and > F=4 (the first B). > > The idea is to generate all the possible tuples (read by column in my > proposal), one value for each element, but valid tuples are > those which > have the closest ancestor (considering elements in pair). > Missing values > can be filled with 0. > > In the remaining part you can find refactoring of the result for the > other A elements: > > first A element, the XPath queries return: > > $A/B/F = (3) > $A/B/C/D = (3,5) > $A/B/C/E = (2,2) > > I would like something like this: > > $A/B/F = (3,3) > $A/B/C/D = (3,5) > $A/B/C/E = (2,2) > > first A element, the XPath queries return: > > $A/B/F = (2) > $A/B/C/D = (5) > $A/B/C/E = (2) > > that's fine. > > I would appreciate any suggestion or guidelines on how to generate the > results constrained as explained above. I hope that the problem > description is enough clear, otherwise I can provide more details. > > Regards, Sergio > > >
Received on Saturday, 10 December 2005 00:16:36 UTC