使用 SPARQL,如何通过标识符为节点 SELECT,特别是在维基数据中?
With SPARQL, how to SELECT for node by identifer, specifically in wikidata?
使用 Wikidata SPARQL service, I would like to get the list of the 50 states and include the District of Columbia from Wikidata. I have come up with a kludgy query to do so:
#-- wdt:P31 = instance of; wd:Q35657 = list of states
SELECT ?state ?stateLabel
WHERE {
{?state wdt:P31 wd:Q35657} UNION
{?state wdt:P3403 wd:Q3551781} . #-- coextensive with District of Columbia
SERVICE wikibase:label { bd:serviceParam wikibase:language "en" }
}
我的查询有效,但我将 DC 提取到结果中的方式很丑陋。 (维基数据中数据的未来更改可能会破坏此查询。)我想说的是
UNION {?state == wd:Q61}
直接包含 Washington, D.C. (Q61)。但是,作为 SPARQL 的新手,我无法理解这样做的 SPARQL 语法。如果能重写此查询以直接引入 wd:Q61
,我将不胜感激。
如果您担心当前使用的 属性 不稳定,您可以使用外部标识符来唯一标识华盛顿 D.C。
例如,要使用华盛顿的 Geonames ID,D.C。在您的 UNION 语句中,您可以使用以下内容:
# wdt:P31 = instance of; wd:Q35657 = list of states; wdt:P1566 = Geonames ID
SELECT ?state ?stateLabel
WHERE {
{?state wdt:P31 wd:Q35657} UNION
{?state wdt:P1566 "4138106"} . # we want wd:Q61
SERVICE wikibase:label { bd:serviceParam wikibase:language "en" }
}
您可以使用 SPARQL 1.1 BIND
向结果集添加固定资源,即
SELECT ?state ?stateLabel WHERE {
{?state wdt:P31 wd:Q35657}
UNION
{BIND(wd:Q61 as ?state)}
SERVICE wikibase:label { bd:serviceParam wikibase:language "en" }
}
使用 Wikidata SPARQL service, I would like to get the list of the 50 states and include the District of Columbia from Wikidata. I have come up with a kludgy query to do so:
#-- wdt:P31 = instance of; wd:Q35657 = list of states
SELECT ?state ?stateLabel
WHERE {
{?state wdt:P31 wd:Q35657} UNION
{?state wdt:P3403 wd:Q3551781} . #-- coextensive with District of Columbia
SERVICE wikibase:label { bd:serviceParam wikibase:language "en" }
}
我的查询有效,但我将 DC 提取到结果中的方式很丑陋。 (维基数据中数据的未来更改可能会破坏此查询。)我想说的是
UNION {?state == wd:Q61}
直接包含 Washington, D.C. (Q61)。但是,作为 SPARQL 的新手,我无法理解这样做的 SPARQL 语法。如果能重写此查询以直接引入 wd:Q61
,我将不胜感激。
如果您担心当前使用的 属性 不稳定,您可以使用外部标识符来唯一标识华盛顿 D.C。
例如,要使用华盛顿的 Geonames ID,D.C。在您的 UNION 语句中,您可以使用以下内容:
# wdt:P31 = instance of; wd:Q35657 = list of states; wdt:P1566 = Geonames ID
SELECT ?state ?stateLabel
WHERE {
{?state wdt:P31 wd:Q35657} UNION
{?state wdt:P1566 "4138106"} . # we want wd:Q61
SERVICE wikibase:label { bd:serviceParam wikibase:language "en" }
}
您可以使用 SPARQL 1.1 BIND
向结果集添加固定资源,即
SELECT ?state ?stateLabel WHERE {
{?state wdt:P31 wd:Q35657}
UNION
{BIND(wd:Q61 as ?state)}
SERVICE wikibase:label { bd:serviceParam wikibase:language "en" }
}