2017-02-27 6 views
1

이 주체의 술어/객체에 대해 알지 못하는 채로 주체 목록에서 공유하는 모든 술어 + 객체를 어떻게 얻을 수 있습니까? 위키 데이터에서이 예제 쿼리에서
살펴 보자 :SPARQL - 주체 목록의 상호 객체 반환

SELECT ?chancellor WHERE{ 
    ?chancellor wdt:P39 wd:Q4970706. #P39 = position held, Q4970706 = Chancellor of Germany 
} 

Link to this query.

이 쿼리는 독일의 이전의 모든 셀러스을 반환합니다.
이제 모든 장관이 공통으로 가진 모든 술어 + 객체를 반환하고 싶습니다. 예. 모든 주제가 인간의 본보기이며, 독일 등에서 태어났습니다.
나는 이것이 쉬운 것 같아요. 그러나 나는 전혀 모른다.

답변

4

이것은 좋은 것입니다. 여기에 가까운 히트입니다 :이 모든 셀러스 소요되며, 그 특성과 값

prefix wdt: <http://www.wikidata.org/prop/direct/> 
prefix wd: <http://www.wikidata.org/entity/> 

select ?p ?o (count(distinct ?chancellor) as ?cs) where { 
    ?chancellor wdt:P39 wd:Q4970706. 
    ?chancellor ?p ?o . 
} 
group by ?p ?o 
order by desc(?cs) 

Link to query

. 그것은 prop/val 당 총장의 수를 센다.

주문하면 상단에서 가장 일반적인 prop/vals를 볼 수 있습니다.

이제 원하는 것은 모든 장관의 결과뿐입니다. 우리는 충분히 쉽게 한 쿼리에서 셀러스의 수를 얻고, 함께 두 개의 스틱 수 있습니다

prefix wdt: <http://www.wikidata.org/prop/direct/> 
prefix wd: <http://www.wikidata.org/entity/> 

select ?p ?o where { 
    { 
     # Find number of chancellors 
     select (count(?chancellor) as ?num_chancellors) where { 
      ?chancellor wdt:P39 wd:Q4970706 
     } 
    } 
    { 
     # Find number of chancellors per predicate/value 
     select ?p ?o (count(distinct ?chancellor) as ?chancellor_count) where { 
      ?chancellor wdt:P39 wd:Q4970706. 
      ?chancellor ?p ?o . 
     } 
     group by ?p ?o 
    } 
    # Choose results all chancellors share 
    filter (?num_chancellors = ?chancellor_count) 
} 

Link to query합니다.

나는 이것이 당신이 원하는 것을한다고 생각합니다. 아주 귀엽지 만 고백합니다.

+0

좋은 답변입니다! 접근법 # 1도 재미 있습니다! # 2 정확히 내가 원하는 것입니다. – rinderwahn

+0

질의 결과가 더 흥미롭지 않다는 것은 유감스러운 일입니다. -/첫 번째 예제에서 count가 아니라 group_concat을 사용하면 어느 부서장이 prop/val을 공유하는지 알 수 있습니다. 이는 유용한 변형입니다. – user205512

0

SPARQL과 RDF의 흥미로운 점은 데이터를 쿼리 할 때 데이터에 대해 알 필요가 없다는 것입니다. 귀하의 경우에는 트리플 패턴 ?chancellor ?p ?o .을 추가하고 ?p?o을 선택하는 것이 좋습니다. 여기에서 원하는 속성을 선택할 수 있습니다. ?chancellor 중 일부가 해당 속성 값을 갖고 있지 않은 경우 OPTIONAL을 사용해야합니다.

+1

그는 총리가 공통으로 가지고있는 모든 술어 + 객체 튜플을 얻고 싶습니다. 나는 당신이 그 질문에 대답했다고 생각하지 않습니다. – AKSW

+0

@AKSW가 말했듯이 이것은 내가 찾고있는 것이 아닙니다. – rinderwahn