簡體   English   中英

DBPedia SPARQL可選

[英]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中獲得前十名,無論他們是否具有namedateOfBirth 我擁有這兩個屬性的前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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM