SPARQL/OPTIONAL
外觀
< SPARQL
使用一個 三元組 ?person wdt:P569 ?birth_date 可以檢索一個人的出生日期。但可能存在某些情況下,一個人的出生日期未知。在這種情況下,此三元組將充當選擇器:只有具有出生日期的人才會被選中。
但這並不是我們想要的結果:我們主要希望包括這個人,如果還有其他資料可用,我們希望列出這些資料,但我們不想讓這些資料限制我們的結果列表。
解決方法是告訴 WDQS 這些三元組是 OPTIONAL 的
SELECT ?child ?childLabel ?genderLabel ?birth_date ?date_of_death
WHERE
{
?child wdt:P22 wd:Q76.# ?child has father Obama
OPTIONAL{ ?child wdt:P21 ?gender. }
OPTIONAL{ ?child wdt:P569 ?birth_date. }
OPTIONAL{ ?child wdt:P570 ?date_of_death. }
SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}
ORDER BY ?child
如果沒有 OPTIONAL,奧巴馬的兩個孩子都不會被顯示出來,因為任何一個孩子的死亡日期都沒有填寫。
一般情況下,您不應該將所有可選的三元組都包含在一個 OPTIONAL { } 語句中。
SELECT ?child ?childLabel ?genderLabel ?birth_date ?date_of_death
WHERE
{
?child wdt:P22 wd:Q76.# ?child has father Obama
OPTIONAL{ ?child wdt:P21 ?gender. # In general you should NOT include all optional triplets into one sentence
?child wdt:P569 ?birth_date.
?child wdt:P570 ?date_of_death.
}
SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}
ORDER BY ?child
結果是,當其中一個變數在資料中丟失時,所有變數都將為空。
這在變數緊密關聯的情況下可能很有用。