2017-01-24 11 views
3

Используя Wikidata SPARQL service, я хотел бы получить список из 50 штатов и включить округ Колумбия из Wikidata. Я пришел с kludgy query to do so:С SPARQL, как SELECT для узла по идентификатору, в частности, в wikidata?

#-- 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.

+2

Вы можете использовать SPARQL 1.1 BIND, то есть '{? State wdt: P31 wd: Q35657} UNION {BIND (wd: Q61 as? State)}', чтобы добавить фиксированные ресурсы в набор результатов. – AKSW

ответ

6

Вы можете использовать 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" } 
} 
+0

Спасибо - это тот тип ответа, который я ищу. Я [подтверждаю, что он работает] (https://query.wikidata.org/#SELECT%20%3Fstate%20%3FstateLabel%0AWHERE%20%7B%0A%20%7B%3Fstate%20wdt%3AP31%20wd%3AQ35657 % 7D% 20UNION% 20% 23% 20wdt% 3AP31% 20% 3D% 20instance% 20of% 3B% 20wd% 3AQ35657% 20% 3D% 20list% 20of% 20states% 20% 0A% 20% 20% 20% 20% 20 % 7BBIND% 28wd% 3AQ61% 20as% 20% 3Fstate% 29% 7D% 20% 20% 23% 20add% 20DC% 0A% 0A% 20SERVICE% 20wikibase% 3Alabel% 20% 7B% 20bd% 3AserviceParam% 20wikibase% 3Alanguage% 20% 22en% 22% 20% 7D% 0A% 7D% 0A% 0A). –

4

Вы можете использовать внешний идентификатор, чтобы однозначно идентифицировать Washington, D.C., если вас беспокоит свойство, которое вы используете в настоящее время, является нестабильным.

Например, чтобы использовать GEONAMES ID для Вашингтона, округ Колумбия, в вашем 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" } 
} 
+0

Использование вами идентификатора Geonames является хорошей идеей и улучшением моего запроса, потому что менее вероятно (не возможно?) Для более чем одного объекта для совместного использования одного и того же идентификатора в Wikidata. Благодарим вас за публикацию этого решения. Тем не менее, я все еще ищу способ обратиться к 'wd: Q61' напрямую. Вы знаете, как это сделать? –

 Смежные вопросы

  • Нет связанных вопросов^_^