Ошибка операции присоединения в Xquery

Пример моей базы данных XML выглядит следующим образом:

<releases>
<release id="1" status="Accepted">
    <artists>
      <artist>
        <id>1</id><name>Persuader, The</name><anv></anv><join></join><role></role><tracks></tracks></artist></artists><title>Stockholm</title><labels>
      <label catno="SK032" name="Svek"></label></labels><extraartists>
      <artist>
        <id>239</id><name>Jesper Dahlbäck</name><anv></anv><join></join><role>Music By [All Tracks By]</role><tracks></tracks></artist></extraartists><formats>
      <format name="Vinyl" qty="2" text="">
        <descriptions>
          <description>12"</description><description>33 ⅓ RPM</description></descriptions></format></formats><genres>
      <genre>Electronic</genre></genres><styles>
      <style>Deep House</style></styles><country>Sweden</country><released>1999-03-00</released><notes>The song titles are the names of Stockholm's districts.</notes><master_id>5427</master_id><data_quality>Complete and Correct</data_quality><tracklist>
      <track>
        <position>A</position><title>Östermalm</title><duration>4:45</duration></track><track>
        <position>B1</position><title>Vasastaden</title><duration>6:11</duration></track><track>
        <position>B2</position><title>Kungsholmen</title><duration>2:49</duration></track><track>
        <position>C1</position><title>Södermalm</title><duration>5:38</duration></track><track>
        <position>C2</position><title>Norrmalm</title><duration>4:52</duration></track><track>
        <position>D</position><title>Gamla Stan</title><duration>5:16</duration></track></tracklist><identifiers>
      <identifier description="A-Side" type="Matrix / Runout" value="MPO SK 032 A1 G PHRUPMASTERGENERAL T27 LONDON"></identifier><identifier description="B-Side" type="Matrix / Runout" value="MPO SK 032 B1"></identifier><identifier description="C-Side" type="Matrix / Runout" value="MPO SK 032 C1"></identifier><identifier description="D-Side" type="Matrix / Runout" value="MPO SK 032 D1"></identifier></identifiers><videos>
      <video duration="290" embed="true" src="http://www.youtube.com/watch?v=AHuQWcylaU4">
        <title>The Persuader (Jesper Dahlbäck) - Östermalm</title><description>The Persuader (Jesper Dahlbäck) - Östermalm</description></video><video duration="380" embed="true" src="http://www.youtube.com/watch?v=5rA8CTKKEP4">
        <title>The Persuader - Vasastaden</title><description>The Persuader - Vasastaden</description></video><video duration="335" embed="true" src="http://www.youtube.com/watch?v=QVdDhOnoR8k">
        <title>The Persuader-Stockholm-Sodermalm</title><description>The Persuader-Stockholm-Sodermalm</description></video><video duration="289" embed="true" src="http://www.youtube.com/watch?v=hy47qgyJeG0">
        <title>The Persuader - Norrmalm</title><description>The Persuader - Norrmalm</description></video></videos><companies>
      <company>
        <id>271046</id><name>The Globe Studios</name><catno></catno><entity_type>23</entity_type><entity_type_name>Recorded At</entity_type_name><resource_url>http://api.discogs.com/labels/271046</resource_url></company><company>
        <id>56025</id><name>MPO</name><catno></catno><entity_type>17</entity_type><entity_type_name>Pressed By</entity_type_name><resource_url>http://api.discogs.com/labels/56025</resource_url></company></companies></release><release id="2" status="Accepted">
    <artists>
      <artist>
        <id>2</id><name>Mr. James Barth &amp; A.D.</name><anv></anv><join></join><role></role><tracks></tracks></artist></artists><title>Knockin' Boots Vol 2 Of 2</title><labels>
      <label catno="SK 026" name="Svek"></label><label catno="SK026" name="Svek"></label></labels><extraartists>
      <artist>
        <id>26</id><name>Alexi Delano</name><anv></anv><join></join><role>Producer, Recorded By</role><tracks></tracks></artist><artist>
        <id>27</id><name>Cari Lekebusch</name><anv></anv><join></join><role>Producer, Recorded By</role><tracks></tracks></artist><artist>
        <id>26</id><name>Alexi Delano</name><anv>A. Delano</anv><join></join><role>Written-By</role><tracks></tracks></artist><artist>
        <id>27</id><name>Cari Lekebusch</name><anv>C. Lekebusch</anv><join></join><role>Written-By</role><tracks></tracks></artist></extraartists><formats>
      <format name="Vinyl" qty="1" text="">
        <descriptions>
          <description>12"</description><description>33 ⅓ RPM</description></descriptions></format></formats><genres>
      <genre>Electronic</genre></genres><styles>
      <style>Broken Beat</style><style>Techno</style><style>Tech House</style></styles><country>Sweden</country><released>1998-06-00</released><notes>All joints recorded in NYC (Dec.97).</notes><master_id>713738</master_id><data_quality>Correct</data_quality><tracklist>
      <track>
        <position>A1</position><title>A Sea Apart</title><duration>5:08</duration></track><track>
        <position>A2</position><title>Dutchmaster</title><duration>4:21</duration></track><track>
        <position>B1</position><title>Inner City Lullaby</title><duration>4:22</duration></track><track>
        <position>B2</position><title>Yeah Kid!</title><duration>4:46</duration></track></tracklist><identifiers>
      <identifier description="Side A Runout Etching" type="Matrix / Runout" value="MPO SK026-A -J.T.S.-"></identifier><identifier description="Side B Runout Etching" type="Matrix / Runout" value="MPO SK026-B -J.T.S.-"></identifier></identifiers><videos>
      <video duration="365" embed="true" src="http://www.youtube.com/watch?v=MXqC4-ei_zE">
        <title>Mr. james Barth &amp; Alexi Delano</title><description>Mr. james Barth &amp; Alexi Delano</description></video><video duration="260" embed="true" src="http://www.youtube.com/watch?v=FWkM_3MQKZk">
        <title>'Dutchmaster' - Mr. James Barth &amp; A.D. (knockin' boots vol 2)</title><description>'Dutchmaster' - Mr. James Barth &amp; A.D. (knockin' boots vol 2)</description></video></videos><companies>
      <company>
        <id>266169</id><name>JTS Studios</name><catno></catno><entity_type>29</entity_type><entity_type_name>Mastered At</entity_type_name><resource_url>http://api.discogs.com/labels/266169</resource_url></company><company>
        <id>56025</id><name>MPO</name><catno></catno><entity_type>17</entity_type><entity_type_name>Pressed By</entity_type_name><resource_url>http://api.discogs.com/labels/56025</resource_url></company></companies></release></releases>

Я пытаюсь получить список заголовков, где заголовок совпадает с релизом/исполнителями/исполнителем/имя, используя XQuery. Я пытаюсь использовать следующий код:

let $r := db:open("releases1","releases.xml") return
for $b in $r/releases/release
let $a := 
          for $t in $r/releases/release/artists
          where $t/artist/name/text() = $b/title/text()
          return $t
 return $b/title

Однако я получаю неправильные результаты. Что я делаю неправильно

Результат выглядит следующим образом:

<title>Stockholm</title>
<title>Knockin' Boots Vol 2 Of 2</title>
<title>Profound Sounds Vol. 1</title>
<title>Moving Cities</title>
<title>Flowerhead</title>
<title>Knockin' Boots (Vol 1 Of 2)</title>
<title>Moonchildren EP</title>.......50,000

Я получаю 50 000/50 000 результатов. Это невозможно. «Стокгольм» — это название всего вышеперечисленного. Однако имена художников не совпадают. Эти результаты не должны быть включены.


person Community    schedule 25.07.2015    source источник
comment
Пожалуйста, ознакомьтесь с разделами Как спросить и как опубликовать SSCCE. Каков результат, который вы получаете, и особенно каков ожидаемый результат? Если возникает реальная ошибка, какое сообщение об ошибке?   -  person Jens Erat    schedule 26.07.2015
comment
Пожалуйста, добавьте пример вывода в свой вопрос (путем его редактирования) как для того, что вы получаете в настоящее время, так и для того, что вы хотите иметь. Это очень важная часть таких вопросов, чтобы избежать путаницы и длительной болтовни о том, чего именно вы хотите достичь.   -  person Jens Erat    schedule 26.07.2015
comment
Я действительно не понимаю, что вы хотите сделать. Вы предложили довольно небольшой образец вашей базы данных. Составление ожидаемого вывода, соответствующего входным данным этого примера, должно быть тривиальной задачей (поскольку вы знаете, что вы хотите получить), которую вы можете выполнить за минуту или две, но, скорее всего, это будет очень четкая задача. определение и объяснение того, чего вы пытаетесь достичь. Я тоже не понимаю вашего вопроса. Почему вы вычисляете $a, если больше никогда его не используете? Возможно ли, что вы просто хотите иметь return $a в последней строке?   -  person Jens Erat    schedule 26.07.2015
comment
Да ты прав. Наконец-то я понял, где ошибся. Спасибо за вашу помощь и очень извините за отсутствие ясности   -  person    schedule 26.07.2015


Ответы (1)


Не было необходимости встраивать выражение FLWOR в другое.

for $t in db:open("releases1","releases.xml")/releases/release/artists
      where $t/artist/name = $t/../title
      return $t
person Community    schedule 25.07.2015
comment
В этом случае выражение FLWOR вообще не нужно: db:open("releases1","releases.xml")/releases/release/artists[artist/name = ../title]. Но я не уверен, что это эквивалентно оригиналу. - person Michael Kay; 26.07.2015
comment
Истинный. Я просто хотел эквивалент Xquery. Также иногда. В полном наборе данных есть несколько художников. Даже если имя одного исполнителя соответствует названию, оно должно отображаться в результатах. - person ; 26.07.2015
comment
Кроме того, использование text() здесь потенциально вредно... (он может делать то, что вы хотите, но в этом случае вы хотите сравнивать элементы по их строковым значениям, как это сделал Майк). И оба являются XQuery, один не является эквивалентом XQuery. - person Florent Georges; 26.07.2015