[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 one

James A. Robinson jim.robinson at stanford.edu
Fri Jan 12 20:52:10 PST 2007


  Xquery+ reduce two docs into one
 
> 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!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2007 All Rights Reserved.