Hi

 

I am trying to match records from two different documents. Match key consists of two parts, so I simply build up a string from first and second match key and separate it by a hypen

 

Here are source documents

Events.xml

<EVENTS>

    <MSG id="{e8e85fdd-04d8-43ea-8090-e72337c3a30d}" location="Prague" event="Christmass"/>

    <MSG id="{7c94b2fc-b97c-4c09-b694-9993bfb2b93c}" location="Bratislava" event="Easterns"/>

    <MSG id="{bdbb11da-2c92-425d-9bf5-87c1e96e1bd4}" location="Berlin" event="Berlinale"/>

</EVENTS>

 


Reports.xml

<REPORTS>

    <MSG id="{abcd}" location="Prague" event="Christmass"/>

    <MSG id="{efgh}" location="Bratislava" event="Easterns"/>

    <MSG id="{ijkl}" location="Paris" event="FassionFest"/>

    <MSG id="{mnqr}" location="Moscow" event="BalletFestival"/>

</REPORTS>

 

I am trying to find for each report all events, which are having the same location and event attributes

 

So I build intermediate variables, containing pre-calculated keys

And finally I try to find related events

 

match.xq

(: Construct matching keys for events :)

let $event-msg-keys :=

    (for $event in /EVENTS/MSG

    return

    <EVENT-MSG id="{$event/@id}" key="{concat($event/@location, '-', $event/@event)}"/>

    )

 

(: Construct matching keys for reports :)

 

let $report-msg-keys :=

    (for $report in /REPORTS/MSG

    return

    <REPORT-MSG id="{$report/@id}" key="{concat($report/@location, '-', $report/@event)}"/>

    )

 

(: Find all events, related to each report:)

for $report-msg in $report-msg-keys

let $report-msg-id := $report-msg/@id

let $report-msg-key := $report-msg/@key

 

let $related-events :=

    (for $event-msg in $event-msg-keys

     where $event-msg/@key = $report-msg-key

    return $event-msg)

 

return

<REPORT-MSG id="{$report-msg-id}" key="{$report-msg-key}">

  <RELATED-EVENTS>{$related-events}</RELATED-EVENTS></REPORT-MSG>

 

However, resulting dokument does not show any related events

<REPORT-MSG id="{abcd}" key="Prague-Christmass">

  <RELATED-EVENTS/>

</REPORT-MSG>

<REPORT-MSG id="{efgh}" key="Bratislava-Easterns">

  <RELATED-EVENTS/>

</REPORT-MSG>

<REPORT-MSG id="{ijkl}" key="Paris-FassionFest">

  <RELATED-EVENTS/>

</REPORT-MSG>

<REPORT-MSG id="{mnqr}" key="Moscow-BalletFestival">

  <RELATED-EVENTS/>

</REPORT-MSG>

 

Versions of BaseX

All the time I worked with GUI
  1. I started testing on BaseX 6.3.4
  2. I used a bit more complex data and query
  3. After failing I tried on 6.3.1
  4. There I was unable to open the collection with complains about Index out of bound Java error
  5. Then I dropped the database and created it again. Trying to run the XQuery I got the same error.
  6. returned back to 6.3.4
  7. rewrote it to shorted sample, shown above
I wonder, what I am doing wrong. Any advice?

With best regards

Jan Vlčinský