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