跳转到内容

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:维基数据查询服务/用户手册


华夏公益教科书