H_10. FROM vs FROM NAMED
SPARQL 에 FROM과 FROM NAMED 절이 존재한다.
SPARQL query는 Dataset에 동장하도록 되어 있다.
Dataset은 1개의 default graph와 n개의 named graph의 집합으로 구성되기 때문에
각각의 graph에 query를 할 수 있다.
#Example Dataset
<http://joyhong.tistory.com/a> = { <a1> <p> <a2> . }
<http://joyhong.tistory.com/b> = { <b1> <p> <b2> . }
<http://joyhong.tistory.com/c> = { <c1> <p> <c2> . }
<http://joyhong.tistory.com/d> = { <d1> <p> <d2> . }
일반적으로 SELECT 구문에서 FROM이나 FROM NAMED 절을 사용하지 않으면
default graph에 query가 동작한다.
이는 엔진이 자동적으로 FROM이나 FROM NAMED 절이 없을 경우
모든 graph를 default graph에 병합하도록 설정이 되어 있다면
Dataset 전체의 데이터에 대해 query를 실행하도록 된다.
#Query 1
SELECT ?s
WHERE { ?s <p> ?o }
#Result1
<a1>, <b1>, <c1>, <d1>
FROM 절을 사용하게 되면
FROM 절에 명시된 graph에 한하여 default graph에 병합하여 query를 수행한다.
#Query 2
SELECT ?s
FROM <http://joyhong.tistory.com/a>
WHERE { ?s <p> ?o }
#Result 2
<a1>
FROM NAMED 절을 사용할 경우에는
query 대상이 FROM NAMED 절에 명시된 named graph로 한정된다.
이 때는 GRAPH 절에 바운드 되는 그래프가 대상이 되어진다.
#Query 3
SELECT ?s
FROM NAMED <http://joyhong.tistory.com/a>
WHERE { ?s <p> ?o }
#Result 3
no results
#Query 4
SELECT ?s
FROM NAMED <http://joyhong.tistory.com/a>
FROM NAMED <http://joyhong.tistory.com/b>
WHERE { GRAPH ?g {?s <p> ?o }}
#Result 4
<a1>, <b1>
#Query 5
SELECT ?s
FROM <http://joyhong.tistory.com/a>
FROM <http://joyhong.tistory.com/b>
FROM NAMED <http://joyhong.tistory.com/c>
FROM NAMED <http://joyhong.tistory.com/d>
WHERE { ?s <p> ?o }
#Result 5
<a1>, <b1>
#Query 6
SELECT ?s
FROM <http://joyhong.tistory.com/a>
FROM <http://joyhong.tistory.com/b>
FROM NAMED <http://joyhong.tistory.com/c>
FROM NAMED <http://joyhong.tistory.com/d>
WHERE { GRAPH ?g {?s <p> ?o }}
#Result 6
<c1>, <d1>
<그림 출처 : http://yarcdata.com/blog/?p=201>