스파클 사용하기 SPARQL Tutorial - Basic Patterns

     




SPARQL Tutorial - Basic Patterns


이번 챕터에서는 스파클 쿼리를 구성하고있는 기본적인 요소에 대해 알아봅니다.



Solutions


이전 시간에는 ?x 라는 변수를 사용하여 "John Smith"를 FN값으로 갖는 리소스를 검색했습니다. 이번에는 단순 URI정보만 가져오는 리소스 말고 좀 더 원하는 값을 가져오도록 쿼리문을 만들어 봅시다. 솔직히 기본 URI만 검색하면 그다지 쓸 일이 없을 것 같습니다. 실질적으로 검색하고자 하는 것은 누군가의 이름이나 그에 해당하는 "값"이 필요하지요. 다음 쿼리문을 봅시다.



SELECT ?x ?fname
WHERE {?x  <http://www.w3.org/2001/vcard-rdf/3.0#FN>  ?fname}


지난 시간에 SELECT에는 subject만 들어간다고 설명했는데 아니었나 봅니다. 그때는 ?x만 사용되어서 subject만 들어간 것이었고 아무거나 들어갈 수 있는 듯하네요. 이번 쿼리에는 SELECT에 ?x ?fname 두 가지가 사용되었습니다.  때문에 조건절에서 트리플 속성중에 subject와 object자리가 변수로 입력되어 있는 것을 알 수 있습니다. 즉 이 쿼리는 트리플중 predicate가 <http://www.w3.org/2001/vcard-rdf/3.0#FN>인 것에대한 subject와 object 값을 찾는다는 쿼리겠군요!


실제로 명령 프롬프트를 통해 다음 쿼리를 실행해 봅시다.



q-bp1.rq


실행 방법은 이전과 동일합니다. 





Basic Patterns


조건절에 들어갈 수 있는 트리플은 여러개입니다. 여태까지는 하나만 썻었죠. 다음 쿼리문을 봅시다.


SELECT ?givenName
WHERE
  { ?y  <http://www.w3.org/2001/vcard-rdf/3.0#Family>  "Smith" .
    ?y  <http://www.w3.org/2001/vcard-rdf/3.0#Given>  ?givenName .
  }


이제는 딱 보면 대충 어떤 것을 검색하는지 알 수 있을 것 같습니다. 처음엔 뭐가 뭔지 몰랐는데 생각보다 눈에 잘 들어오네요 ^.^ 아마 SQL 쿼리가 익숙해서 그런 것 같습니다. 이 쿼리문은 일단 givenName이라는 것을 찾고자 합니다. 조건절에서 givenName의 위치를 보니 object 값입니다. 쿼리문을 해석해보면 "Smith"라는 값을 Family의 object로 하는 subject y의 Given predicate의 object값을 반환하라는 쿼리입니다. 즉 스미스라는 성을 가진 사람들의 이름을 전부 찾겠다는 쿼리군요. 출력을 해보면 다음과 같습니다.




레베카와 존의 성이 스미스이군요. 근데 일일이 명령 프롬프트로 치자니 이거 생각보다 너무 귀찮네요. 그래서 다음부터는 protege툴에서의 쿼리툴을 이용하도록 하겠습니다. 


라고 하려고 했으나... 제공하는 vc-db-1.rdf파일이 프로티지에서 호환이 안 되네요.. 그냥 명령 프롬프트로 하겠습니다. ㅋㅋㅋㅋ



QNames


쿼리문을 만들 때 조건절에 NS를 너무 자주 써야 하는 경우가 있습니다. 이럴 때는 PREFIX를 사용해서 대신 쓸 수 있습니다.


PREFIX vcard:      <http://www.w3.org/2001/vcard-rdf/3.0#>

SELECT ?givenName
WHERE
 { ?y vcard:Family "Smith" .
   ?y vcard:Given  ?givenName .
 }


위에 쿼리문은 이전에 했던 쿼리문과 똑같은 쿼리문입니다. 한가지 바뀐 점은 <http~3.0#Family>로 되어있던 긴 URI가 짧게 vcard:Family로 바뀌었습니다. 이렇게 PREFIX를 사용해서 간단하게 만들 수 있습니다.




Blank Nodes


다음과 같은 쿼리문을 실행합니다. 


PREFIX vcard:      <http://www.w3.org/2001/vcard-rdf/3.0#>

SELECT ?y ?givenName
WHERE
 { ?y vcard:Family "Smith" .
   ?y vcard:Given  ?givenName .
 }


--------------------
| y    | givenName |
====================
| _:b0 | "John"    |
| _:b1 | "Rebecca" |
--------------------


결과값이 _:b0 과 _:b1로 나오게 됩니다. RDF그래프에서도 값이 없는 블랭크노드가 있었는데 스파클 쿼리에서는 블랭크노드를 _로 시작하는 문자열로 나타냅니다. 





여기까지 일반적인 패턴에 대해서 알아봤습니다. 다음은 Filters에 대해 포스팅 하도록 하겠습니다.


반응형

댓글

Designed by JB FACTORY