SPARQL/SERVICE - 標籤
您可以使用帶有URI <http://wikiba.se/ontology#label> 的專用服務,獲取您查詢的實體的標籤、別名或描述,並具有語言回退功能。當您要檢索標籤時,此服務非常有用,因為它減少了您為了實現相同效果而需要編寫的 SPARQL 查詢的複雜性。
該服務可以用兩種模式之一使用:手動模式和自動模式。
在自動模式下,您只需要指定服務模板,例如:
PREFIX wikibase: <http://wikiba.se/ontology#>
SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
然後 WDQS 將自動生成標籤,如下所示
- 如果
SELECT中的未繫結變數名為?NAMELabel,那麼 WDQS 會為變數?NAME中的實體生成標籤(rdfs:label)。 - 如果
SELECT中的未繫結變數名為?NAMEAltLabel,那麼 WDQS 會為變數?NAME中的實體生成別名(skos:altLabel)。 - 如果
SELECT中的未繫結變數名為?NAMEDescription,那麼 WDQS 會為變數?NAME中的實體生成描述(schema:description)。
在每種情況下,?NAME 中的變數都應該繫結,否則服務會失敗。
示例,顯示歐盟國家名稱和首都的列表(法語)。為了演示,還會顯示描述和別名
SELECT ?country ?countryLabel ?capitalLabel ?capitalDescription ?capitalAltLabel
WHERE {
wd:Q458 wdt:P150 ?country. # European Union contains administrative territorial entity
OPTIONAL{ ?country wdt:P36 ?capital. }
SERVICE wikibase:label { bd:serviceParam wikibase:language "fr". }
}
在這個例子中,WDQS 自動建立了標籤 ?countryLabel、?capitalLabel、?capitalDescription 和 ?capitalAltLabel。
在手動模式下,您需要在服務呼叫中顯式繫結標籤變數,但 WDQS 仍然會提供語言解析和回退。
手動標籤服務對於在某些 SPARQL 函式中使用標籤是必需的,例如
GROUP_CONCAT- 聚合函式
MIN、MAX、SUM或AVG
示例
SELECT *
WHERE {
SERVICE wikibase:label { bd:serviceParam wikibase:language "fr,de,en".
wd:Q123 rdfs:label ?q123Label.
wd:Q123 skos:altLabel ?q123Alt.
wd:Q123 schema:description ?q123Desc.
}
}
這將考慮法語、德語和英語中的標籤和描述,如果都沒有,將使用 Q-id 作為標籤。
手動標籤也可以用於列出多種語言的標籤,例如歐洲國家(英語、德語和法語)
SELECT ?country ?country_EN ?country_DE ?country_FR
WHERE {
wd:Q458 wdt:P150 ?country. # European Union contains administrative territorial entity
SERVICE wikibase:label { bd:serviceParam wikibase:language "en".
?country rdfs:label ?country_EN.
}
SERVICE wikibase:label { bd:serviceParam wikibase:language "de".
?country rdfs:label ?country_DE.
} hint:Prior hint:runLast false.
SERVICE wikibase:label { bd:serviceParam wikibase:language "fr".
?country rdfs:label ?country_FR.
} hint:Prior hint:runLast false.
}
PS:hint:Prior hint:runLast false. 新增用於防止錯誤:“在任何組中只能有一個“最後執行”聯接”。[1]
也可以透過直接使用 rdfs:label(不使用 wikibase:label SERVICE)來編寫上述查詢
SELECT ?country ?country_EN ?country_DE ?country_FR
WHERE {
wd:Q458 wdt:P150 ?country. # European Union contains administrative territorial entity
OPTIONAL {?country rdfs:label ?country_EN FILTER (LANG(?country_EN) = "en")}.
OPTIONAL {?country rdfs:label ?country_DE FILTER (LANG(?country_DE) = "de")}.
OPTIONAL {?country rdfs:label ?country_FR FILTER (LANG(?country_FR) = "fr")}.
}
您可以指定語言列表,以便在標籤不存在於您指定的語言中時作為回退。您可以使用一個或多個 bd:serviceParam wikibase:language "語言程式碼" 三元組來指定標籤的偏好語言。每個字串可以包含一個或多個語言程式碼,用逗號分隔。WDQS 會按照您指定的順序考慮語言。如果在任何指定的語言中都找不到標籤,則實體的 Q-id(不帶任何字首)將是它的標籤。
SERVICE wikibase:label { bd:serviceParam wikibase:language "fr,de,en" }
維基資料查詢服務網站會自動將 [AUTO_LANGUAGE] 替換為當前使用者介面的語言程式碼。例如,如果使用者的 UI 是法語,則 SPARQL 程式碼 bd:serviceParam wikibase:language "[AUTO_LANGUAGE],de,en" 將在傳送到查詢服務之前轉換為 bd:serviceParam wikibase:language "fr,de,en"。
SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],de,en" }