2017-01-24 2 views
3

Wikidata SPARQL service을 사용하여 50 개주의 목록을 얻고 Wikidata의 워싱턴 특별구를 포함하고 싶습니다.SPARQL을 사용하여 식별자를 사용하여 노드를 선택하는 방법, 특히 위키 데이터를 사용 하시겠습니까?

#-- 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를 추출하는 방식은 못생긴 : 나는 kludgy query to do so와 함께 올라와있다. (그것은 위키 데이터의 데이터에 미래의 변화는이 쿼리를 중단 할 가능성이 있습니다.) 내가 말할 수 있었으면하는

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 % 0 % % 20 % 20 % 20 % 20 % 20 % 7BBIND % 28wd % 3AQ61 % 20as % 20 % 3Fstate % 29 % 7D % 20 % 20 % 23 % 20 % 20 % 20A % 20A % 20 % 30 % 20 % 7B % 20BD % 3AserviceParam % 20wikibase % 3Alanguage % 20 % 22 % 22 % 20 % 7D % 0A % 7D % 0A % 0A). –

4

현재 불안정한 자산에 대해 걱정할 경우 외부 식별자를 사용하여 Washington, D.C.를 고유하게 식별 할 수 있습니다.

예를 들어, UNION 문에 워싱턴 DC에 대한 GeoNames을 ID를 사용하려면 사용할 수 있습니다 다음

# 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 ID를 사용하면 Wikidata에서 둘 이상의 엔티티가 동일한 ID를 공유 할 가능성이 낮기 때문에 (가능하지 않습니까?) 내 쿼리에 대한 개선점이 있습니다. 이 솔루션을 게시 해 주셔서 감사합니다. 그러나, 나는 여전히'wd : Q61'을 직접 참조 할 방법을 찾고있다. 그렇게하는 법을 알고 있습니까? –