스파클 사용하기 SPARQL Tutorial - Filters

     




공식 홈페이지 메뉴얼 URL = http://jena.apache.org/tutorials/sparql_filters.html


SPARQL Tutorial - Filters


이번 장에서는 결과값들을 어떻게 제한하는지에 대해 알아봅니다. 여러 가지 다양한 방법으로 비교할 수 있지만 두 가지만 설명합니다.


String Matching


스파클은 정해진 표현에 기반을 둔 문자열을 테스트할 수 있는 연산자를 제공합니다. SQL에서 "LIKE"와 같은 형식으로 사용됩니다. 사용법은 다음과 같습니다.


FILTER regex(?x, "pattern" [, "flags"])


위와 같은 문법을 사용하면 ?x라는 리소스에 "pattern"이라는 문자열이 있는 것만 찾아냅니다. "flags"는 옵션으로 사용되는데 "i"값이 사용되면 대문자 소문자에 상관없이 찾아냅니다. 다음 예를 통해 더 자세히 알아봅시다.


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

SELECT ?g
WHERE
{ ?y vcard:Given ?g .
  FILTER regex(?g, "r", "i") }


위와 같은 쿼리문이 있습니다. Given에 object 값인 ?g를 출력하는 쿼리문입니다. 하지만 ?g중에서 "r"이라는 스트링값이 들어가 있는 값만 출력합니다. "i"값이 있기 때문에 "r"이든 "R"이든 구별하지 않고 모두 찾습니다. 출력결과는 다음과 같습니다.


-------------
| g         |
=============
| "Rebecca" |
| "Sarah"   |
-------------


레베카에 "R"과 사라의 "r"때문에 두개의 값이 검색되었습니다. 



Testing Values


쿼리문을 만들 때 특정한 값에 대한 제한을 주고 싶은 경우가 있습니다. 예제 RDF파일을 바꿔서 vc-db-2.rdf파일을 보도록 합시다. 이 RDF파일에는 사람의 나이가 입력되어 있습니다. info:age라는 속성으로 입력되어있습니다. 


<http://somewhere/RebeccaSmith/>
    info:age "23"^^xsd:integer ;
    vCard:FN "Becky Smith" ;
    vCard:N [ vCard:Family "Smith" ;
              vCard:Given  "Rebecca" ] .


나이가 24살이상인 사람을 검색하고 싶다면 다음과 같이 쿼리문을 작성하면 됩니다. 


PREFIX info: <http://somewhere/peopleInfo#>

SELECT ?resource
WHERE
  {
    ?resource info:age ?age .
    FILTER (?age >= 24)
  }


위에 FILTER사용과 다른 것으로 보아 regex()라는 것은 함수인가 봅니다. 이번에는 괄호 앞에 아무것도 없이 (?age >= 24)라는 조건식만 쓰여 있습니다. 결과값은 다음과 같습니다.


---------------------------------
| resource                      |
=================================
| <http://somewhere/JohnSmith/> |
---------------------------------







다음은 Optionals 챕터로 포스팅하겠습니다.

반응형

댓글

Designed by JB FACTORY