[英]DBPedia SPARQL OPTIONAL
我正在http://dbpedia.org/sparql上運行此簡單查詢
PREFIX p: <http://dbpedia.org/property/>
SELECT * WHERE {
?person dcterms:subject category:British_journalists .
OPTIONAL { ?person p:name ?name } .
OPTIONAL { ?person p:dateOfBirth ?dob } .
}
LIMIT 10
我希望從http://dbpedia.org/resource/Category:British_journalists中獲得前十名,無論他們是否具有name
和dateOfBirth
。 我擁有這兩個屬性的前10個人。 例如,安德魯·羅斯斯坦(Andrew Rothstein)之后有2名失蹤人員。
我究竟做錯了什么?
您查詢的問題是:a) LIMIT
限制了返回的行數,而不是主題,並且b)有些人的名字不止一個。
因此,例如,新聞記者Daniel Singer( http://dbpedia.org/resource/Daniel_Singer_(journalist)
(journalist http://dbpedia.org/resource/Daniel_Singer_(journalist)
)至少具有兩個名稱: "Daniel Singer"@en
和"Singer, Daniel"@en
。 以他為主題的行數增加了一倍。
如果您使用GROUP BY ?person
,則每行只能確保一個人。 然后,您需要對名稱和選項進行SAMPLE
,以便每人僅選擇一個。
PREFIX p: <http://dbpedia.org/property/>
SELECT ?person (SAMPLE(?name) as ?aname) (SAMPLE(?dob) as ?adob) WHERE {
?person dcterms:subject category:British_journalists .
OPTIONAL { ?person p:name ?name } .
OPTIONAL { ?person p:dateOfBirth ?dob } .
}
GROUP BY ?person
LIMIT 10
(我不確定SAMPLE
在未綁定的情況下(即沒有名稱的情況)的表現如何
根據OR Mapper的評論-刪除限制會帶來完整的結果集,這表明OPTIONAL實際上是有效的。 謝謝。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.