|
[XQuery Talk Mailing List Archive Home] [By Date] [By Thread] [By Subject] [By Author] [Recent Entries] [Reply To This Message] Xquery+ reduce two docs into oneJames A. Robinson jim.robinson at stanford.eduFri Jan 12 20:52:10 PST 2007
> Actually I am very sorry, if it was not so clear what I wanted to > achieve with my query. Maybe it was a big mistake not to post the > whole docs. Ah, ok. Yes, I totally misunderstood what you wanted. As before, David provided a very concise solution (which reproduces exactly what you posted). Trying to work in the new logic with my previous example, I modified it thusly (and found myself missing XSLT key and for-each-group functionality): declare namespace f="uri.local-functions"; (: simulate a DB where we have a collection() function and indicies :) declare function f:collection() { (doc("sebi-1.xml"), doc("sebi-2.xml")) }; (: input meta set :) let $metadata := f:collection()/*/meta (: for each file referenced across all docs, build indiv :) let $indiv := ( for $f in distinct-values($metadata/FileName) return ( let $m := $metadata[FileName = $f] where (count($m) = count(f:collection())) return ( <meta>{ for $v in $m/*[not(self::FileName)] order by xs:integer(substring(local-name($v), 6)) return ( $v ), <FileName>{$f}</FileName>}</meta> ) ) ) (: merge indiv by key constructed from Value data (I want xsl keys!) :) let $merged := ( for $key in distinct-values( for $m in $indiv return string-join($m/*[not(self::FileName)], ':') ) return ( let $set := $indiv[$key = string-join(./*[not(self::FileName)], ':')] return <meta>{$set[1]/*[not(self::FileName)], $set/FileName}</meta> ) ) (: return merged sets sorted by first FileName in merged :) return ( <FF>{ for $meta in $merged order by xs:integer(substring(xs:string($meta/FileName[1]), 5)) return $meta }</FF> ) Produces: <FF> <meta> <Value1>7.90mm</Value1> <Value2>4.0</Value2> <FileName>file1</FileName> </meta> <meta> <Value1>5.7mm</Value1> <Value2>4.9</Value2> <FileName>file2</FileName> </meta> <meta> <Value1>6.0mm</Value1> <Value2>4.9</Value2> <FileName>file3</FileName> </meta> <meta> <Value1>5.7mm</Value1> <Value2>2.9</Value2> <FileName>file4</FileName> <FileName>file5</FileName> </meta> <meta> <Value1>6.13mm</Value1> <Value2>5.6</Value2> <FileName>file6</FileName> </meta> <meta> <Value1>7.90mm</Value1> <Value2>2.8</Value2> <FileName>file7</FileName> <FileName>file8</FileName> <FileName>file9</FileName> <FileName>file14</FileName> <FileName>file15</FileName> <FileName>file16</FileName> <FileName>file17</FileName> <FileName>file18</FileName> <FileName>file19</FileName> </meta> <meta> <Value1>10.0mm</Value1> <Value2>4.0</Value2> <FileName>file10</FileName> </meta> <meta> <Value1>70.0mm</Value1> <Value2>8.0</Value2> <FileName>file11</FileName> </meta> <meta> <Value1>55.0mm</Value1> <Value2>6.3</Value2> <FileName>file12</FileName> </meta> <meta> <Value1>12.0mm</Value1> <Value2>16.0</Value2> <FileName>file13</FileName> </meta> </FF> Jim - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - James A. Robinson http://x-query.com/mailman/listinfo/talk Stanford University HighWire Press http://highwire.stanford.edu/ +1 650 7237294 (Work) +1 650 7259335 (Fax)
|
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
|






