Copyright © 2008-2026 World Wide Web Consortium. W3C® liability, trademark and permissive document license rules apply.
SPARQL 프로토콜 및 RDF 질의 언어(SPARQL)는 RDF를 위한 질의 언어이자 프로토콜입니다. 이 문서는 SPARQL 프로토콜을 명시하며, SPARQL 질의 및 업데이트를 SPARQL 처리 서비스에 전달하고 그 결과를 HTTP를 통해 이를 요청한 엔티티에 반환하기 위한 수단을 설명합니다. 이 프로토콜은 W3C SPARQL 워킹 그룹에서 개발했으며, 시맨틱 웹 활동의 일부로서 활동 선언문에 설명되어 있습니다.
이 절은 이 문서가 게시된 시점의 상태를 설명합니다. 현재 W3C 간행물 목록과 이 기술 보고서의 최신 개정판은 W3C 표준 및 초안 색인에서 확인할 수 있습니다.
이 명세는 형식 및 정오표 명세 업데이트의 일부로 RDF Star 워킹 그룹에서 게시했습니다.
이 문서는 RDF & SPARQL 워킹 그룹이 권고안 트랙을 사용하여 워킹 드래프트로 게시했습니다.
워킹 드래프트로 게시되었다고 해서 W3C와 그 회원들이 승인했다는 의미는 아닙니다.
이 문서는 초안 문서이며 언제든지 다른 문서로 갱신, 대체 또는 폐기될 수 있습니다. 이 문서를 진행 중인 작업 이외의 것으로 인용하는 것은 적절하지 않습니다. 향후 이 예정 권고안의 업데이트에는 새 기능이 포함될 수 있습니다.
이 문서는 W3C 특허 정책에 따라 운영되는 그룹에서 작성했습니다. W3C는 이 그룹의 산출물과 관련하여 이루어진 모든 특허 공개의 공개 목록을 유지합니다. 해당 페이지에는 특허 공개 지침도 포함되어 있습니다. 개인이 필수 청구항을 포함한다고 믿는 특허를 실제로 알고 있는 경우, 그 개인은 W3C 특허 정책 제6절에 따라 정보를 공개해야 합니다.
이 문서는 2025년 8월 18일 W3C 프로세스 문서의 적용을 받습니다.
이 문서는 SPARQL 1.2 프로토콜, 즉 클라이언트에서 SPARQL 프로세서로 SPARQL 질의와 업데이트를 전달하기 위한 수단을 설명합니다. SPARQL 프로토콜은 SPARQL 1.2 질의 언어 및 SPARQL 1.2 업데이트와의 호환성을 위해 설계되었습니다. 이 문서는 주로 SPARQL 질의 및 업데이트 서비스와 클라이언트 구현에 관심 있는 소프트웨어 개발자를 대상으로 합니다.
SPARQL 프로토콜은 두 가지 HTTP 작업으로 구성됩니다. SPARQL 질의 언어 질의를 수행하기 위한 질의 작업과 SPARQL 업데이트 언어 요청을 수행하기 위한 업데이트 작업입니다. SPARQL 프로토콜 클라이언트는 요청을 처리하고 원래 클라이언트로 HTTP 응답을 되돌려 보내는 SPARQL 프로토콜 서비스에 HTTP 요청을 보냅니다.
별도의 문서는 REST 아키텍처 스타일에서 그래프 컬렉션을 관리할 목적으로 HTTP 작업을 사용하는 방법을 설명하는 SPARQL 1.2 그래프 저장소 프로토콜을 설명합니다.
이 문서에서 해야 한다, 해서는 안 된다, 하는 것이 좋다, 하지 않는 것이 좋다, 및 할 수 있다라는 단어를 사용하고, 그 단어들이 강조 텍스트로 나타나는 경우, [RFC2119]에 설명된 대로 해석해야 합니다.
SPARQL 프로토콜은 query와 update라는 두 작업으로 구성됩니다. 프로토콜 작업은 다음의 조합을 정의합니다.
SPARQL 1.2 프로토콜은 HTTP 위에 구축됩니다. 요청과 응답에 대한 모든 HTTP 요구사항은 준수해야 합니다.
엔드포인트로 질의 또는 업데이트 작업을 보낼 때, 이 작업의 버전은
구문상의 version 지시자를 사용하거나,
version 매개변수(사용된 HTTP 메서드에 따라 달라짐)를 전달하여
공지할 수 있습니다.
버전이 구문과 매개변수 양쪽 모두에 표시된 경우, 둘은 동일해야 합니다. 서로 다를 경우, 파서는 매개변수의 버전을 사용하고 불일치에 대한 경고를 낼 수 있습니다.
이전 파서와 가능한 한 폭넓은 호환성을 유지하기 위해, SPARQL 1.2 전용 기능을 사용하는 질의에 한해서만 버전을 공지하는 것이 권장됩니다(즉, SPARQL 1.2 전용 기능을 사용하지 않는 질의의 경우 버전을 공지하지 않는 것이 좋습니다).
작업에 대한 응답도 버전 공지를 포함할 수 있습니다. SPARQL 결과 버전 또는 RDF 버전은 요청에 지정된 작업 버전과 반드시 같지는 않습니다. 대신 버전 공지는 응답과 그 형식에 따라 달라지며, 예를 들면 SPARQL 1.2 질의 결과 JSON 형식 또는 RDF 1.2 Turtle과 같습니다.
버전 문자열의 값은 RDF 1.2 개념 및 추상 데이터 모델에서 논의됩니다.
query 작업은 SPARQL 질의를 서비스로 보내고 그 질의의 결과를 받는 데 사용됩니다.
질의 작업은 HTTP GET 또는 HTTP POST 메서드 중 하나로 호출되어야 합니다.
이 작업에 대한 클라이언트 요청은 정확히 하나의 SPARQL 질의 문자열
(매개변수 이름: query)을 포함해야 하며,
버전(매개변수 이름: version)을 포함할 수 있고,
0개 이상의 기본 그래프 URI(매개변수 이름: default-graph-uri)와 명명된 그래프
URI(매개변수 이름: named-graph-uri)를 포함할 수 있습니다.
질의 요청에 대한 응답은 질의 형식과 콘텐츠 협상 [RFC9110]에 따라 SPARQL 결과 또는 RDF에 대응하는 형식이어야 합니다. 그러한 형식의 예는 다음과 같습니다.
| HTTP 메서드 | 질의 문자열 매개변수 | 요청 콘텐츠 유형 | 요청 메시지 본문 | |
|---|---|---|---|---|
| GET을 통한 query | GET | query (정확히 1개)version (0개 또는 1개)default-graph-uri (0개 이상)named-graph-uri (0개 이상)
|
없음 | 없음 |
| URL 인코딩 POST를 통한 query | POST | 없음 | application/x-www-form-urlencoded |
URL 인코딩되고 앰퍼샌드로 구분된 질의 매개변수.query (정확히 1개)version (0개 또는 1개)default-graph-uri (0개 이상)named-graph-uri (0개 이상)
|
| POST 직접 전송을 통한 query | POST | default-graph-uri (0개 이상)named-graph-uri (0개 이상)
|
application/sparql-query (선택적 version 미디어 유형
매개변수 포함) |
인코딩되지 않은 SPARQL 질의 문자열 |
query 요청의 매개변수는 다음 세 가지 옵션 중 하나에 따라
전송되어야 합니다.
프로토콜 클라이언트는 HTTP GET 메서드를 통해 프로토콜 요청을 보낼 수 있습니다. GET 메서드를 사용할 때, 클라이언트는 모든 매개변수를 URL 퍼센트 인코딩해야 하며, 위에 주어진 이름으로 질의 매개변수 문자열 [RFC3986]로 포함해야 합니다.
HTTP 질의 문자열 매개변수는 앰퍼샌드
(&) 문자로 구분되어야 합니다. 클라이언트는 질의 문자열 매개변수를 임의의 순서로 포함할 수 있습니다.
HTTP 요청은 메시지 본문을 포함해서는 안 됩니다.
프로토콜 클라이언트는 매개변수를 URL 인코딩하여 HTTP POST 메서드를 통해
프로토콜 요청을 보낼 수 있습니다. 이 메서드를 사용할 때, 클라이언트는 모든 매개변수를 URL
퍼센트 인코딩 [RFC3986]해야
하며, 위에 주어진 이름을 사용하여 요청 본문 내의 매개변수로
application/x-www-form-urlencoded 미디어 유형을 통해 포함해야 합니다. 매개변수는
앰퍼샌드(&) 문자로 구분되어야 합니다. 클라이언트는
매개변수를 임의의 순서로 포함할 수 있습니다. HTTP 요청의 콘텐츠 유형 헤더는
application/x-www-form-urlencoded로 설정되어야 합니다.
프로토콜 클라이언트는 HTTP 요청 메시지 본문으로 질의를 직접, 인코딩하지 않은 채 포함하여
HTTP POST 메서드를 통해 프로토콜 요청을 보낼 수 있습니다. 이
방식을 사용할 때, 클라이언트는 SPARQL 질의 문자열을 인코딩하지 않은 채 포함해야 하며,
요청의 메시지 본문에는 그 외 아무것도 포함해서는 안 됩니다. 클라이언트는 HTTP 요청의
콘텐츠 유형 헤더를 application/sparql-query로 설정해야 하며, 선택적
version 미디어 유형 매개변수를 포함할 수 있습니다. 클라이언트는 선택적
default-graph-uri 및 named-graph-uri
매개변수를 요청 URI의 HTTP 질의 문자열 매개변수로 포함할 수 있습니다. 여기서 UTF-8만이 유효한
문자셋이라는 점에 유의하십시오.
SPARQL 질의는 RDF 데이터셋에 대해 실행됩니다.
질의에 대한 RDF 데이터셋은 SPARQL 프로토콜의
default-graph-uri 및 named-graph-uri 매개변수를 통해 지정하거나,
FROM 및 FROM NAMED 키워드를 사용하여 SPARQL 질의 문자열 안에서
지정할 수 있습니다. 프로토콜 요청과 SPARQL 질의 문자열 양쪽에 서로 다른 RDF 데이터셋이
지정된 경우, SPARQL 서비스는 프로토콜 요청에 주어진 RDF
데이터셋을 사용하여 질의를 실행해야 합니다.
서비스가 프로토콜 클라이언트가 RDF 데이터셋을 지정하는 것을 허용하지 않는 경우, 서비스는 HTTP 응답 코드 400으로 질의를 거부할 수 있음에 유의하십시오.
프로토콜 요청이나 SPARQL 질의 문자열 어느 쪽에도 RDF 데이터셋이 지정되지 않은 경우, 구현은 구현에서 정의한 기본 RDF 데이터셋에 대해 질의를 실행할 수 있습니다.
프로토콜 클라이언트는 클라이언트가 소비할 수 있는 응답 형식을 요청하기 위해 HTTP 콘텐츠 협상 [RFC9110]을 사용하는 것이 좋습니다. 가능한 응답 형식에 대한 자세한 내용은 아래를 참조하십시오.
SPARQL 프로토콜은 작업의 성공 또는 실패를 나타내기 위해 HTTP에서 정의한 응답 상태 코드를 사용합니다. 각 상태 코드의 자세한 정의는 HTTP 명세 [RFC9110]를 참조하십시오. 프로토콜 서비스는 성공적인 질의에 대해 2XX HTTP 응답 코드를 사용하는 것이 좋지만, HTTP에 따라 대신 3XX 응답 코드를 사용할 수 있습니다.
2XX 응답을 가진 성공적인 질의 작업의 응답 본문은 다음 중 하나입니다.
성공적인 질의 작업에 대한 응답의 콘텐츠 유형은 응답 본문의 형식에 대해 정의된 미디어 유형이어야 합니다.
실패한 질의 작업에 적용되는 HTTP 응답 코드는 다음을 포함합니다.
실패한 질의 요청의 응답 본문은 구현 정의입니다. 구현은 실패한 질의 요청에 대한 사람이 읽을 수 있거나 기계가 처리할 수 있는 (또는 둘 다의) 정보를 제공하기 위해 HTTP 콘텐츠 협상을 사용할 수 있습니다.
프로토콜 서비스는 HTTP에 따라 다른 실패 조건에 대해 다른 4XX 또는 5XX HTTP 응답 코드를 사용할 수 있습니다.
update 작업은 SPARQL 업데이트 요청을 서비스로 보내는 데 사용됩니다. 업데이트
작업은 HTTP POST 메서드를 사용하여 호출되어야 합니다. 이 작업에 대한
클라이언트 요청은 정확히 하나의 SPARQL 업데이트 요청 문자열(매개변수
이름: update)을 포함해야 하며, 버전(매개변수 이름:
version)과 0개 이상의 기본 그래프
URI(매개변수 이름: using-graph-uri) 및 명명된 그래프 URI(매개변수 이름:
using-named-graph-uri)를 포함할 수 있습니다. 업데이트 요청에 대한 응답은
HTTP 응답 상태 코드를 통해 요청의 성공 또는 실패를 나타냅니다.
| HTTP 메서드 | 질의 문자열 매개변수 | 요청 콘텐츠 유형 | 요청 메시지 본문 | |
|---|---|---|---|---|
| URL 인코딩 POST를 통한 update | POST | 없음 | application/x-www-form-urlencoded |
URL 인코딩되고 앰퍼샌드로 구분된 질의 매개변수.version (0개 또는 1개)update (정확히 1개)using-graph-uri (0개 이상)using-named-graph-uri (0개 이상)
|
| POST 직접 전송을 통한 update | POST | using-graph-uri (0개 이상)using-named-graph-uri (0개 이상)
|
application/sparql-update (선택적 version 미디어 유형
매개변수 포함) |
인코딩되지 않은 SPARQL 업데이트 요청 문자열 |
update 요청의 매개변수는 다음 두 가지 옵션 중 하나에 따라
전송되어야 합니다.
프로토콜 클라이언트는 매개변수를 URL 인코딩하여 HTTP POST 메서드를 통해
업데이트 프로토콜 요청을 보낼 수 있습니다. 이 방식을 사용할 때, 클라이언트는 모든 매개변수를 URL
퍼센트
인코딩해야 하며, 위에 주어진 이름을 사용하여 요청 본문 내의 매개변수로
application/x-www-form-urlencoded 미디어 유형을 통해 포함해야 합니다. 매개변수는
앰퍼샌드(&) 문자로 구분되어야 합니다. 클라이언트는
매개변수를 임의의 순서로 포함할 수 있습니다. HTTP 요청의 콘텐츠 유형 헤더는
application/x-www-form-urlencoded로 설정되어야 합니다.
프로토콜 클라이언트는 HTTP 요청 메시지 본문으로 업데이트 요청을 직접, 인코딩하지 않은 채 포함하여
HTTP POST 메서드를 통해 업데이트 프로토콜 요청을 보낼 수 있습니다. 이
방식을 사용할 때, 클라이언트는 SPARQL 업데이트 요청 문자열을 인코딩하지 않은 채 포함해야
하며, 요청의 메시지 본문에는 그 외 아무것도 포함해서는 안 됩니다. 클라이언트는 HTTP 요청의
콘텐츠 유형 헤더를 application/sparql-update로 설정해야 하며, 선택적
version 미디어 유형 매개변수를 포함할 수 있습니다. 클라이언트는 선택적
using-graph-uri 및
using-named-graph-uri 매개변수를 요청 URI의 HTTP 질의 문자열 매개변수로 포함할
수 있습니다.
SPARQL 업데이트 요청은 SPARQL 서비스가 관리하는 RDF 그래프의 변경 가능한 컨테이너인
그래프 저장소에 대해 실행됩니다. SPARQL 업데이트 DELETE/INSERT 작업의
WHERE 절은 그래프 저장소의 하위 집합인
RDF 데이터셋의 데이터와 매치됩니다.
업데이트 작업에 대한 RDF 데이터셋은 USING, USING NAMED 및/또는
WITH 키워드를 사용하여 작업 문자열 자체 안에 지정할 수 있으며, 또는
using-graph-uri 및
using-named-graph-uri 매개변수를 통해 지정할 수도 있습니다.
USING, USING NAMED 또는 WITH 절을 사용하는 작업을
포함하는 SPARQL 1.2 업데이트 요청을 이 프로토콜로 전달할 때
using-graph-uri 또는 using-named-graph-uri
매개변수를 제공하는 것은 오류입니다.
SPARQL 업데이트 프로세서는 업데이트 프로토콜 작업에서 using-graph-uri=g
매개변수가 나타날 때마다 SPARQL 1.2 업데이트 요청의 모든 작업에 대해
USING <g> 절이 포함된 것처럼 처리하는 것이 좋습니다. 마찬가지로 SPARQL 업데이트 프로세서는
업데이트 프로토콜 작업에서 using-named-graph-uri=g 매개변수가 나타날 때마다
SPARQL 1.2 업데이트 요청의 모든 작업에 대해
USING NAMED <g> 절이 포함된 것처럼 처리하는 것이 좋습니다.
SPARQL 프로토콜은 작업의 성공 또는 실패를 나타내기 위해 HTTP에서 정의한 응답 상태 코드를 사용합니다.
각 상태 코드의 자세한 정의는 HTTP 명세
[RFC9110]를 참조하십시오.
프로토콜 서비스는 성공적으로 처리된 업데이트 요청에 대해
2XX HTTP 응답 코드를 사용하는 것이 좋지만, HTTP에 따라 대신
3XX
응답 코드를 사용할 수 있습니다.
성공적인 업데이트 요청의 응답 본문은 구현 정의입니다. 구현은 완료된 업데이트 요청에 대한 사람이 읽을 수 있고 기계가 처리할 수 있는 정보를 모두 제공하기 위해 HTTP 콘텐츠 협상을 사용할 수 있습니다.
실패한 업데이트 요청에 대한 HTTP 응답 코드는 다음이어야 합니다.
실패한 업데이트 요청의 응답 본문은 구현 정의입니다. 구현은 실패한 업데이트 요청에 대한 사람이 읽을 수 있거나 기계가 처리할 수 있는 (또는 둘 다의) 정보를 제공하기 위해 HTTP 콘텐츠 협상을 사용할 수 있습니다.
프로토콜 서비스는 HTTP에 따라 다른 실패 조건에 대해 다른 4XX 또는 5XX HTTP 응답 코드를 사용할 수 있습니다.
SPARQL 질의 또는 SPARQL 업데이트 요청 문자열의 BASE 키워드는
Uniform
Resource Identifier (URI): Generic
Syntax 5.1.1절 "콘텐츠에 포함된 기준 URI"에 따라 상대 IRI를 해석하는 데
사용되는 기준 IRI를 정의합니다. SPARQL 프로토콜은
질의 URI를 역참조하지 않으므로 5.1.3절은 적용되지 않습니다. 마지막으로 5.1.4절에 따라
SPARQL 프로토콜 서비스는 자체 기준 URI를 정의해야 하며,
이는 서비스 엔드포인트일 수 있습니다.
다음 HTTP 추적 예는 여러 다른 시나리오에서 query 및 update
작업을 호출하는 방법을 보여 줍니다. 일부 예제 추적은
완전한 HTTP 추적에서 다음과 같은 방식으로 추상화되었습니다.
query 작업 예의 경우, 질의 결과를 포함하는 부분 응답 본문만
표시됩니다.이 SPARQL 질의
PREFIX dc: <http://purl.org/dc/elements/1.1/>
SELECT ?book ?who
WHERE { ?book dc:creator ?who }
는 이 HTTP 추적에 보인 것처럼 HTTP GET을 통해 SPARQL 질의 서비스
http://www.example/sparql/로 전달됩니다.
GET /sparql/?query=PREFIX%20dc%3A%20%3Chttp%3A%2F%2Fpurl.org%2Fdc%2Felements%2F1.1%2F%3E%20%0ASELECT%20%3Fbook%20%3Fwho%20%0AWHERE%20%7B%20%3Fbook%20dc%3Acreator%20%3Fwho%20%7D%0A HTTP/1.1 Host: www.example User-agent: my-sparql-client/0.1
해당 SPARQL 질의 서비스가 실행한 서비스 제공 RDF 데이터셋에 대한 이 질의는 다음 질의 결과를 반환합니다.
HTTP/1.1 200 OK
Date: Fri, 06 May 2005 20:55:12 GMT
Server: Apache/1.3.29 (Unix) PHP/4.3.4 DAV/1.0.3
Connection: close
Content-Type: application/sparql-results+xml
<?xml version="1.0"?>
<sparql xmlns="http://www.w3.org/2005/sparql-results#">
<head>
<variable name="book"/>
<variable name="who"/>
</head>
<results>
<result>
<binding name="book"><uri>http://www.example/book/book5</uri></binding>
<binding name="who"><bnode>r29392923r2922</bnode></binding>
</result>
...
</sparql>
이 SPARQL 질의
PREFIX dc: <http://purl.org/dc/elements/1.1/>
SELECT ?book ?who
WHERE { ?book dc:creator ?who }
는 이 HTTP 추적에 보인 것처럼 SPARQL 질의 서비스
http://www.other.example/sparql/로 전달됩니다.
GET /sparql/?query=PREFIX%20dc%3A%20%3Chttp%3A%2F%2Fpurl.org%2Fdc%2Felements%2F1.1%2F%3E%20%0ASELECT%20%3Fbook%20%3Fwho%20%0AWHERE%20%7B%20%3Fbook%20dc%3Acreator%20%3Fwho%20%7D%0A&default-graph-uri=http%3A%2F%2Fwww.other.example%2Fbooks HTTP/1.1 Host: www.other.example User-agent: my-sparql-client/0.1
해당 SPARQL 질의
서비스가 실행한 default-graph-uri 매개변수 값
http://www.other.example/books으로 식별되는 RDF 데이터셋에 대한 이 질의는
다음 질의 결과를 반환합니다.
HTTP/1.1 200 OK Date: Fri, 06 May 2005 20:55:12 GMT Server: Apache/1.3.29 (Unix) PHP/4.3.4 DAV/1.0.3 Connection: close Content-Type: application/sparql-results+xml <?xml version="1.0"?> <sparql xmlns="http://www.w3.org/2005/sparql-results#"> <head> <variable name="book"/> <variable name="who"/> </head> ... </sparql>
이 SPARQL 질의
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX myfoaf: <http://www.example/jose/foaf.rdf#>
CONSTRUCT { myfoaf:jose foaf:depiction <http://www.example/jose/jose.jpg>.
myfoaf:jose foaf:schoolHomepage <http://www.edu.example/>.
?s ?p ?o.}
WHERE { ?s ?p ?o. myfoaf:jose foaf:nick "Jo".
FILTER ( ! (?s = myfoaf:kendall && ?p = foaf:knows && ?o = myfoaf:edd )
&& ! ( ?s = myfoaf:julia && ?p = foaf:mbox && ?o = <mailto:julia@mail.example> )
&& ! ( ?s = myfoaf:julia && ?p = rdf:type && ?o = foaf:Person))
}
는 이 HTTP 추적에 보인 것처럼 SPARQL 질의 서비스
http://www.example/sparql/로 전달됩니다.
GET /sparql/?query=EncodedQuery&default-graph-uri=http%3A%2F%2Fwww.example%2Fjose-foaf.rdf HTTP/1.1 Host: www.example User-agent: sparql-client/0.1 Accept: text/turtle, application/rdf+xml
응답은 다음과 같습니다.
HTTP/1.1 200 OK
Date: Fri, 06 May 2005 20:55:11 GMT
Server: Apache/1.3.29 (Unix)
Connection: close
Content-Type: text/turtle
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX myfoaf: <http://www.example/jose/foaf.rdf#>
myfoaf:jose foaf:name "Jose Jimeñez";
foaf:depiction <http://www.example/jose/jose.jpg>;
foaf:nick "Jo";
...
이 SPARQL 질의
PREFIX dc: <http://purl.org/dc/elements/1.1/>
ASK WHERE { ?book dc:creator "J.K. Rowling"}
는 이 HTTP 추적에 보인 것처럼 SPARQL 질의 서비스
http://www.example/sparql/로 전달됩니다.
GET /sparql/?query=EncodedQuery&default-graph-uri=http%3A%2F%2Fwww.example%2Fbooks HTTP/1.1 Host: www.example User-agent: sparql-client/0.1
응답은 다음과 같습니다.
HTTP/1.1 200 OK Date: Fri, 06 May 2005 20:48:25 GMT Server: Apache/1.3.29 (Unix) PHP/4.3.4 DAV/1.0.3 Connection: close Content-Type: application/sparql-results+xml <?xml version="1.0"?> <sparql xmlns="http://www.w3.org/2005/sparql-results#"> <head></head> <boolean>true</boolean> </sparql>
이 SPARQL 질의
PREFIX books: <http://www.example/book/> DESCRIBE books:book6
는 다음에 보인 것처럼 SPARQL 질의 서비스
http://www.example/sparql/로 전달됩니다.
GET /sparql/?query=EncodedQuery&default-graph-uri=http%3A%2F%2Fwww.example%2Fbooks HTTP/1.1 Host: www.example User-agent: sparql-client/0.1
응답은 다음과 같습니다.
HTTP/1.1 200 OK
Date: Wed, 03 Aug 2005 12:48:25 GMT
Server: Apache/1.3.29 (Unix) PHP/4.3.4 DAV/1.0.3
Connection: close
Content-Type: application/rdf+xml
<?xml version="1.0"?>
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:books="http://www.example/book/"
xmlns:dc="http://purl.org/dc/elements/1.1/" >
<rdf:Description rdf:about="http://www.example/book/book6">
<dc:title>Example Book #6 </dc:title>
</rdf:Description>
</rdf:RDF>
이 SPARQL 질의
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX dc: <http://purl.org/dc/elements/1.1/>
SELECT ?who ?g ?mbox
WHERE { ?g dc:publisher ?who .
GRAPH ?g { ?x foaf:mbox ?mbox }
}
는 여기 보인 것처럼(가독성을 위해 줄바꿈을 포함하여) SPARQL 질의 서비스 http://www.example/sparql/ 로 전달됩니다.
GET /sparql/?query=EncodedQuery&default-graph-uri=http%3A%2F%2Fwww.example%2Fpublishers &default-graph-uri=http%3A%2F%2Fwww.example%2Fmorepublishers&named-graph-uri=http%3A%2F%2Fyour.example%2Ffoaf-alice &named-graph-uri=http%3A%2F%2Fwww.example%2Ffoaf-bob&named-graph-uri=http%3A%2F%2Fwww.example%2Ffoaf-susan &named-graph-uri=http%3A%2F%2Fthis.example%2Fjohn%2Ffoaf Host: www.example User-agent: sparql-client/0.1
응답은 다음과 같습니다.
HTTP/1.1 200 OK
Date: Wed, 03 Aug 2005 12:48:25 GMT
Server: Apache/1.3.29 (Unix) PHP/4.3.4 DAV/1.0.3
Connection: close
Content-Type: application/sparql-results+xml
<?xml version="1.0"?>
<sparql xmlns="http://www.w3.org/2005/sparql-results#">
<head>
<variable name="who"/>
<variable name="g"/>
<variable name="mbox"/>
</head>
...
</sparql>
이 SPARQL 질의
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX dc: <http://purl.org/dc/elements/1.1/>
SELECT ?who ?g ?mbox
FROM <http://www.example/publishers>
FROM NAMED <http://www.example/alice>
FROM NAMED <http://www.example/bob>
WHERE { ?g dc:publisher ?who .
GRAPH ?g { ?x foaf:mbox ?mbox }
}
는 이 HTTP 추적에 보인 것처럼 SPARQL 질의 서비스
http://www.example/sparql/로 전달됩니다.
GET /sparql/?query=EncodedQuery HTTP/1.1 Host: www.example User-agent: sparql-client/0.1
응답은 다음과 같습니다.
HTTP/1.1 200 OK Date: Wed, 03 Aug 2005 12:48:25 GMT Server: Apache/1.3.29 (Unix) PHP/4.3.4 DAV/1.0.3 Connection: close Content-Type: application/sparql-results+xml <?xml version="1.0"?> <sparql xmlns="http://www.w3.org/2005/sparql-results#"> ... </sparql>
이 SPARQL 질의
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX dc: <http://purl.org/dc/elements/1.1/>
SELECT ?who ?g ?mbox
FROM <http://www.example/publishers>
FROM NAMED <http://www.example/john>
FROM NAMED <http://www.example/susan>
WHERE { ?g dc:publisher ?who .
GRAPH ?g { ?x foaf:mbox ?mbox }
}
는 이 HTTP 추적에 보인 것처럼 SPARQL 질의 서비스
http://www.example/sparql/로 전달됩니다.
GET /sparql/?query=EncodedQuery&default-graph-uri=http%3A%2F%2Fwww.example%2Fmorepublishers &named-graph-uri=http%3A%2F%2Fwww.example%2Fbob&named-graph-uri=http%3A%2F%2Fwww.example%2Falice HTTP/1.1 Host: www.example User-agent: sparql-client/0.1
이 프로토콜 작업에는 모호한 RDF 데이터셋이 포함되어 있습니다. 질의에 지정된 데이터셋이
프로토콜에(default-graph-uri 및 named-graph-uri
매개변수를 통해) 지정된 데이터셋과 다릅니다. 적합한 SPARQL
프로토콜 서비스는 프로토콜에 지정된 RDF 데이터셋에 대해 질의를 실행하여
이 모호성을 해결해야 합니다.
HTTP/1.1 200 OK
Date: Wed, 03 Aug 2005 12:48:25 GMT
Server: Apache/1.3.29 (Unix) PHP/4.3.4 DAV/1.0.3
Connection: close
Content-Type: application/sparql-results+xml
<?xml version="1.0"?>
<sparql xmlns="http://www.w3.org/2005/sparql-results#">
<head>
<variable name="who"/>
<variable name="g"/>
<variable name="mbox"/>
</head>
<results>
<result>
<binding name="who">
<literal>Bob Hacker</literal>
</binding>
<binding name="g">
<uri>http://www.example/bob</uri>
</binding>
<binding name="mbox">
<uri>mailto:bob@oldcorp.example</uri>
</binding>
</result>
<result>
<binding name="who">
<literal>Alice Hacker</literal>
</binding>
<binding name="g">
<uri>http://www.example/alice</uri>
</binding>
<binding name="mbox">
<uri>mailto:alice@work.example</uri>
</binding>
</result>
</results>
</sparql>
구문적으로 유효하지 않은 이 SPARQL 질의
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
SELECT ?name
WHERE { ?x foaf:name ?name
ORDER BY ?name }
는 이 HTTP 추적에 보인 것처럼 SPARQL 질의 서비스
http://www.example/sparql/로 전달됩니다.
GET /sparql/?query=EncodedQuery&default-graph-uri=http%3A%2F%2Fwww.example%2Fmorepublishers HTTP/1.1 Host: www.example User-agent: sparql-client/0.1
오류 응답은 다음과 같습니다.
HTTP/1.1 400 Bad Request Date: Wed, 03 Aug 2005 12:48:25 GMT Server: Apache/1.3.29 (Unix) PHP/4.3.4 DAV/1.0.3 Connection: close Content-Type: text/plain; charset=UTF-8 4:syntax error, unexpected ORDER, expecting '}'
이 SPARQL 질의
PREFIX bio: <http://bio.example/schema/#>
SELECT ?valence
FROM <http://another.example/protein-db.rdf>
WHERE { ?x bio:protein ?valence }
ORDER BY ?valence
는 이 HTTP 추적에 보인 것처럼 SPARQL 질의 서비스
http://www.example/sparql/로 전달됩니다.
GET /sparql/?query=EncodedQuery&default-graph-uri=http%3A%2F%2Fanother.example%2Fprotein-db.rdf HTTP/1.1 Host: www.example User-agent: sparql-client/0.1
오류 응답은 다음과 같습니다.
HTTP/1.1 500 Internal Server Error Date: Wed, 03 Aug 2005 12:48:25 GMT Server: Apache/1.3.29 (Unix) PHP/4.3.4 DAV/1.0.3 Connection: close Content-Type: text/plain SPARQL Processing Service: Query Request Refused Your request could not be processed because http://another.example/protein-db.rdf could not be retrieved within the time alloted.
일부 SPARQL 질의는, 아마도 기계가 생성한 경우, 2.1.1 GET을 통한 query에 설명된 HTTP GET 바인딩을 통해 안정적으로 전달하기에는 너무 길 수 있습니다. 이러한 경우 2.1.2 URL 인코딩 매개변수와 함께 POST를 통한 query에 설명된 POST 바인딩을 사용할 수 있습니다. 이 SPARQL 질의
PREFIX : <http://www.w3.org/2002/12/cal/icaltzd#>
PREFIX Chi: <http://www.w3.org/2002/12/cal/test/Chiefs.ics#>
PREFIX New: <http://www.w3.org/2002/12/cal/tzd/America/New_York#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
SELECT ?summary
WHERE {
{
Chi:D603E2AC-C1C9-11D6-9446-003065F198AC a :Vevent;
:dtend "2002-09-08T16:00:00"^^New:tz;
:dtstamp "2002-09-06T03:09:27Z"^^xsd:dateTime;
:dtstart "2002-09-08T13:00:00"^^New:tz;
:summary ?summary;
:uid "D603E2AC-C1C9-11D6-9446-003065F198AC" .
}
UNION
{
Chi:D603E90B-C1C9-11D6-9446-003065F198AC a :Vevent;
:dtend "2002-09-15T16:00:00"^^New:tz;
:dtstamp "2002-09-06T03:10:19Z"^^xsd:dateTime;
:dtstart "2002-09-15T13:00:00"^^New:tz;
:summary ?summary;
:uid "D603E90B-C1C9-11D6-9446-003065F198AC" .
}
UNION
{
Chi:D603ED6E-C1C9-11D6-9446-003065F198AC a :Vevent;
:dtend "2002-09-22T16:00:00"^^New:tz;
:dtstamp "2002-09-06T03:11:05Z"^^xsd:dateTime;
:dtstart "2002-09-22T13:00:00"^^New:tz;
:summary ?summary;
:uid "D603ED6E-C1C9-11D6-9446-003065F198AC" .
}
UNION
{
Chi:D603F18C-C1C9-11D6-9446-003065F198AC a :Vevent;
:dtend "2002-09-29T16:00:00"^^New:tz;
:dtstamp "2002-09-06T03:15:46Z"^^xsd:dateTime;
:dtstart "2002-09-29T13:00:00"^^New:tz;
:summary ?summary;
:uid "D603F18C-C1C9-11D6-9446-003065F198AC" .
}
UNION
{
Chi:D603F5B7-C1C9-11D6-9446-003065F198AC a :Vevent;
:dtend "2002-11-04"^^xsd:date;
:dtstamp "2002-09-06T03:12:53Z"^^xsd:dateTime;
:dtstart "2002-11-03"^^xsd:date;
:summary ?summary;
:uid "D603F5B7-C1C9-11D6-9446-003065F198AC" .
}
UNION
{
Chi:D603F9D7-C1C9-11D6-9446-003065F198AC a :Vevent;
:dtend "2002-11-10T20:15:00"^^New:tz;
:dtstamp "2002-09-06T03:14:12Z"^^xsd:dateTime;
:dtstart "2002-11-10T17:15:00"^^New:tz;
:summary ?summary;
:uid "D603F9D7-C1C9-11D6-9446-003065F198AC" .
}
UNION
{
Chi:D604022C-C1C9-11D6-9446-003065F198AC a :Vevent;
:dtend "2002-11-17T17:00:00"^^New:tz;
:dtstamp "2002-09-06T03:14:51Z"^^xsd:dateTime;
:dtstart "2002-11-17T14:00:00"^^New:tz;
:summary ?summary;
:uid "D604022C-C1C9-11D6-9446-003065F198AC" .
}
UNION
{
Chi:D604065C-C1C9-11D6-9446-003065F198AC a :Vevent;
:dtend "2002-10-06T19:05:00"^^New:tz;
:dtstamp "2002-09-06T03:16:54Z"^^xsd:dateTime;
:dtstart "2002-10-06T16:05:00"^^New:tz;
:summary ?summary;
:uid "D604065C-C1C9-11D6-9446-003065F198AC" .
}
UNION
{
Chi:D6040A7E-C1C9-11D6-9446-003065F198AC a :Vevent;
:dtend "2002-10-13T19:15:00"^^New:tz;
:dtstamp "2002-09-06T03:17:51Z"^^xsd:dateTime;
:dtstart "2002-10-13T16:15:00"^^New:tz;
:summary ?summary;
:uid "D6040A7E-C1C9-11D6-9446-003065F198AC" .
}
UNION
{
Chi:D6040E96-C1C9-11D6-9446-003065F198AC a :Vevent;
:dtend "2002-10-20T16:00:00"^^New:tz;
:dtstamp "2002-09-06T03:18:32Z"^^xsd:dateTime;
:dtstart "2002-10-20T13:00:00"^^New:tz;
:summary ?summary;
:uid "D6040E96-C1C9-11D6-9446-003065F198AC" .
}
UNION
{
Chi:D6041270-C1C9-11D6-9446-003065F198AC a :Vevent;
:dtend "2002-10-27T17:00:00"^^New:tz;
:dtstamp "2002-09-06T03:19:15Z"^^xsd:dateTime;
:dtstart "2002-10-27T14:00:00"^^New:tz;
:summary ?summary;
:uid "D6041270-C1C9-11D6-9446-003065F198AC" .
}
UNION
{
Chi:D6041673-C1C9-11D6-9446-003065F198AC a :Vevent;
:dtend "2002-11-24T20:05:00"^^New:tz;
:dtstamp "2002-09-06T03:22:09Z"^^xsd:dateTime;
:dtstart "2002-11-24T17:05:00"^^New:tz;
:summary ?summary;
:uid "D6041673-C1C9-11D6-9446-003065F198AC" .
}
UNION
{
Chi:D6041A73-C1C9-11D6-9446-003065F198AC a :Vevent;
:dtend "2002-12-01T17:00:00"^^New:tz;
:dtstamp "2002-09-06T03:22:52Z"^^xsd:dateTime;
:dtstart "2002-12-01T14:00:00"^^New:tz;
:summary ?summary;
:uid "D6041A73-C1C9-11D6-9446-003065F198AC" .
}
UNION
{
Chi:D60421EF-C1C9-11D6-9446-003065F198AC a :Vevent;
:dtend "2002-12-08T17:00:00"^^New:tz;
:dtstamp "2002-09-06T03:24:04Z"^^xsd:dateTime;
:dtstart "2002-12-08T14:00:00"^^New:tz;
:summary ?summary;
:uid "D60421EF-C1C9-11D6-9446-003065F198AC" .
}
UNION
{
Chi:D6042660-C1C9-11D6-9446-003065F198AC a :Vevent;
:dtend "2002-12-15T20:05:00"^^New:tz;
:dtstamp "2002-09-06T03:25:03Z"^^xsd:dateTime;
:dtstart "2002-12-15T17:05:00"^^New:tz;
:summary ?summary;
:uid "D6042660-C1C9-11D6-9446-003065F198AC" .
}
UNION
{
Chi:D6042A93-C1C9-11D6-9446-003065F198AC a :Vevent;
:dtend "2002-12-22T17:00:00"^^New:tz;
:dtstamp "2002-09-06T03:25:47Z"^^xsd:dateTime;
:dtstart "2002-12-22T14:00:00"^^New:tz;
:summary ?summary;
:uid "D6042A93-C1C9-11D6-9446-003065F198AC" .
}
UNION
{
Chi:D6042EDF-C1C9-11D6-9446-003065F198AC a :Vevent;
:dtend "2002-12-28T21:00:00"^^New:tz;
:dtstamp "2002-09-06T03:26:51Z"^^xsd:dateTime;
:dtstart "2002-12-28T18:00:00"^^New:tz;
:summary ?summary;
:uid "D6042EDF-C1C9-11D6-9446-003065F198AC" .
}
}
는 이 HTTP 추적에 보인 것처럼 SPARQL 질의 서비스
http://www.example/sparql/로 전달됩니다.
POST /sparql/ HTTP/1.1 Host: www.example User-agent: sparql-client/0.1 Content-Type: application/x-www-form-urlencoded Content-Length: 9461 query=EncodedQuery&default-graph-uri=http%3A%2F%2Fanother.example%2Fcalendar.rdf
응답은 다음과 같습니다.
HTTP/1.1 200 OK
Date: Wed, 03 Aug 2005 12:48:25 GMT
Server: Apache/1.3.29 (Unix) PHP/4.3.4 DAV/1.0.3
Connection: close
Content-Type: application/sparql-results+xml
<?xml version="1.0"?>
<sparql xmlns="http://www.w3.org/2005/sparql-results#">
<head>
<variable name="summary"/>
</head>
<results>
<result>
<binding name="summary">
<literal>Chiefs vs. Cleveland @ Cleveland Stadium</literal>
</binding>
</result>
<result>
<binding name="summary">
<literal>Chiefs vs. Jacksonville @ Arrowhead Stadium</literal>
</binding>
</result>
<result>
<binding name="summary">
<literal>Chiefs vs. New England @ Gillette Stadium</literal>
</binding>
</result>
...
<result>
<binding name="summary">
<literal>Chiefs vs. Oakland @ Network Associates Coliseum</literal>
</binding>
</result>
</results>
</sparql>
SPARQL 질의는 2.1.3 POST 직접 전송을 통한 query에 설명된 것처럼
URL 인코딩 없이 직접 POST될 수도 있습니다. 이전 예에서 사용한 동일한 질의가 이 HTTP 추적에 보인 것처럼
SPARQL 질의 서비스
http://www.example/sparql/로 전달됩니다.
POST /sparql/?default-graph-uri=http%3A%2F%2Fanother.example%2Fcalendar.rdf HTTP/1.1 Host: www.example User-agent: sparql-client/0.1 Content-Type: application/sparql-query UnencodedQuery
응답은 이전 예와 동일합니다.
SPARQL 질의는 국제화된 문자나 문자 집합을 포함할 수 있습니다. 이 SPARQL 질의
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX 食: <http://www.w3.org/2001/sw/DataAccess/tests/data/i18n/kanji.ttl#>
SELECT ?name ?food
WHERE { [ foaf:name ?name ; 食:食べる ?food ] . }
는 이 HTTP 추적에 보인 것처럼 SPARQL 질의 서비스
http://www.example/sparql/로 전달됩니다.
GET /sparql/?query=PREFIX%20foaf%3A%20%3Chttp%3A%2F%2Fxmlns.com%2Ffoaf%2F0.1%2F%3E%0APREFIX%20%E9%A3%9F%3A%20%3Chttp%3A%2F%2Fwww.w3.org%2F2001%2Fsw%2FDataAccess%2Ftests%2Fdata%2Fi18n%2Fkanji.ttl%23%3E%0ASELECT%20%3Fname%20%3Ffood%20%0AWHERE%20%7B%20%5B%20foaf%3Aname%20%3Fname%20%3B%20%E9%A3%9F%3A%E9%A3%9F%E3%81%B9%E3%82%8B%20%3Ffood%20%5D%20.%20%7D Host: www.example User-agent: sparql-client/0.1
HTTP/1.1 200 OK Date: Wed, 03 Aug 2005 12:48:25 GMT Server: Apache/1.3.29 (Unix) Connection: close Content-Type: application/sparql-results+xml <?xml version="1.0"?> <sparql xmlns="http://www.w3.org/2005/sparql-results#"> ... </sparql>
SPARQL 질의는 구체화된 트리플을 대상으로 할 수 있습니다. 이 SPARQL 질의
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX ex: <http://example.org/>
SELECT ?name ?person
WHERE { << _:a foaf:name ?name >> ex:statedBy ?person . }
는 SPARQL 질의 서비스 http://www.example/sparql/로 전달됩니다. 이 질의는
SPARQL 1.2 구문을 사용하지만 구문적으로 1.2 버전을 공지하지 않으므로,
GET 요청은 version=1.2 매개변수를 사용하여 발행됩니다. 이는
이 HTTP 추적에 보입니다.
GET /sparql/?query=PREFIX%20foaf%3A%20%3Chttp%3A%2F%2Fxmlns.com%2Ffoaf%2F0.1%2F%3E%0APREFIX%20ex%3A%20%3Chttp%3A%2F%2Fexample.org%2F%3E%0ASELECT%20%3Fname%20%3Fperson%0AWHERE%20%7B%20%3C%3C%28%20_%3Aa%20foaf%3Aname%20%3Fname%20%29%3E%3E%20ex%3AstatedBy%20%3Fperson%20.%20%7D&version=1.2 Host: www.example User-agent: sparql-client/0.1
HTTP/1.1 200 OK Date: Wed, 03 Aug 2005 12:48:25 GMT Server: Apache/1.3.29 (Unix) Connection: close Content-Type: application/sparql-results+xml <?xml version="1.0"?> <sparql xmlns="http://www.w3.org/2005/sparql-results#"> ... </sparql>
아래 질의는 isTRIPLE 함수를 사용합니다. 이것은 SPARQL 1.2 기능이므로,
구문적으로 버전을 공지합니다.
VERSION "1.2"
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX ex: <http://example.org/>
SELECT ?statement ?person
WHERE { ?statement ex:statedBy ?person . FILTER (isTRIPLE(?statement)) }
질의가 구문적으로 버전을 공지하지만, SPARQL 클라이언트는
version=1.2 미디어 유형을 사용하여 직접
POST 요청을 보내기로 결정합니다. 버전이 이미 구문적으로 공지된 경우 이는 허용되지만 필수는 아닙니다.
이는 이 HTTP 추적에 보입니다.
POST /sparql HTTP/1.1 Host: www.example User-agent: sparql-client/0.1 Content-Type: application/sparql-query; version=1.2 UnencodedQuery
응답에는 RDF 1.2 트리플 용어가 포함되므로, 서버는
version=1.2 미디어 유형 매개변수로 응답합니다.
HTTP/1.1 200 OK Date: Wed, 03 Aug 2005 12:48:25 GMT Server: Apache/1.3.29 (Unix) Connection: close Content-Type: application/sparql-results+xml; version=1.2 <?xml version="1.0"?> <sparql xmlns="http://www.w3.org/2005/sparql-results#"> ... </sparql>
아래에는 INSERT DATA { <a> <p> <b> } 질의를 위해
http://localhost:8888/test로 전송된 요청의 직렬화인 예제 요청이
URL 인코딩 매개변수 형식으로 표시되어 있습니다.
POST /test HTTP/1.1 Host: localhost:8888 Accept: text/plain Content-Length: 62 Content-Type: application/x-www-form-urlencoded update=INSERT%20DATA%20%7B%20%3Ca%3E%20%3Cp%3E%20%3Cb%3E%20%7D
업데이트 요청은 Content-Type이
application/sparql-update인 POST 요청으로 전송할 수 있습니다.
POST /test HTTP/1.1
Host: localhost:8888
Accept: */*
Content-Type: application/sparql-update
Content-Length: 27
INSERT DATA { <a> <p> <b> }
업데이트 요청의 데이터셋은 using-graph-uri 및
using-named-graph-uri 매개변수를 사용하여 지정할 수 있습니다.
아래에는 http://localhost:8888/test로 전송되고 기본 그래프
http://localhost:8888/people이 있는 데이터셋을 지정하는 예제 요청의 직렬화가
표시되어 있습니다.
POST /test?using-graph-uri=http%3A%2F%2Flocalhost%3A8888%2Fpeople HTTP/1.1
Host: localhost:8888
Accept: */*
Content-Type: application/sparql-update
Content-Length: 136
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
DELETE { ?person ?property ?value }
WHERE { ?person ?property ?value ; foaf:givenName 'Fred' }
여러 작업의 시퀀스는 ';'
(세미콜론)으로 구분하여 단일 요청에 포함할 수 있습니다.
http://localhost:8888/test로 전송된 예제 요청의 직렬화는 다음 질의에 대해
DELETE DATA { <a> <p> <old> } ;
INSERT DATA { <a> <p> <new> }
URL 인코딩 매개변수 형식으로 아래에 표시되어 있습니다.
POST /test HTTP/1.1 Host: localhost:8888 Accept: */* Content-Type: application/x-www-form-urlencoded Content-Length: 130 update=DELETE%20DATA%20%7B%20%3Ca%3E%20%3Cp%3E%20%3Cold%3E%20%7D%20%3B%0AINSERT%20DATA%20%7B%20%3Ca%3E%20%3Cp%3E%20%3Cnew%3E%20%7D
URL 인코딩 매개변수로 업데이트 요청을 POST할 때, 데이터셋 매개변수
using-graph-uri 및 using-named-graph-uri는
직렬화된 요청과 함께 POST 본문에 지정됩니다.
아래에는 다음 질의를 위해
http://localhost:8888/test로 전송된 예제 요청의 직렬화가
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
INSERT { GRAPH <http://localhost:8888/people> { ?person ?property ?value } }
WHERE { GRAPH ?g { ?person ?property ?value ; foaf:givenName 'Fred' } }
명명된 그래프 http://localhost:8888/alice/foaf.rdf 및
http://localhost:8888/eve/foaf.rdf가 있는 데이터셋을 지정하여 표시되어 있습니다.
POST /test HTTP/1.1 Host: localhost:8888 Accept: */* Content-Type: application/x-www-form-urlencoded Content-Length: 130 using-named-graph-uri=http%3A%2F%2Flocalhost%3A8888%2Falice%2Ffoaf.rdf&using-named-graph-uri=http%3A%2F%2Flocalhost%3A8888%2Feve%2Ffoaf.rdf&update=PREFIX%20foaf%3A%20%3Chttp%3A%2F%2Fxmlns.com%2Ffoaf%2F0.1%2F%3E%0AINSERT%20%7B%20GRAPH%20%3Chttp%3A%2F%2Flocalhost%3A8888%2Fpeople%3E%20%7B%20%3Fperson%20%3Fproperty%20%3Fvalue%20%7D%20%7D%0AWHERE%20%7B%20GRAPH%20%3Fg%20%7B%20%3Fperson%20%3Fproperty%20%3Fvalue%20%3B%20foaf%3AgivenName%20%27Fred%27%20%7D%20%7D
http://localhost:8888/test로 전송되고 명명된 그래프
http://localhost:8888/alice/foaf.rdf
및 http://localhost:8888/eve/foaf.rdf가 있는 데이터셋을 지정하는
예제 요청의 직렬화가 아래에 표시되어 있습니다.
POST /test?using-named-graph-uri=http%3A%2F%2Flocalhost%3A8888%2Falice%2Ffoaf.rdf&using-named-graph-uri=http%3A%2F%2Flocalhost%3A8888%2Feve%2Ffoaf.rdf HTTP/1.1
Host: localhost:8888
Accept: */*
Content-Type: application/sparql-update
Content-Length: 190
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
INSERT { GRAPH <http://localhost:8888/people> { ?person ?property ?value } }
WHERE { GRAPH ?g { ?person ?property ?value ; foaf:givenName 'Fred' } }
SPARQL 프로토콜 서비스에 대한 서비스 거부 공격의 가능한 출처는 적어도 두 가지가 있습니다. 첫째, 제약이 부족한 질의는 매우 많은 수의 결과를 낳을 수 있으며, 이를 처리, 조립 또는 반환하는 데 많은 컴퓨팅 자원이 필요할 수 있습니다. 또 다른 가능한 출처는 자원 크기, 가져와야 하는 자원의 수 또는 크기와 수의 조합 때문에 매우 복잡한 RDF 데이터셋 설명을 포함하는 질의입니다. 서비스는 이러한 설명을 대역폭, CPU 또는 보조 저장장치를 포함한 상당한 자원 지출 없이 조립하지 못할 수 있습니다. 어떤 경우에는 그러한 지출이 실질적으로 서비스 거부 공격을 구성할 수 있습니다. SPARQL 프로토콜 서비스는 자신이 가져오는 자원 또는 외부 자원이 가져와지는 속도에 제한을 둘 수 있습니다. SPARQL 질의 처리 서비스에 대한 서비스 거부 공격의 다른 출처도 있을 수 있습니다.
SPARQL 프로토콜 서비스는 클라이언트를 대신하여 다른 출처 서버에 HTTP 요청을 보낼 수 있으므로, 다른 사이트나 서비스에 대한 공격 벡터로 사용될 수 있습니다. 따라서 SPARQL 프로토콜 서비스는 사실상 제3자 클라이언트를 위한 프록시처럼 동작할 수 있습니다. 이러한 서비스는 자신이 가져오는 자원 또는 외부 자원이 가져와질 수 있는 속도에 제한을 둘 수 있습니다. SPARQL 프로토콜 서비스는 제3자 출처 서버 또는 서비스와 관련하여 추적을 용이하게 하는 방식으로 클라이언트 요청을 기록할 수 있습니다.
SPARQL 프로토콜 서비스는 이러한 질의와 그 밖의 비용이 크거나, 또는 달리 안전하지 않은 질의를 탐지하고, 질의에 시간 또는 메모리 제한을 부과하거나, 서비스(및 다른 서비스)의 서비스 거부 공격에 대한 취약성을 줄이기 위해 다른 제한을 부과하도록 선택할 수 있습니다. 또한 그러한 질의 요청의 처리를 거부할 수 있습니다.
SPARQL 프로토콜 서비스는 업데이트 작업을 통해 기반 데이터를 제거, 삽입 및 변경할 수 있습니다. 악의적이거나 파괴적인 업데이트로부터 보호하기 위해, 구현은 업데이트 작업을 구현하지 않도록 선택할 수 있습니다. 또는 구현은 업데이트 작업의 무단 호출을 방지하기 위해 HTTP 인증 메커니즘이나 다른 구현 정의 메커니즘을 사용하도록 선택할 수 있습니다.
서로 다른 IRI가 동일한 외형을 가질 수 있습니다. 서로 다른 문자 체계의 문자는 비슷해 보일 수 있습니다(키릴 문자 "о"는 라틴 문자 "o"와 비슷해 보일 수 있음). 결합 문자가 뒤따르는 문자는 다른 문자와 동일한 시각적 표현을 가질 수 있습니다(LATIN SMALL LETTER E 뒤에 COMBINING ACUTE ACCENT가 오는 경우 LATIN SMALL LETTER E WITH ACUTE와 동일한 시각적 표현을 가짐). SPARQL 사용자는 데이터의 IRI와 일치하는 IRI로 질의를 구성하도록 주의해야 합니다. 유사한 문자의 매칭에 대한 자세한 정보는 Unicode 보안 고려사항 및 국제화된 자원 식별자 (IRI) 8절에서 찾을 수 있습니다.
비규범으로 표시된 절뿐 아니라, 이 명세의 모든 작성 지침, 도표, 예제 및 참고는 비규범입니다. 이 명세의 그 밖의 모든 것은 규범입니다.
이 문서의 핵심 단어 MAY는 여기에 보인 것처럼 모두 대문자로 나타날 때, 그리고 그때에만 BCP 14 [RFC2119] [RFC8174]에 설명된 대로 해석해야 합니다.
SPARQL 1.2 프로토콜(이 문서)의 각 부분 상태는 다음과 같습니다.
적합한 SPARQL 프로토콜 서비스는 다음을 만족합니다.
query 작업 또는
update 작업 중 하나를 구현해야 합니다.
query 및 update 작업 둘 다를 구현할
수 있습니다.
이 절은 비규범입니다.
이 명세는 2013년 3월의 SPARQL 1.1 프로토콜을 확장하고 업데이트합니다. 주요 변경 사항은 다음과 같습니다.
이 절은 비규범입니다.
이 명세는 2008년 1월의 RDF용 SPARQL 프로토콜을 확장하고 업데이트합니다. 주요 변경 사항은 다음과 같습니다.
TODO
TODO
TODO
Referenced in: