[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] RE: Cartesian product of sets of nodes
Hi, I thought that the question was syntetic, but clear, and no example was needed, sorry for misunderstanding. In the input xml we've hotels with available rooms in respone to a search criteria from the user, for example for "1 room for 2 people and 1 room for 3 people" one may obtain: <h> <r type="double"/> <!-- 2 people onebed--> <r type="twin"/> <!-- 2 people separated beds--> <r type="triple/> <!-- 3 people --> </h> In this format the rooms amog which one can choose are all together, one can choose between the two combinations: <r type="double"/> <!-- 2 people --> <r type="triple/> <!-- 3 people --> <r type="twin"/> <!-- 2 people --> <r type="triple/> <!-- 3 people --> In the output xml we need to have only the combinations that fits exactly the user request, so something like <h> <r type="double"/> <!-- 2 people --> <r type="triple/> <!-- 3 people --> </h> <h> <r type="twin"/> <!-- 2 people --> <r type="triple/> <!-- 3 people --> </h> So my idea is to group the rooms by number of people and then do all the combinations of elements from each group, i.e. something like a cartesian product. I think that we can group the nodes fragmets in a variable $s[1] --> "<r type="double"/> <!-- 2 people --> <r type="twin"/> <!-- 2 people -->" $s[2] --><r type="triple/> <!-- 3 people --> then use a recursive template like this <template name="combine-rooms"> <param name="rooms"> <for-each select="rooms[1]/room"> <!-- tranlate the single room and output --> <!-- obtain trailing rooms xml fragments, simples version:--> <value-of select="rooms[1]/room"/> <if test="count(rooms)>1"> <variable name="etc-rooms" select="for $x in 2 to last(rooms) return rooms[$x]"/> <call-template name="combine-rooms"> <with-param name="rooms" select="$etc-rooms"> </call-template> </if> </for-each> </funtion> What do you think about this? Many thanks Bye Il giorno ven, 28/08/2009 alle 18.42 +0100, Michael Kay ha scritto: > > Hi, > > > > we've a variable number of sets of nodes of variable > > carindinality grouped from incoming xml, > > > > S1, S2, S3, ... Sn > > > > is there a way of obtaining the cartesian product > > > > S1 x S2 x S3 x S4 x... Sn > > > > I think it would be useful to explain what you mean by showing the XML input > and the desired XML output. > > My understanding is that "cartesian product" has a mathematical meaning, and > a conventional usage when talking about the relational model, and they > aren't the same. One doesn't see the term used much in relation to XML. In > particular, I'm not sure how you would represent a "variable number of sets > of nodes" in the XPath data model, unless the nodes all happen to be in the > same tree. > > Regards, > > Michael Kay > http://www.saxonica.com/ > http://twitter.com/michaelhkay > -- Bartolomeo Nicolotti SIAP s.r.l. www.siapcn.it v.S.Albano 13 12049 TrinitC (CN) Italy ph:+39 0172 652553 centralino: +39 0172 652511 fax: +39 0172 652519
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|