6

RDFファイルにrdf:collection。1人の著者のコレクションがある場合、次のクエリは何も返しません。ただし、クエリは2人以上の作成者に対して機能しますが、返されるのは2人の作成者のみです。すべての著者を書き出すにはどうすればよいですか?

<bibo:authorList rdf:parseType="Collection">
 <rdf:Description rdf:about="http://openlibrary.org/authors/OL113143A"/>
 <rdf:Description rdf:about="http://openlibrary.org/authors/OL6784959A"/>
</bibo:authorList>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX dc: <http://purl.org/dc/terms/>

select ?title ?author ?author2
where { 
  ?x dc:title ?title . 

  ?x bibo:authorList ?object.
  ?object rdf:first ?name. 
  ?name rdf:value ?author.

  ?object rdf:rest ?object2.
  ?object2 rdf:first ?name2.
  ?name2 rdf:value ?author2 . 
}
4

1 に答える 1

7

問題は、半再帰的なことをしようとしているため、RDFリストの長さによって結果が異なることです。記述されたクエリは、長さが2以上のリストに対してのみ機能します。クエリの2番目の部分には一致するものがないため、長さ1のリストは機能しません。

コレクションにアクセスしたい場合は、次のようなプロパティパスを使用するのが最善の方法です(SPARQL 1.1が必要です)。

SELECT * WHERE
{
  ?list rdf:rest*/rdf:first ?member .
}

この一般的なパターンを、適切と思われるクエリに適合するように適合させることができます。

于 2012-04-15T14:55:58.023 に答える