맨위로가기

SPARQL

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

SPARQL은 월드 와이드 웹 컨소시엄(W3C)에서 표준화한 RDF(Resource Description Framework) 데이터에 접근하기 위한 쿼리 언어이다. SPARQL은 RDF 데이터의 "주어-술어-객체" 삼중항 구조를 기반으로 쿼리를 작성하며, 재귀적 탐색과 파이프라인 방식을 통해 복잡한 데이터 관계를 표현한다. SELECT, CONSTRUCT, ASK, DESCRIBE의 네 가지 쿼리 형식을 제공하며, SPARQL 1.0은 2008년, SPARQL 1.1은 2013년에 W3C 권고안으로 발표되었다. 지오SPARQL, SPARUL, XSPARQL 등의 확장도 존재하며, 다양한 트리플 저장소와 API에서 구현되어 사용된다.

더 읽어볼만한 페이지

  • 자원 기술 프레임워크 - 웹 온톨로지 언어
    웹 온톨로지 언어(OWL)는 시맨틱 웹 구축을 위한 지식 표현 언어로, W3C 웹 표준이며, 온톨로지 명시적 표현을 통해 데이터 공유 및 재사용을 가능하게 하고, 기술 논리에 기반하여 표현력 수준에 따라 다양한 종류를 제공한다.
  • 자원 기술 프레임워크 - 데이터 카탈로그 어휘
  • 데이터 모델링 언어 - 임베디드 SQL
    임베디드 SQL은 호스트 프로그래밍 언어 내에 SQL 문을 삽입하여 데이터베이스와 상호 작용하는 기술로, 데이터베이스 액세스를 표준화하지만 보안 취약점과 이식성 저하의 단점도 가진다.
  • 데이터 모델링 언어 - 데이터 정의 언어
    데이터 정의 언어(DDL)는 SQL에서 테이블, 열, 데이터 형식 등을 정의하고 데이터베이스 스키마를 수정하는 데 사용되는 명령어 집합이며, `CREATE`, `DROP`, `ALTER`, `TRUNCATE` 등의 명령어를 포함하고 데이터 구조를 정의하는 다양한 형식 언어들을 포괄하는 의미로도 사용된다.
  • 질의 언어 - 임베디드 SQL
    임베디드 SQL은 호스트 프로그래밍 언어 내에 SQL 문을 삽입하여 데이터베이스와 상호 작용하는 기술로, 데이터베이스 액세스를 표준화하지만 보안 취약점과 이식성 저하의 단점도 가진다.
  • 질의 언어 - XQuery
    XQuery는 함수형 프로그래밍 패러다임을 지원하며 XPath 식 구문의 상위 집합을 포함하는 XML 데이터 추출 및 조작을 위한 쿼리 언어로서, FLWOR 식을 통해 XML 데이터 조작 및 새로운 XML 문서 구성을 지원하고 XQuery 및 XPath 데이터 모델(XDM)을 기반으로 한다.
SPARQL - [IT 관련 정보]에 관한 문서
개요
RDF 데이터를 질의하기 위한 SPARQL 프로토콜 및 RDF 질의 언어 (SPARQL) 로고
유형쿼리 언어
고안 연도2008년 1월 15일
개발자W3C
최신 버전1.1
최신 릴리스 날짜2013년 3월 21일
구현체아파치 제나
OpenLink Virtuoso
웹사이트SPARQL 1.1 쿼리
명칭
전체 명칭SPARQL 프로토콜 및 RDF 쿼리 언어
추가 정보
참고 자료SPARQL, 웹을 빛나게 할 것이다
XML 및 웹 서비스 뉴스
Sparql 구현 - ESW Wiki
SPARQL 쿼리를 자동으로 구성하는 도구 ViziQuer
D2R 서버
SPARQL2XQuery 프레임워크

2. 역사

SPARQL은 월드 와이드 웹 컨소시엄(W3C)의 ''RDF 데이터 접근 작업 그룹''(DAWG)에 의해 표준화되었다.

W3C 권고에 이르는 과정은 다음과 같다:

# 2006년 4월 권고 후보

# 2006년 10월 두 가지 문제로 초안으로 되돌아감[19]

# 2007년 6월 SPARQL 1.0 다시 권고 후보[20]

# 2008년 1월 15일 SPARQL 1.0 W3C 권고[21]

# 2013년 3월 21일 SPARQL 1.1 W3C 권고[22]

3. 특징

SPARQL은 RDF 데이터를 쿼리하기 위한 W3C 표준 질의 언어 및 프로토콜이다. RDF 데이터는 기본적으로 "주어-술어-객체" 형태의 삼중항(triple)으로 구성된다. 여기서 주어와 술어는 일반적으로 URI 식별자이며, 객체는 URI 또는 리터럴 값(문자열, 숫자 등)이 될 수 있다. 이는 데이터를 매우 유연하게 표현할 수 있게 하지만, 관계형 데이터베이스와는 다른 접근 방식이 필요하다.

SPARQL은 이러한 삼중항 데이터를 효과적으로 다루기 위한 여러 특징을 가지고 있다. 주어와 객체를 이용해 연결된 데이터를 재귀적으로 탐색하는 기능, 표현식을 파이프라인처럼 순차적으로 처리하는 방식, 다양한 데이터 타입을 유연하게 처리하는 능력 등이 포함된다. 또한, 스키마 정보가 데이터 자체에 포함되거나 외부 온톨로지를 통해 제공될 수 있어, 별도의 엄격한 스키마 정의 없이도 `JOIN`, `SORT`, `AGGREGATE`와 같은 복잡한 분석 쿼리가 가능하다. 특히 그래프 구조를 가지는 데이터의 탐색에 유용한 구문을 제공하며, 여러 데이터 소스에 분산된 정보를 한 번에 조회하는 연합 쿼리 기능도 지원한다.

SPARQL은 월드 와이드 웹 컨소시엄(W3C)의 ''RDF 데이터 접근 작업 그룹''(DAWG)에 의해 표준화되었다. 표준화 과정은 다음과 같다.

날짜상태
2006년 4월권고 후보 (Candidate Recommendation)
2006년 10월초안으로 회귀[19]
2007년 6월SPARQL 1.0 다시 권고 후보[20]
2008년 1월 15일SPARQL 1.0 W3C 권고 (W3C Recommendation)[21]
2013년 3월 21일SPARQL 1.1 W3C 권고[22]



SPARQL 엔드포인트는 SPARQL 쿼리를 받아 처리하고 그 결과를 반환하는 서비스 인터페이스를 의미하며, 이를 통해 웹 상의 RDF 데이터에 접근하고 활용할 수 있다.

3. 1. 장점



SELECT ?name ?email

WHERE

{

?person a foaf:Person . # ?person은 foaf:Person 타입이다

?person foaf:name ?name . # ?person의 이름은 ?name이다

?person foaf:mbox ?email . # ?person의 이메일은 ?email이다

}



이 쿼리는 타입 술어 "a"를 사용하여 `foaf:Person` 타입이고, `foaf:name`(이름)과 `foaf:mbox`(이메일 주소) 속성을 가진 모든 주어(`?person`)를 찾아 그 이름과 이메일을 반환한다. 변수 이름 `?person`은 가독성을 위해 사용되었으며, 다른 이름(예: `?x`)을 사용해도 동일하게 동작한다. 임의의 `?person`이 여러 이메일 주소를 가질 수 있으므로, 결과에서 동일한 `?name`이 여러 번 나타날 수 있다.

또한, SPARQL은 연합 쿼리(Federated Query)를 지원한다. 이는 여러 다른 SPARQL 엔드포인트(쿼리 서비스)에 쿼리를 보내고, 각 서비스에서 반환된 결과를 통합하는 기능이다. 이를 통해 분산된 여러 데이터 소스를 마치 하나의 데이터 소스처럼 쿼리할 수 있다. 예를 들어, 위 FOAF 쿼리에 자동차 정보를 가진 다른 데이터 소스를 연합하여 '연료 효율이 좋은 차를 가진 사람들의 이름과 이메일 목록'을 얻는 등의 확장이 가능하다.

4. 질의 형식



SELECT ?name ?email

WHERE

{

?person a foaf:Person .

?person foaf:name ?name .

?person foaf:mbox ?email .

}



이 쿼리는 여러 SPARQL 엔드포인트(SPARQL 쿼리를 수신하고 결과를 반환하는 서비스)에 분산되어 실행되고 그 결과를 통합할 수 있는데, 이를 연합 쿼리(Federated Query)라고 한다.

SPARQL 언어는 데이터 조회 목적에 따라 네 가지 다른 쿼리 형식을 정의한다.

쿼리 형식설명
SELECTSPARQL 엔드포인트에서 원시 값을 추출하여 표 형식으로 반환한다. 가장 일반적인 형태이다.
CONSTRUCTSPARQL 엔드포인트에서 정보를 추출하여 그 결과를 유효한 RDF 삼중항 형태로 재구성하여 반환한다.
ASK쿼리 패턴과 일치하는 데이터가 존재하는지 여부를 확인하여 간단한 참(True)/거짓(False) 결과를 반환한다.
DESCRIBE특정 리소스(URI)에 대해 엔드포인트가 유용하다고 판단하는 관련 정보들을 RDF 그래프 형태로 반환한다. 반환 내용은 엔드포인트 구현에 따라 다를 수 있다.



이러한 쿼리 형식들은 대부분 WHERE 절을 사용하여 조회할 데이터의 패턴을 명시하지만, DESCRIBE 쿼리에서는 WHERE 절이 필수는 아니다.

SPARQL 1.1 버전에서는 INSERT, DELETE 등 데이터베이스의 내용을 수정하기 위한 업데이트 관련 쿼리 형식들도 추가되었다.

5. 구문

SPARQL은 RDF 데이터를 질의하기 위한 W3C 표준 언어이다. SPARQL 쿼리는 기본적으로 RDF 데이터의 기본 구조인 주어-술어-객체 형태의 삼중항(Triple)을 패턴 매칭하는 방식으로 동작한다.

기본적인 SPARQL 쿼리는 다음과 같은 주요 부분으로 구성된다.


  • 접두사 선언 (PREFIX): URI의 전체 경로 대신 짧은 접두사를 사용하여 쿼리의 가독성을 높인다. 필수는 아니지만 자주 사용된다.
  • 쿼리 결과 형식 정의: 어떤 형태로 결과를 반환할지 지정한다.
  • `SELECT`: 변수에 바인딩된 값을 표 형태로 반환한다. 가장 일반적으로 사용된다.
  • `CONSTRUCT`: 쿼리 결과로부터 새로운 RDF 그래프를 생성하여 반환한다.
  • `ASK`: 쿼리 패턴과 일치하는 데이터가 존재하는지 여부를 참/거짓(True/False)으로 반환한다.
  • `DESCRIBE`: 특정 URI 리소스에 대한 RDF 설명을 반환한다. 반환되는 내용의 범위는 SPARQL 엔드포인트 구현에 따라 다를 수 있다.
  • 쿼리 패턴 정의 (WHERE): 실제 데이터와 매칭될 트리플 패턴들을 정의하는 부분이다. 이 패턴에는 변수가 포함될 수 있으며, 쿼리 엔진은 `WHERE` 절의 모든 패턴을 만족하는 데이터 삼중항을 찾아 변수에 값을 바인딩한다.


다음은 "아프리카 국가의 수도"를 찾는 간단한 `SELECT` 쿼리 예시로, 기본적인 구문 구조를 보여준다.



PREFIX ex: # 'ex:' 접두사 정의

SELECT ?capital ?country # ?capital과 ?country 변수 값 반환 요청

WHERE { # 쿼리 패턴 시작

?x ex:cityname ?capital ; # ?x의 도시 이름은 ?capital 이고,

ex:isCapitalOf ?y . # ?x는 ?y의 수도이다.

?y ex:countryname ?country ; # ?y의 국가 이름은 ?country 이고,

ex:isInContinent ex:Africa . # ?y는 아프리카 대륙에 속한다.

} # 쿼리 패턴 끝



쿼리 내에서 변수는 `?` 또는 `$` 기호로 시작하여 표시한다(예: `?capital`, `$country`).

가독성을 높이기 위해 몇 가지 약식 표현이 사용된다.

  • 세미콜론 (`;`): 한 트리플 패턴 이후 세미콜론이 오면, 다음 술어-객체 쌍은 앞 패턴과 동일한 주어를 공유한다. 위 예제의 `?x ex:cityname ?capital ; ex:isCapitalOf ?y .`는 `?x ex:cityname ?capital .`와 `?x ex:isCapitalOf ?y .` 두 트리플 패턴을 합쳐 쓴 것이다.
  • 접두사 (`PREFIX`): `PREFIX ex: `와 같이 선언하여 긴 URI `http://example.com/exampleOntology#`를 `ex:`라는 짧은 이름으로 대체하여 사용한다.


SPARQL 1.0은 주로 데이터를 조회하는 네 가지 쿼리 형식(SELECT, CONSTRUCT, ASK, DESCRIBE)을 정의했다. 이후 SPARQL 1.1에서는 `UPDATE` 관련 구문이 추가되어 RDF 데이터를 생성, 수정, 삭제하는 기능까지 표준화되었다.

5. 1. 변수

SPARQL에서 변수는 ? 또는 $ 문자로 시작하여 식별한다.

다음은 "아프리카의 모든 국가 수도는?"이라는 질문에 대한 SPARQL 쿼리 예제이다.



PREFIX ex:

SELECT ?capital ?country

WHERE {

?x ex:cityname ?capital ;

ex:isCapitalOf ?y .

?y ex:countryname ?country ;

ex:isInContinent ex:Africa .

}



이 쿼리에서 ?capital?country는 변수에 해당하며, 쿼리 실행 결과로 이 변수들에 바인딩된 값들을 반환한다.

5. 2. 트리플 패턴

SPARQL 쿼리는 RDF 데이터를 질의하기 위한 언어로, W3C 사양을 따른다. RDF 데이터는 기본적으로 "주어-술어-객체" 형태의 트리플(triple) 구조로 표현된다. 여기서 주어와 술어는 URI 식별자이고, 객체는 URI 또는 리터럴(literal) 값일 수 있다.

SPARQL 쿼리의 핵심은 이러한 RDF 트리플 구조에 기반한 트리플 패턴(triple pattern)이다. 쿼리 프로세서는 주어진 트리플 패턴과 일치하는 실제 RDF 트리플 데이터 집합을 검색하고, 패턴 내의 변수들을 해당 트리플의 요소(주어, 술어, 객체)에 바인딩(binding)한다.

아래는 "아프리카의 모든 국가 수도는?"이라는 질문을 SPARQL로 표현한 예시 쿼리이다. 이 쿼리는 트리플 패턴이 어떻게 사용되는지 보여준다.



PREFIX ex:

SELECT ?capital

?country

WHERE

{

?x ex:cityname ?capital ;

ex:isCapitalOf ?y .

?y ex:countryname ?country ;

ex:isInContinent ex:Africa .

}



이 쿼리의 `WHERE` 절은 네 개의 트리플 패턴으로 구성되어 있다.

1. `?x ex:cityname ?capital .`

2. `?x ex:isCapitalOf ?y .`

3. `?y ex:countryname ?country .`

4. `?y ex:isInContinent ex:Africa .`

쿼리 프로세서는 데이터 저장소에서 이 네 가지 패턴 모두와 일치하는 트리플들의 조합을 찾는다. 일치하는 조합이 발견되면, 각 패턴의 변수들(`?x`, `?y`, `?capital`, `?country`)은 실제 트리플의 해당 부분(주어, 술어, 객체)에 해당하는 값으로 바인딩된다. `SELECT` 절에 명시된 `?capital`과 `?country` 변수에 바인딩된 값들이 최종 결과로 반환된다.

  • 변수: SPARQL에서 변수는 `?` 또는 `$` 기호로 시작한다. 예를 들어 `?capital`, `$country`와 같이 사용한다.
  • 약식 표현:
  • 세미콜론 (`;`): 한 트리플 패턴이 세미콜론으로 끝나면, 바로 다음에 오는 술어-객체 쌍은 앞선 패턴과 동일한 주어를 공유하는 것으로 간주된다. 위의 예시에서 `?x ex:cityname ?capital ; ex:isCapitalOf ?y .` 부분은 사실상 아래 두 트리플 패턴을 짧게 표현한 것이다.

```sparql

?x ex:cityname ?capital .

?x ex:isCapitalOf ?y .

```

  • 접두사 (`PREFIX`): URI는 보통 길기 때문에, 쿼리 내에서 반복적으로 사용하면 가독성이 떨어진다. 이를 해결하기 위해 Turtle과 유사하게 `PREFIX` 키워드를 사용하여 특정 URI의 시작 부분을 짧은 접두사로 정의할 수 있다. 위 예시의 `PREFIX ex: `는 `ex:`라는 접두사가 `http://example.com/exampleOntology#`라는 긴 URI를 대신함을 선언한다. 따라서 쿼리 내에서 `ex:cityname`은 실제로는 `http://example.com/exampleOntology#cityname`이라는 전체 URI를 의미하게 된다. 이를 통해 쿼리를 더 간결하고 읽기 쉽게 만들 수 있다.

5. 3. 연산자

# foaf 네임스페이스 정의

SELECT ?name ?email # 이름과 이메일 반환 요청

WHERE

{

?person a foaf:Person . # ?person이 foaf:Person 타입인지 확인 (a는 rdf:type의 축약형)

?person foaf:name ?name . # ?person의 이름(foaf:name)을 ?name 변수에 바인딩

?person foaf:mbox ?email . # ?person의 메일함(foaf:mbox)을 ?email 변수에 바인딩

}



이 쿼리는 `WHERE` 절의 조건들을 만족하는 삼중항들을 조인한다. 즉, 타입이 `foaf:Person`이고, `foaf:name`과 `foaf:mbox` 속성을 가진 주어(`?person`)를 찾는다. `SELECT` 절은 조인 결과에서 `?name`과 `?email` 값만 반환한다. 변수 이름 `?person`은 가독성을 위해 사용되었으며, 다른 이름(예: `?x`)을 사용해도 동일하게 동작한다. 한 사람이 여러 이메일 주소를 가질 수 있으므로, 결과에서 동일한 이름이 여러 번 나타날 수 있다.

'''연합 쿼리 및 확장'''

이러한 SPARQL 쿼리는 여러 SPARQL 엔드포인트(쿼리 처리 서비스)에 분산되어 실행되고 그 결과를 종합할 수 있는데, 이를 연합 쿼리(Federated Query)라고 한다. 또한, 쿼리에 다른 유형의 주어(예: 자동차 정보)에 대한 삼중항 패턴을 추가하여 더 복잡한 정보를 검색하도록 쉽게 확장할 수 있다. 예를 들어, 특정 연비 기준을 만족하는 자동차를 소유한 사람들의 이름과 이메일을 찾는 쿼리도 가능하다.

6. 예제



SELECT ?name ?email

WHERE {

?person a foaf:Person .

?person foaf:name ?name .

?person foaf:mbox ?email .

}



이 쿼리는 다음 조건을 만족하는 삼중항들을 찾는다.


  • 어떤 개체(`?person`)가 FOAF에서 정의한 사람(`foaf:Person`) 타입이다. (`a`는 `rdf:type`의 줄임 표현이다.)
  • 그 사람(`?person`)은 이름(`foaf:name`)으로 `?name` 값을 갖는다.
  • 그 사람(`?person`)은 이메일 주소(`foaf:mbox`)로 `?email` 값을 갖는다.


쿼리 결과로는 `?name`과 `?email`에 해당하는 값들이 반환된다. `?person` 변수는 보통 사람이 직접 읽기 어려운 URI 형태일 경우가 많아 결과에서 제외하는 경우가 많다. 임의의 `?person`이 여러 메일함을 가질 수 있으므로, 반환된 세트에서 특정 `?name` 행이 메일함마다 한 번씩 여러 번 나타날 수 있다.

이러한 쿼리는 하나의 SPARQL 엔드포인트(쿼리를 받아 처리하고 결과를 반환하는 서비스)에서 실행될 수도 있고, 여러 엔드포인트에 분산되어 실행된 후 결과를 통합하는 연합 쿼리 형태로 사용될 수도 있다. 연합 방식이든 로컬 방식이든, 쿼리에 추가 삼중항 정의를 더하여 자동차와 같은 다른 주어 유형에 조인하는 것도 가능하다. 예를 들어, 연료 효율이 높은 자동차를 운전하는 사람들의 이름과 이메일 목록을 반환하는 간단한 쿼리를 만들 수 있다.

'''SPARQL 구문의 특징'''

SPARQL은 단순한 데이터 검색 외에도 몇 가지 강력한 특징을 제공한다.

'''1. 주어와 객체를 이용한 재귀적 탐색'''

SPARQL은 데이터 간의 연결 관계를 따라가는 데 유용하다. 예를 들어, 다음과 같은 연결 관계 데이터가 있다고 가정해보자.



ex:sw001 ex:linksWith ex:sw003 .

ex:sw002 ex:linksWith ex:sw003 .

ex:sw003 ex:linksWith ex:sw004 , ex:sw006 . # ex:sw003은 ex:sw004와 ex:sw006에 연결됨

ex:sw004 ex:linksWith ex:sw005 .



`ex:sw003`에 연결된 모든 개체(즉, `ex:sw003`을 목적지로 삼는 연결)를 찾으려면 다음과 같이 쿼리할 수 있다. `BIND`는 특정 값을 변수에 미리 할당하는 기능이다.



SELECT *

WHERE {

BIND(ex:sw003 AS ?targets) # ?targets 변수에 ex:sw003 값을 할당

?src ex:linksWith ?targets . # ?targets에 연결된 ?src를 찾음

}



결과로는 `?src`에 `ex:sw001`과 `ex:sw002`가 바인딩된다. 반대로, `ex:sw003`에서 시작하는 모든 연결(즉, `ex:sw003`을 출발지로 삼는 연결)을 찾으려면 `BIND` 부분을 다음과 같이 수정하면 된다.



SELECT *

WHERE {

BIND(ex:sw003 AS ?src) # ?src 변수에 ex:sw003 값을 할당

?src ex:linksWith ?targets . # ?src에서 연결된 ?targets를 찾음 (구문 변경 없음!)

}



결과로는 `?targets`에 `ex:sw004`와 `ex:sw006`이 바인딩된다.

더 나아가, SPARQL은 속성 경로(property path)를 사용하여 여러 단계의 연결을 한 번에 탐색할 수 있다. 예를 들어 `ex:linksWith+`는 `ex:linksWith` 관계를 한 번 이상 따라가는 모든 경로를 의미한다.



SELECT *

WHERE {

BIND(ex:sw003 AS ?src)

?src ex:linksWith+ ?targets . # ex:linksWith 관계를 한 번 이상 따라감 (+ 기호 주목)

}



이 쿼리는 `ex:sw003`에서 시작하여 `ex:linksWith` 관계로 연결된 모든 개체를 찾는다. 따라서 `ex:sw004`, `ex:sw006` 뿐만 아니라, `ex:sw004`를 통해 연결된 `ex:sw005`까지 결과(`?targets`)에 포함된다. 바인딩된 변수는 목록처럼 동작할 수 있어 복잡한 구문 없이도 유연한 탐색이 가능하다.

'''2. 표현식 파이프라인'''

하위 쿼리 및 CTE가 있는 SQL과 달리 SPARQL은 MongoDB 또는 SPARK와 훨씬 더 유사하게, 표현식이 필터링 및 데이터 조인을 포함하여 선언된 순서대로 정확하게 평가되는 파이프라인처럼 동작한다. 프로그래밍 모델은 여러 `WHERE` 절이 있는 SQL 문과 유사하게 된다. 목록을 인식하는 주어와 객체, 그리고 파이프라인 접근 방식의 조합은 매우 다양한 데이터 도메인에 걸쳐 매우 표현력이 풍부한 쿼리를 생성할 수 있게 한다.

관계형 데이터베이스와 달리 객체 열은 이질적(heterogeneous)이다. 객체 데이터 유형은 URI가 아닌 경우 일반적으로 술어 값에 의해 암시되거나 온톨로지에 지정된다. 리터럴 노드는 부호 있는/없는 정수, 단정밀도/배정밀도 부동 소수점, 날짜/시간, 10진수, 부울, 문자열 등 기본 XSD 네임스페이스와 일치하는 타입 정보를 전달한다.

따라서 SPARQL은 별도의 스키마 정의를 요구하는 대신 본질적으로 데이터의 일부인 스키마 정보를 가진 데이터에 대해 `JOIN`, `SORT`, `AGGREGATE`와 같은 완전한 분석 쿼리 연산자 집합을 제공한다. 물론, 스키마 정보(온톨로지)는 종종 외부에서 제공되어 다양한 데이터 세트의 모호하지 않은 조인을 허용하기도 한다. 또한 SPARQL은 그래프로 간주될 수 있는 데이터에 대한 특정 그래프 순회 구문을 제공한다.

7. 확장

지오SPARQL은 잘 알려진 OGC 표준(GML, WKT 등)을 사용하여 지리 정보 시스템 (GIS) 쿼리에 대한 필터 함수를 정의한다.

SPARUL은 SPARQL의 또 다른 확장으로, 이 선언적 쿼리 언어를 통해 RDF 저장소를 업데이트할 수 있다. 이를 위해 `INSERT` 및 `DELETE` 메서드를 추가한다.

XSPARQL은 XQuery와 SPARQL을 결합한 통합 쿼리 언어이다. 이를 통해 XMLRDF 데이터 소스를 동시에 쿼리할 수 있다.[13]

8. 구현체

주요 오픈 소스 SPARQL 구현체는 다음과 같다.



SPARQL 구현 목록에서 트리플 저장소, API 및 SPARQL 표준을 구현한 기타 저장소를 포함한 더 포괄적인 내용을 확인할 수 있다.

SPARQL 엔드포인트는 SPARQL을 통해 자원을 검색하고 분석하는 기능을 제공하는 인터페이스이다. 다음은 몇 가지 예시이다.

  • [https://github.com/complexible/pellet Pellet OWL 추론기] (원본 링크 http://pellet.owldl.com/ 는 연결되지 않아 Github 링크로 대체)
  • [https://github.com/semsol/arc2 ARC] (원본 링크 http://b4mad.net/sparqs/ 는 연결되지 않아 Github 링크로 대체)
  • [http://sparql.org/sparql.html SPARQLer]
  • [http://demo.openlinksw.com/sparql Virtuoso Universal Server]
  • [http://DBpedia.org/sparql DBpedia]

9. 한국 관련 SPARQL 엔드포인트

(작성할 내용 없음)

10. 추가 정보

SPARQL은 월드 와이드 웹 컨소시엄(W3C)의 ''RDF 데이터 접근 작업 그룹''(DAWG)에 의해 표준화되었다.

W3C 권고에 이르는 과정은 다음과 같다.


  • 2006년 4월 권고 후보
  • 2006년 10월 두 가지 문제로 초안으로 되돌아감[19]
  • 2007년 6월 SPARQL 1.0 다시 권고 후보[20]
  • 2008년 1월 15일 SPARQL 1.0 W3C 권고[21]
  • 2013년 3월 21일 SPARQL 1.1 W3C 권고[22]

  • 가토 후미히코, 가와시마 슈이치, 오카베후 요코, 야마모토 야스토모, 가타야마 토시아키 (著), 『오픈 데이터 시대의 표준 Web API SPARQL』, Impress R&D, 2015년 11월 13일. ISBN 978-4802090438.
  • [https://www.w3.org/2004/Talks/1124-orf-sw/slide16-0.html SPARQL의 주요 특징]
  • [http://www.w3.org/2001/sw/DataAccess/ W3C RDF 데이터 액세스 작업 그룹]
  • [http://www.xml.com/pub/a/2005/11/16/introducing-sparql-querying-semantic-web-tutorial.html XML.com: SPARQL 소개: 시맨틱 웹 쿼리]
  • [https://www.w3.org/TR/sparql11-overview/ SPARQL 쿼리 언어]
  • [https://www.asahi-net.or.jp/~ax2s-kmtn/internet/rdf/REC-sparql11-overview-20130321.html SPARQL 쿼리 언어의 일본어판]
  • [https://www.w3.org/TR/rdf-sparql-protocol/ SPARQL 프로토콜]
  • [https://www.asahi-net.or.jp/~ax2s-kmtn/internet/rdf/rdf-sparql-protocol.html SPARQL 프로토콜의 일본어판]
  • [https://www.w3.org/TR/rdf-sparql-XMLres/ SPARQL 쿼리 XML 결과 형식]
  • [https://www.asahi-net.or.jp/~ax2s-kmtn/internet/rdf/rdf-sparql-xmlres.html SPARQL 쿼리 XML 결과 형식의 일본어판]
  • [http://thefigtrees.net/lee/sw/sparql-faq SPARQL 자주 묻는 질문]
  • [http://jena.sourceforge.net/ARQ/Tutorial/index.html Jena/ARQ 사이트의 SPARQL 튜토리얼]
  • [http://www.franz.com/products/allegrograph/ AllegroGraph RDFStore]
  • [http://protege.stanford.edu/ Protégé]
  • [http://sites.wiwiss.fu-berlin.de/suhl/bizer/rdfapi/ PHP용 RDF API]
  • [http://www.topbraidcomposer.com TopBraid Composer]
  • [http://esw.w3.org/topic/SparqlCalendarDemo SPARQL Calendar Demo]
  • [http://www.sparqlets.org/clipboard/demo SPARQL & Web Clipboard Demo]

참조

[1] 웹사이트 What does SPARQL stand for? http://lists.w3.org/[...] 2011-10-06
[2] 웹사이트 SPARQL Will Make the Web Shine http://www.eweek.com[...] 2007-01-17
[3] 서적 Programming the Semantic Web O’Reilly Media, Inc., 1005 Gravenstein Highway North, Sebastopol, CA 95472
[4] 웹사이트 W3C Semantic Web Activity News – SPARQL is a Recommendation http://www.w3.org/bl[...] W3.org 2009-10-01
[5] 웹사이트 XML and Semantic Web W3C Standards Timeline http://www.dblab.ntu[...] 2013-11-27
[6] 웹사이트 Eleven SPARQL 1.1 Specifications are W3C Recommendations http://www.w3.org/bl[...] w3.org 2013-04-25
[7] 웹사이트 XML and Web Services in the News http://www.xml.org/x[...] 2007-01-17
[8] 웹사이트 SparqlImplementations – ESW Wiki http://esw.w3.org/to[...] Esw.w3.org 2009-10-01
[9] 웹사이트 ViziQuer a tool to construct SPARQL queries automatically http://viziquer.lumi[...] lumii.lv 2011-02-25
[10] 웹사이트 D2R Server http://www4.wiwiss.f[...] 2012-02-04
[11] 웹사이트 SPARQL2XQuery Framework http://www.dblab.ntu[...] 2012-02-04
[12] 서적 A Developer's Guide to the Semantic Web Springer
[13] 웹사이트 XSPARQL published as a W3C Submission https://www.w3.org/b[...] W3.org 2022-05-22
[14] 서적 Semantic Web Programming https://archive.org/[...] John Wiley & Sons, Inc.
[15] 웹사이트 SPARQL Will Make the Web Shine http://www.eweek.com[...] 2007-01-17
[16] 웹사이트 XML and Web Services In The News http://www.xml.org/x[...] 2007-01-17
[17] 웹사이트 SparqlImplementations – ESW Wiki http://esw.w3.org/to[...] Esw.w3.org 2009-10-01
[18] 뉴스 Berners-Lee looks for Web's big leap http://news.zdnet.co[...] 2007-01-17
[19] 웹사이트 SPARQL Query Language for RDF : W3C Working Draft https://www.w3.org/T[...] 2007-01-17
[20] 문서 http://www.w3.org/blog/SW/2007/06/15/sparql_is_a_candidate_recommendation
[21] 문서 W3C Semantic Web Activity News - SPARQL is a Recommendation http://www.w3.org/bl[...]
[22] 웹사이트 Eleven SPARQL 1.1 Specifications are W3C Recommendations http://www.w3.org/bl[...] w3.org 2013-04-25
[23] 서적 Semantic Web Programming https://archive.org/[...] John Wiley & Sons
[24] 웹인용 What does SPARQL stand for? http://lists.w3.org/[...] 2011-10-06
[25] 웹인용 SPARQL Will Make the Web Shine http://www.eweek.com[...] 2007-01-17
[26] 서적 Programming the Semantic Web https://archive.org/[...] O’Reilly Media, Inc., 1005 Gravenstein Highway North, Sebastopol, CA 95472
[27] 웹인용 W3C Semantic Web Activity News – SPARQL is a Recommendation http://www.w3.org/bl[...] W3.org 2009-10-01
[28] 웹인용 XML and Semantic Web W3C Standards Timeline http://www.dblab.ntu[...] 2013-11-27
[29] 웹인용 Eleven SPARQL 1.1 Specifications are W3C Recommendations http://www3.org/blog[...] w3.org 2013-04-25
[30] 웹인용 XML and Web Services In The News http://www.xml.org/x[...] 2007-01-17
[31] 웹인용 SparqlImplementations – ESW Wiki http://esw.w3.org/to[...] Esw.w3.org 2009-10-01
[32] 웹인용 ViziQuer a tool to construct SPARQL queries automatically http://viziquer.lumi[...] lumii.lv 2011-02-25
[33] 웹인용 D2R Server http://www4.wiwiss.f[...] 2012-02-04
[34] 웹인용 SPARQL2XQuery Framework http://www.dblab.ntu[...] 2012-02-04



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com