Wikidata Query Service에 SPARQL 문의

12836 단어 linkeddatardfSPARQL
SPARQL Advent Calendar 2015, 21일 보도.하루 정도 보냈지만...
Wikidata Query Service(Beta)에 대한 SPARQL 컨설팅

위키백과


Wikidata는 위키백과 프로젝트 중 하나로 커뮤니티 데이터의 위키백과죠.데이터는 세 그룹으로 나뉘어 링크드 데이터로 다른 서비스의 URI에 연결할 수 있습니다.최근 SPARQL의 최종 지점이 공개되었습니다.
DBpedia 위키백과 기계에서 추출하여 제작한 RDF 데이터
Wikidata는 커뮤니티에 기술된 Linke Data라는 점이 다르다는 것을 인식합니다.
(이상한 해석이라면 댓글로 남겨주세요
Wikidata Query Service에는 SPARQL 엔드포인트가 공개되어 있습니다.
화면 오른쪽 상단에 있는 "Examples"에서 많은 샘플을 시험적으로 사용할 수 있습니다.

SPARQL


Examples 등을 참고해 이번에 써 본 검색어는 다음과 같다.
PREFIX wd: <http://www.wikidata.org/entity/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX p: <http://www.wikidata.org/prop/>
PREFIX ps: <http://www.wikidata.org/prop/statement/>

select ?movie ?jalabel ?enlabel
where {
    ?movie p:P57 ?directorStatement . # director
    ?directorStatement ps:P57 wd:Q38222 .

    ?movie p:P179 ?seriesStatement . # series
    ?seriesStatement ps:P179 wd:Q462 .

    ?movie rdfs:label ?jalabel filter (lang(?jalabel) = "ja") .
    ?movie rdfs:label ?enlabel filter (lang(?enlabel) = "en") .
}
이 조회는 영화 ID, 일본어 라벨, 영어 라벨을 얻을 수 있습니다.영화의 조건은요.
  • 시리즈는 Star Wars
  • 입니다.
  • director는 George Lucas
  • 입니다.
    이런 영화.
    'George Lucas 감독의 스타워스 시리즈 영화 ID와 일본어 제목, 영어 제목'을 조회받은 것이다.
    질의의 Predicate, Object는 각각 다음과 같습니다.URI를 보면 대충 어떤 자원인지 알 수 있으면 좋겠지만 연번이면 어려워요.
  • P57: director
  • P179: series
  • Q38222: George Lucas
  • Q462: Star Wars
  • 다음은 결과입니다.
    ?movie
    ?jalabel
    ?enlabel
    wd:Q181069
    스타워즈2:클론의 공격
    Star Wars Episode II: Attack of the Clones
    wd:Q165713
    스타워즈 1/환영 미나스
    Star Wars Episode I: The Phantom Menace
    wd:Q17738
    스타워즈 4/새로운 희망
    Star Wars Episode IV: A New Hope
    wd:Q42051
    스타워즈 3:시스의 복수
    Star Wars Episode III: Revenge of the Sith
    작은 곳이라면 직접 쓰고 싶다?movie p:P57 wd:Q38222 .propertystatementps:를 거치지 않으면 안 될 것 같습니다.
    따라서 경유?directorStatement,?seriesStatement로 관계를 기술했다.
    (왜 이런 구조가 생겼는지 누가 나에게 알려줄 수 있습니까?)
    그나저나 조지루카스가 아닌 감독의 작품명과 감독 이름은 아래 조회를 통해 확인할 수 있다.
    PREFIX wd: <http://www.wikidata.org/entity/>
    PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
    PREFIX p: <http://www.wikidata.org/prop/>
    PREFIX ps: <http://www.wikidata.org/prop/statement/>
    
    select ?movie ?jalabel ?enlabel ?directorName
    where {
        ?movie p:P57 ?directorStatement . # director
        minus { ?directorStatement ps:P57 wd:Q38222 . } # not George Lucas
        ?directorStatement ps:P57 ?director .
        ?director rdfs:label ?directorName filter (lang(?directorName) = "en") .
    
        ?movie p:P179 ?seriesStatement . # series
        ?seriesStatement ps:P179 wd:Q462 .
    
        ?movie rdfs:label ?jalabel filter (lang(?jalabel) = "ja") .
        ?movie rdfs:label ?enlabel filter (lang(?enlabel) = "en") .
    }
    
    minus SPARQL1.1에서 입력한 것으로 보입니다.이 결과는 아래와 같다.
    ?movie
    ?jalabel
    ?enlabel
    ?directorName
    wd:Q181803
    스타워즈
    Star Wars Episode VI: Return of the Jedi
    Richard Marquand
    wd:Q6074
    스타워즈
    Star Wars: The Force Awakens
    J. J. Abrams
    wd:Q181795
    스타워즈 5/제국의 반격
    The Empire Strikes Back
    Irvin Kershner
    일화 7의 제목인'force의 각성'이 없기 때문에 나는 위키백과처럼 편집하고 싶다(->간단하게 수정했다).

    총결산 혹은 소감


    대학·대학원에서 링크드 데이터(RDF)를 연구하기 때문에 SPARQL을 쓰는 것은 이번이 처음이 아니다
    졸업 후 약 2년 만에 썼기 때문에 시간이 많이 걸렸다.
    Wikidata의 끝점은 일반 Virtoso의 SPARQL 끝점보다 사용하기 쉽습니다.
    위키데이터와 DBpedia는 다릅니까?(기계적으로 추출하지 않았다는 뜻) 사람이 유지하는 데이터처럼 보이니까.
    Predicate를 낭비하지 않고 많이 붙인 인상.

    참고 자료

  • Fumi1 선생님의 블로그 글
  • Wikidata Linked Data
  • Wikidata Query Service
  • Erxleben, Fredo, et al. "Introducing Wikidata to the linked data web." The Semantic Web–ISWC 2014. Springer International Publishing, 2014. 50-65.

  • What is the difference between Wikidata and DBpedia?
  • 너무 길어서 못 읽었어요
  • 좋은 웹페이지 즐겨찾기