Похоже, вы немного усложнили это. Глядя на ваш XQuery, кажется, что вы пытаетесь перечислить всех авторов, которые были соавторами книг с Джеффом Д. Уллманом. Также представляется, что вы исключаете книги, которые были заимствованы.
Если вы посмотрите на свой XML, вы увидите, что есть 3 книги, в которых Джефф Уллман является автором. Вот @asin
значения из 3:
/library[1]/items[1]/book[1]/@asin - 0201100886
/library[1]/items[1]/book[3]/@asin - 0201441241
/library[1]/items[1]/book[6]/@asin - 0138613370
Из этих 3 книг, 2 из них заимствованы:
(Примечание: обе книги появляются дважды, потому что эти книги заимствовали 2 разных заемщика.)
/library[1]/borrowers[1]/borrower[1]/borrowed[1]/book[1]/@asin - 0138613370
/library[1]/borrowers[1]/borrower[2]/borrowed[1]/book[1]/@asin - 0201100886
/library[1]/borrowers[1]/borrower[4]/borrowed[1]/book[1]/@asin - 0138613370
/library[1]/borrowers[1]/borrower[4]/borrowed[1]/book[2]/@asin - 0201100886
Это только оставляет книгу /library[1]/items[1]/book[3]/@asin - 0201441241
. Эта книга имеет только 2 соавторов.
XQuery ниже возвращает правильные имена соавторов.
XQuery
<coauthors>
{
let $library := doc('library.xml')/library
let $authors := $library/items/book[not(@asin = $library/borrowers/borrower/borrowed/book/@asin)]/authors/author[following-sibling::author[.='Jeffrey D. Ullman'] or preceding-sibling::author[.='Jeffrey D. Ullman']]
for $author in distinct-values($authors)
return <name>{$author}</name>
}
</coauthors>
Результаты
<coauthors>
<name>John E. Hopcroft</name>
<name>Rajeev Motwani</name>
</coauthors>