2015-05-21 3 views
1

Как можно понять из вопроса, который:Как отменить возврат в xquery?

Retrieve a nonredundant list of dancer ids and names of those dancers who 
took part in the Auckland 2008 competition. Sort by @dancer_id. The output 
of your query should conform to the following DTD: 
<!ELEMENT Auckland_2008_Dancers (she_dancers, 
he_dancers)> 
<!ELEMENT she_dancers (Dancer)+> 
<!ELEMENT Dancer EMPTY> 
<!ATTLIST Dancer id CDATA #REQUIRED name CDATA #REQUIRED> 
<!ELEMENT he_dancers (Dancer)+> 

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

<Auckland_2008_Dancers> 
       <she_dancers> 
        <Dancer id="d6006" name="Sally Ann"/> 
       </she_dancers> 
       <she_dancers> 
        <Dancer id="d5005" name="Mimi"/> 
       </she_dancers> 
       <she_dancers> 
        <Dancer id="d1001" name="Anny"/> 
       </she_dancers> 
       <he_dancers> 
        <Dancer id="d9009" name="Gordon"/> 
       </he_dancers> 
       <he_dancers> 
        <Dancer id="d9008" name="Dimitrij"/> 
       </he_dancers>   
       <he_dancers> 
        <Dancer id="d7007" name="James"/> 
       </he_dancers> 
       <he_dancers> 
        <Dancer id="d8007" name="Paul"/> 
       </he_dancers> 
     </Auckland_2008_Dancers> 

Но мой код, который:

let $c:=fn:doc("/db/Zahra/dancingCompetitions_XQuery_15.xml")/dancingCompetitions/Competition[contains(@date,"2008") and @place="Auckland"]/Dance/dancePair 
let $c2:=fn:doc("/db/Zahra/dancingCompetitions_XQuery_15.xml")/dancingCompetitions/Pairs/Pair 
let $h:=fn:doc("/db/Zahra/dancingCompetitions_XQuery_15.xml")/dancingCompetitions/Dancers/he_dancers/Dancer 
let $s:=fn:doc("/db/Zahra/dancingCompetitions_XQuery_15.xml")/dancingCompetitions/Dancers/she_dancers/Dancer 

for $c3 in distinct-values($c/@ref_pair) 
let $m := $c2[@pair_id = $c3] 

return 
<Auckland_2008_Dancers> 


{ 
for $c5 in $m/she/@ref_she_dancer 
let $c6 := $s[@dancer_id=$c5] 
order by $c6/@dancer_id 

return 

<she_dancers> 
<Dancer id="{$c6/@dancer_id}" name="{$c6/Name}"/> 
</she_dancers> 
} 


{ 
for $c4 in $m/he/@ref_he_dancer 
let $c7 := $h[@dancer_id=$c4] 
order by $c7/@dancer_id 

return 
<he_dancers> 
<Dancer id="{$c7/@dancer_id}" name="{$c7/Name}"/> 
</he_dancers> 
} 
</Auckland_2008_Dancers> 

производит:

<Auckland_2008_Dancers> 
    <she_dancers> 
     <Dancer id="d5005" name="Mimi"/> 
    </she_dancers> 
    <he_dancers> 
     <Dancer id="d7007" name="James"/> 
    </he_dancers> 
</Auckland_2008_Dancers> 
<Auckland_2008_Dancers> 
    <she_dancers> 
     <Dancer id="d6006" name="Sally Ann"/> 
    </she_dancers> 
    <he_dancers> 
     <Dancer id="d9008" name="Dimitrij"/> 
    </he_dancers> 
</Auckland_2008_Dancers> 
<Auckland_2008_Dancers> 
    <she_dancers> 
     <Dancer id="d1001" name="Anny"/> 
    </she_dancers> 
    <he_dancers> 
     <Dancer id="d8007" name="Paul"/> 
    </he_dancers> 
</Auckland_2008_Dancers> 
<Auckland_2008_Dancers> 
    <she_dancers> 
     <Dancer id="d6006" name="Sally Ann"/> 
    </she_dancers> 
    <he_dancers> 
     <Dancer id="d9009" name="Gordon"/> 
    </he_dancers> 
</Auckland_2008_Dancers> 

что я делаю? как исправить? Я пробовал так много вещей, чтобы отбирать возвраты из, и некоторые из них произвели один и тот же результат, а некоторые дали ошибки.

+0

Для будущих вопросов, пожалуйста, включите пример ввода. Кроме того, обязательно используйте разумные, описательные имена переменных (по всему коду, всегда). Вы могли бы понять, что происходит прямо сейчас, но не более двух недель, а не вашего инструктора, и если вы работаете в более крупных проектах, никто больше ничего не поймет. –

ответ

1

Переместить элемент <Auckland_2008_Dancers> за пределы цикла.

let (: snip :) 
return <Auckland_2008_Dancers>{ 
    for $c3 in distinct-values($c/@ref_pair) 
    let $m := $c2[@pair_id = $c3] 
    return 
    (: snip :) 
    }</Auckland_2008_Dancers> 
+0

не позволяет мне дать мне ошибку – user2266688

+0

Очевидно, что я не копировал весь ваш код, включая первые операторы 'let'. Это потребует заявления 'return', вы забыли это? –