跳轉到內容

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 函式中使用標籤是必需的,例如

示例

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" }

mw:維基資料查詢服務/使用者手冊


華夏公益教科書