스파클 사용하기 sparQL tutorial - Data Formats

     


저장된 온톨로지에 쿼리문을 실행하기위해 sparQL을 사용합니다. 하지만 한국어로된 sparQL관련 자료가 매우 부족한게 현실입니다. SQL 쿼리는 책이 많은데 sparQL관련은 적네요. 아마 RDF파일에 쿼리문을 실행하는 것이라 사용빈도가 적은것 같습니다. 전문적으로는 많이 사용하지만요. 


jena API는 실질적인 코딩부분이라 코딩할 때 참고하면서 보면 되니까 대충 보고 넘어갔지만 왠지 sparQL은 꼼꼼히 공부해야 할 것 같다는 느낌이 들었습니다. 그래서 sparQL에대해서 자세히 보고 넘어 가기로 했습니다.


일단 jena.apache에서 제공하는 sparQL tutorial 주소입니다.


http://jena.apache.org/tutorials/sparql.html


이번 포스팅부터 한 챕터씩 공부해 보기로 하겠습니다. 일단 처음은 SPARQL Tutorial - Data Formats 입니다. 





SPARQL Tutorial - Data Formats


일단, 우리가 질의하는 데이터에대해 명확히 할 필요가 있습니다. sparQL(이하 스파클)은 RDF 그래프 구조로 이루어진 자료형에 대한 쿼리를 합니다. *쿼리 = Query : 원하는 데이터를 검색하기 위한 질의문 

RDF는 트리플이라는 구조로 이루어져 있습니다. (지난 jena RDF API 관련 포스팅 참조) Jena에서는 RDF 그래프를 모델이라고 부르고, 트리플을 상태(statement)라고 표현하기도 합니다.


트리플로 표현된 자료는 단순히 나열된 데이터가 아닙니다. 물론 문서상에는 나열되어 있지만 각각의 관계를 잘 이해하셔야 합니다. RDF를 표현하기위한 표기방식은 여러가지 이기 때문에 어떤방식으로 표현되어도 추상적으로는 트리플 관계라고 생각할 수 있어야 합니다. 이 튜토리얼에서는 트리플과 비슷한 표기방식인 터틀이라는 표기법을 사용합니다. 


jena RDF API때 사용했던 예제를 살펴보겠습니다. 사람의 풀네임과 네임을 구분해서 트리플 구조로 만들었습니다. 그 때 사용했던 모델을 그래프로 표현하면 다음과 같습니다.




각각의 화살표가 트리플이라고 생각하시면 됩니다. 트리플은 구성은 화살표의 의미, 화살표의 대상, 화살표의 주체 3가지로 나눌 수 있으며 다음 두가지 표현 언어는 둘다 똑같이 위와 같은 RDF그래프를 나타냅니다.

@prefix vCard:   <http://www.w3.org/2001/vcard-rdf/3.0#> .
@prefix rdf:     <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix :        <#> .

<http://somewhere/MattJones/>
    vCard:FN    "Matt Jones" ;
    vCard:N     [ vCard:Family
                              "Jones" ;
                  vCard:Given
                              "Matthew"
                ] .

<http://somewhere/RebeccaSmith/>
    vCard:FN    "Becky Smith" ;
    vCard:N     [ vCard:Family
                              "Smith" ;
                  vCard:Given
                              "Rebecca"
                ] .

<http://somewhere/JohnSmith/>
    vCard:FN    "John Smith" ;
    vCard:N     [ vCard:Family
                              "Smith" ;
                  vCard:Given
                              "John"
                ] .

<http://somewhere/SarahJones/>
    vCard:FN    "Sarah Jones" ;
    vCard:N     [ vCard:Family
                              "Jones" ;
                  vCard:Given
                              "Sarah"
                ] .


@prefix vCard:   <http://www.w3.org/2001/vcard-rdf/3.0#> .
@prefix rdf:     <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .

<http://somewhere/MattJones/>  vCard:FN   "Matt Jones" .
<http://somewhere/MattJones/>  vCard:N    _:b0 .
_:b0  vCard:Family "Jones" .
_:b0  vCard:Given  "Matthew" .


<http://somewhere/RebeccaSmith/> vCard:FN    "Becky Smith" .
<http://somewhere/RebeccaSmith/> vCard:N     _:b1 .
_:b1 vCard:Family "Smith" .
_:b1 vCard:Given  "Rebecca" .

<http://somewhere/JohnSmith/>    vCard:FN    "John Smith" .
<http://somewhere/JohnSmith/>    vCard:N     _:b2 .
_:b2 vCard:Family "Smith" .
_:b2 vCard:Given  "John"  .

<http://somewhere/SarahJones/>   vCard:FN    "Sarah Jones" .
<http://somewhere/SarahJones/>   vCard:N     _:b3 .
_:b3 vCard:Family  "Jones" .
_:b3 vCard:Given   "Sarah" .


즉, 표현하는 언어의 나열에 관계없어 트리플자체가 뜻하는 관계를 이해하고, 검색하고자 할때 어떤 형태의 모델에서 자료를 찾는지 확실히 알고 있어야 합니다.







이번 챕터는 금방 끝났습니다. 생각보다 내용이 적네요. 아마 시작하기전에 intro같은 느낌입니다. 

다음 포스팅은 A Simple Query로 시작하겠습니다.

반응형

댓글

Designed by JB FACTORY