跳到內容

SPARQL/WIKIDATA 限定詞、引用和排名

來自華夏公益教科書,開放世界開放書籍
維基資料資料模型

WIKIDATA 上的資料包含的資訊不僅僅是三元組。有關完整描述,請參閱維基資料:詞彙表.

讓我們看一下道格拉斯·亞當斯 (Q42) 以及他在哪裡接受教育 (P69).

限定詞

[編輯 | 編輯原始碼]

讓我們列出道格拉斯·亞當斯的教育以及限定詞 開始時間 結束時間

SELECT ?education ?educationLabel ?starttime ?endtime
WHERE
{
     wd:Q42 p:P69 ?statement.
     ?statement ps:P69 ?education.
     ?statement pq:P580 ?starttime.
     ?statement pq:P582 ?endtime.
     SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}
ORDER BY ?starttime

試試看!

字首 p: 指向的不是物件,而是語句節點。然後,該節點就是其他三元組的主語。
語句節點內的字首 ps: 檢索物件。
語句節點內的字首 pq: 檢索限定詞資訊。

使用 [ ] 語法 可以透過消除變數 ?statement 來極大地縮寫程式碼。

SELECT ?education ?educationLabel ?starttime ?endtime
WHERE
{
     wd:Q42 p:P69 [ps:P69 ?education;
                   pq:P580 ?starttime;
                   pq:P582 ?endtime;
                  ].
     SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}
ORDER BY ?starttime

試試看!

讓我們列出道格拉斯·亞當斯的教育以及所述 (P248) 引用

SELECT ?education ?educationLabel ?ref ?refLabel
WHERE
{
     wd:Q42 p:P69 ?statement.
     ?statement ps:P69 ?education.
     ?statement prov:wasDerivedFrom ?refnode.
     ?refnode   pr:P248 ?ref.
     SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}

試試看!

該字首 p: 指向的不是物件,而是語句節點。然後,該節點就是其他三元組的主語。
語句節點內的字首 ps: 檢索物件。
語句節點內的 prov:wasDerivedFrom 指向新的引用節點。
引用節點內的字首 pr: 檢索引用資訊。

使用 [ ] 語法 可以透過消除變數 ?statement?refnode 來極大地縮寫程式碼。

SELECT ?education ?educationLabel ?ref ?refLabel
WHERE
{
     wd:Q42 p:P69 [ ps:P69 ?education;
                    prov:wasDerivedFrom 
                    [ pr:P248 ?ref; 
                    ]
                  ].
     SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}

試試看!

您可能已經注意到,以上查詢中只列出了兩種教育中的一種。要列出這兩種,我們需要引入 OPTIONAL{ }。由於這隻能與完整句子一起使用,因此我們需要使用包含三元組作為短句的完整展開語法

SELECT ?education ?educationLabel ?ref ?refLabel
WHERE
{
     wd:Q42 p:P69 ?statement.
     ?statement ps:P69 ?education.
     OPTIONAL{ ?statement prov:wasDerivedFrom ?refnode.
              ?refnode   pr:P248 ?ref.
             }
     SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}

試試看!

讓我們列出道格拉斯·亞當斯的教育及其排名

SELECT ?education ?educationLabel ?rank
WHERE
{
     wd:Q42 p:P69 ?statement.
     ?statement ps:P69 ?education.
     ?statement wikibase:rank ?rank.
     SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}

試試看!

該字首 p: 指向的不是物件,而是語句節點。然後,該節點就是其他三元組的主語。
語句節點內的字首 ps: 檢索物件。
語句節點內的 wikibase:rank 檢索排名資訊。

使用 [ ] 語法 可以透過消除變數 ?statement 來極大地縮寫程式碼。

SELECT ?education ?educationLabel ?rank
WHERE
{
     wd:Q42 p:P69 [ps:P69 ?education;
                   wikibase:rank ?rank;
                  ].
     SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}

試試看!

一個具有不同排名的示例是柏林所處的(歷史)國家。

# Berlins countries and ranking
SELECT ?country ?countryLabel ?rank
WHERE
{
     wd:Q64 p:P17 [ps:P17 ?country;
                   wikibase:rank ?rank;
                  ].
     SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}

試試看!

排名的三個可能值是 wikibase:PreferredRankwikibase:NormalRankwikibase:DeprecatedRank

將其與普通三元組進行比較,普通三元組將只選擇具有最高排名的值。在這種情況下,只有首選排名值 德國 (Q183)

# Berlins countries via normal triples
SELECT ?country ?countryLabel
WHERE
{
     wd:Q64 wdt:P17 ?country.
     SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}

試試看!

查詢中忽略排名

[編輯 | 編輯原始碼]

排名可能會導致意外結果。例如,考慮以下查詢,它將返回所有與阿爾芬 aan den Rijn (Q213246) 接壤的荷蘭市。

select ?muni ?muniLabel where {
  ?muni wdt:P31 wd:Q2039348;
        wdt:P47 wd:Q213246.
  SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}

試試看!

這將不會顯示博斯科普 (Q894442),因為其對 荷蘭市 (Q2039348) 的排名是“普通”,而其他三個對例項 (P31) 的值是“首選”。為了在之前的查詢中也看到博斯科普,請像這樣重寫查詢

select ?muni ?muniLabel where {
  ?muni p:P31 [ps:P31 wd:Q2039348];
        wdt:P47 wd:Q213246.
  SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}

試試看!

或者使用屬性路徑來縮短查詢,如下所示

select ?muni ?muniLabel where {
  ?muni p:P31/ps:P31 wd:Q2039348;
        wdt:P47 wd:Q213246.
  SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}

試試看!

示例
語句 wd:Q42 wdt:P69 wd:Q691283.
或 wd:Q42 p:P69 ?s. ?s ps:P69 wd:Q691283.
或 wd:Q42 p:P69 [ ps:P69 wd:Q691283 ].
維基資料資料模型
排名 wd:Q42 p:P69 [ wikibase:rank ?rank ].
限定詞 wd:Q42 p:P69 [ pq:P580 ?qualifier ].
引用 wd:Q42 p:P69 [ prov:wasDerivedFrom [ pr:P248 ?ref ] ].
SPARQL data representation, as used by Wikidata Query Service Wikibase RDF mapping diagram

道格拉斯·亞當斯教育的完整查詢,包括排名、限定詞和引用,可能看起來像

# Douglas Adams education, with rank, qualifiers and references
SELECT ?education ?educationLabel ?rank ?starttime ?endtime ?ref ?refLabel
WHERE
{
     wd:Q42 p:P69 ?statement.
     ?statement ps:P69 ?education.
     # rank
     ?statement wikibase:rank ?rank.
     # qualifiers
     OPTIONAL{ ?statement pq:P580 ?starttime. }
     OPTIONAL{ ?statement pq:P582 ?endtime.   }
     # references
     OPTIONAL{ ?statement prov:wasDerivedFrom ?refnode.
               ?refnode   pr:P248 ?ref.
             }
     SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}
ORDER BY ?starttime

試試看!


華夏公益教科書