본문 바로가기
Web Development/SPARQL

[SPARQL / RDF] 속성 중 하나만 가지고 있어도 조회하기(feat. 외부조인 outer join)

by 감자맹고우 2022. 1. 18.
728x90
반응형

이전 글에서 여러 개의 속성을 동시에 가지고 있으면서, 한 URI에 대한 여러 개의 결과를 하나의 행으로 출력하는 방법을 살펴보았다.

 

▼▼▼ 이전 글 보기

 

[SPARQL / RDF] 동일한 URI의 여러 행 데이터를 한 행으로 조회(feat. 카티션 프로덕트/Cartesian Product)

SPARQL 쿼리를 조회하다보면, 쿼리가 길어지기 마련이다. 하나의 속성에 대해서만 조회하면 문제가 없겠지만 실무에서는 여러 개의 속성을 가지고 있는 데이터를 조회하게 된다. 예를 들어, 제목

devlifetestcase.tistory.com

 

그러면 SQL의 OUTER JOIN처럼 Null 값이어도,
또는
속성 중 하나만 가지고 있더라도 결과로 조회하는 방법은 없을까?

 

SPARQL / SPARQL 예제에 대해서 실무에 사용된 국내 자료가 워낙 적었기 때문에, 구글링에 많은 시간을 소비했지만 그 방법을 찾을 수 있었다.

 

반응형

 

[ 해결 방법 ]

 

우선 예제를 위해 매번 이용하는 한국 DBPedia Endpoint를 이번에도 이용했다.

 

Virtuoso SPARQL Query Editor

 

143.248.135.47

 

사용 계획에 따라, 속성 값이 NULL이어도 조회 가능한 2가지 방법이 있다.

 

1. OPTIONAL

 

OPTIONAL은 OUTER JOIN에 더 가까운 느낌을 준다.

 

PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>

SELECT *
WHERE { 
    OPTIONAL {?s rdfs:label ?o.}
    OPTIONAL {?s rdfs:comment ?c.}
    OPTIONAL {?s foaf:name ?n.}
}

 

위와 같이 쿼리를 날려보면, 아래와 같이 n열의 값이 NULL이어도 조회가 된다.

SPARQL은 기본이 교집합으로 처리되기 때문에 하나의 속성이라도 NULL인 경우 결과로 조회되지 않는데, OPTIONAL을 사용하면 NULL이어도 조회를 할 수 있다.

 

s o c n
http://ko.dbpedia.org/resource/과학언론 "과학언론"@ko "과학언론은 과학과 관련된 정보를 대중에게 알려주는 기능을 하는 언론의 한 갈래이다. 과학기술은 그것의 전문성과 복잡성, 그리고 사회적 영향력이 사회의 다른 어느 부문보다도 높은 만큼 과학기술을 보편적인 상징체계로 재구성하기 위해서는 정교한 커뮤니케이션 메커니즘이 필수적이다. 따라서 과학기술을 다룰 때는 기존의 언론이 여타의 사회문제들을 접근하는 방식과는 다른 새로운 방식의 언론관행이 요구된다."@ko  
http://ko.dbpedia.org/resource/과학적_관리법 "과학적 관리법"@ko "과학적 관리법(科學的管理法) 또는 테일러 시스템(Taylor system)은 프레더릭 윈즐로 테일러에 의해 제창되어 그때까지 이루어지고 있던 관리자의 직감이나 경험에 따른, 소위 되어 가는 대로 하는 관리와는 차원이 다른 과학적이고 보다 종합적인 관리 시스템이다. 그것은 다음과 같은 내용을 내포한다. 시간 및 동작 연구, 기능적 직장(職場)제도, 공구나 기구 등의 표준화, 기획 부문, 예외원리, 계산척 등 시간 절약 수단의 이용, 작업 지시서(作業指示書), 과업 관념과 이에 따르는 보너스 제도, 차별적 노말 제도, 제품·공구류의 기억 분류 제도, 수순 제도(手順制度), 근대적 원가 계산제도 등이다. 그러나 테일러 시스템의 근본은 '하루의 공정한 작업량', 즉 과업을 과학적으로 결정하는 데에 있다. 또 이 시스템은 작업방법도 표준화한다."@ko  
http://ko.dbpedia.org/resource/과학적_관리법 "과학적 관리법"@ko "과학적 관리법(scientific management)이란, 창안자인 프레더릭 윈즐로 테일러의 이름 따, 테일러리즘(Taylorism)이라고 불리며, 20세기 초부터 주목받은 과업수행의 분석과 혼합에 대한 관리 이론이다. 이 이론의 핵심 목표는 경제적 효율성, 특히 노동생산성 증진에 있다.이러한 과학적 관리법의 진행은 다음과 같이 수행된다. 우선 작업을 과업단위로 분류를 시도하며 동시에 해당 과업을 수행할 적합한 작업자를 체계적으로 선발을 한 뒤에 이러한 각각의 과업을 최대한 빠르고 효율적으로 수행할 수 있도록 시간연구와 동작연구를 시도한다. 연구를 통한 개선점이 도출 될 시에 이를 노동자들에게 작업수행의 표준화, 지침으로 교육을 하여, 이러한 과업수행이 효과적으로 나타나고, 목표량을 달성 시, 수행자에게 인센티브를 지급으로 마무리한다."@ko  

 

반응형

 

다만, 여기서 bif:contains를 사용하려면 비교를 위한 필수 속성값이 필요하기 때문에

bif:contains로 비교할 속성은 OPTIONAL을 해제해야한다.

 

즉, 아래와 같이 OPTIONAL을 제거해야 한다.

하지만 bif:contains 등으로 검색할 수 있다는 것은 OPTIONAL의 큰 장점이다.

 

PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>

SELECT *
WHERE {
    ?s rdfs:label ?o.
    ?o bif:contains "'가나'".
    OPTIONAL {?s rdfs:comment ?c.}
    OPTIONAL {?s foaf:name ?n.}
}

 

반응형

 

2. | (OR)

 

OPTIONAL만 있었다면 조금 아쉬웠을 지도 모른다. 그러나 SPARQL은 | (OR) 기능도 제공한다.

사용방법은 다음과 같다.

 

PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>

SELECT *
WHERE {
    ?s rdfs:label|rdfs:comment|foaf:name ?o.
}

 

속성 사이에 | 를 넣어 조회한다.

그렇다면 해당 속성 중 하나의 속성만 있어도 결과로 조회된다.

하지만, 조회 결과는 OPTIONAL과는 사뭇 다르다.

 

s o
http://www.w3.org/2002/07/owl#Thing "Thing"
http://www.w3.org/2002/07/owl#Class "Class"
http://www.w3.org/2002/07/owl#Nothing "Nothing"

 

반응형

 

차이점이 보이는가?

그렇다. 열의 개수가 다르다.

OPTIONAL은 각 속성에 따른 열을 모두 표시했지만, | 을 사용했을 때는 하나의 변수만 목적부로 작성했기 때문에 작성했던 변수의 여러 개의 속성이 o열에 여러 행으로 나누어 출력된다.

 

그렇기 때문에 이전 글에서 사용했던 GROUP_CONCAT을 사용하면, 아래와 같이 여러 개의 행이 하나의 행으로 다시 그룹화된 상태로 출력되는 것을 확인할 수 있다!

 

SPARQL 쿼리 ]

PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>

SELECT ?s (GROUP_CONCAT(?o; separator = "//////////") AS ?os)
WHERE {
    ?s rdfs:label|rdfs:comment|foaf:name ?o.
}

 

결과 예 ]

s os
http://dbpedia.org/resource/Vulcanodon 불카노돈//////////불카노돈(Vulcanodon)는 트라이아스기후기에서 쥐라기전기에 걸쳐, 오늘날 아프리카 대륙에서 서식한 4족보행의 초식공룡이다. '용반류'-'용각형아목'-'불카노돈과'에 속한다. 최초 화석은 짐바브웨에서 발견되었는데, 화산암 속에서 발굴되었다. 학명은 "화산의 이빨"이라는 뜻을 갖고 있다. 전체 몸 길이는 약6.5m 정도 되었을 것으로 추정된다. 앞다리는 비교적 길고, 각 다리 끝에는 날카롭지는 않은 갈고리 모양의 발톱이 있다.//////////불카노돈

 

🤞 도움이 되셨기를 바랍니다. 한 번의 클릭과 댓글은 어딘가의 누군가에게 진실로 큰 힘이 됩니다. 🐱‍🏍

 

728x90
반응형

댓글