기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
SPARQL을 사용한 Neptune 모범 사례
SPARQL 쿼리 언어를 Neptune과 함께 사용하는 경우 다음 모범 사례를 따르세요. SPARQL을 Neptune과 함께 사용하는 방법에 자세한 내용은 다음을 사용하여 Neptune 그래프에 액세스하기 SPARQL를 참조하세요.
모든 명명된 그래프를 기본값으로 쿼리
Amazon Neptune은 3개마다 이름이 있는 그래프를 연결합니다. 기본 그래프는 이름이 있는 모든 그래프의 조합으로 정의됩니다.
FROM NAMED
와 같은 GRAPH
키워드 또는 구문을 통해 그래프를 명시적으로 지정하지 않고 SPARQL 쿼리를 제출하는 경우 Neptune은 항상 DB 인스턴스의 모든 트리플을 고려합니다. 예를 들어 다음 쿼리는 Neptune SPARQL 엔드포인트의 모든 트리플을 반환합니다.
SELECT * WHERE { ?s ?p ?o }
1개 이상의 그래프에 나타나는 triples는 한 번만 반환합니다.
기본 그래프 사양에 대한 사항은 SPARQL 1.1 쿼리 언어 사양의 RDF 데이터 세트
로드에 대해 명명된 그래프 지정
Amazon Neptune은 3개마다 이름이 있는 그래프를 연결합니다. 트리플을 로드, 삽입 또는 업데이트할 때 이름이 있는 그래프를 지정하지 않으면 Neptune에서 URI(http://aws.amazon.com/neptune/vocab/v01/DefaultNamedGraph
)로 정의된 이름이 있는 대체 그래프를 사용합니다.
Neptune 대량 로더를 사용하는 경우 parserConfiguration: namedGraphUri
파라미터를 통해 모든 트리플(또는 네 번째 위치 공백이 있는 쿼드)에 사용할 명명된 그래프를 지정할 수 있습니다. Neptune 로더 Load
명령 구문에 대한 내용은 Neptune 로더 명령을 참조하세요.
쿼리에서 FILTER, FILTER...IN 또는 VALUES 중 하나 선택
SPARQL 쿼리에서 값을 주입하는 세 가지 기본 방법은 FILTER
, FILTER...IN
및 VALUES
입니다.
예를 들어 단일 쿼리 내에서 여러 사람의 친구를 조회하려는 경우 FILTER
를 사용하여 쿼리를 다음과 같이 구성할 수 있습니다.
PREFIX ex: <https://www.example.com/> PREFIX foaf : <http://xmlns.com/foaf/0.1/> SELECT ?s ?o WHERE {?s foaf:knows ?o. FILTER (?s = ex:person1 || ?s = ex:person2)}
이렇게 하면 ?s
가 ex:person1
또는 ex:person2
에 바인딩되어 있고 foaf:knows
라는 나가는 엣지가 있는 그래프의 모든 트리플이 반환됩니다.
또한 다음과 같은 결과를 반환하는 FILTER...IN
을 사용하여 쿼리를 생성할 수 있습니다.
PREFIX ex: <https://www.example.com/> PREFIX foaf : <http://xmlns.com/foaf/0.1/> SELECT ?s ?o WHERE {?s foaf:knows ?o. FILTER (?s IN (ex:person1, ex:person2))}
이 경우에도 다음과 같은 결과를 반환하는 VALUES
를 사용하여 쿼리를 생성할 수 있습니다.
PREFIX ex: <https://www.example.com/> PREFIX foaf : <http://xmlns.com/foaf/0.1/> SELECT ?s ?o WHERE {?s foaf:knows ?o. VALUES ?s {ex:person1 ex:person2}}
대부분의 경우 이러한 쿼리는 구문상으로 동일하지만 두 FILTER
변형이 VALUES
변형과 다른 경우도 있습니다.
-
첫 번째 경우는 동일한 사람을 두 번 주입하는 경우와 같이 중복 값을 주입할 때입니다. 이 경우
VALUES
쿼리가 결과에 중복 항목을 포함합니다.SELECT
절에DISTINCT
를 추가하여 명시적으로 이러한 중복 항목을 제거할 수 있습니다. 그러나 중복 값 주입을 위해 쿼리 결과에 실제로 중복 항목을 원하는 경우도 있습니다.그러나
FILTER
및FILTER...IN
버전은 동일한 값이 여러 번 나타날 때 한 번만 값을 추출합니다. -
두 번째 경우는
VALUES
에서는 항상 정확한 일치를 수행하지만FILTER
에서는 일부 경우에 유형 승격을 적용하고 퍼지 일치를 수행한다는 사실과 관련이 있습니다.예를 들어 값 절에
"2.0"^^xsd:float
와 같은 리터럴을 포함할 때VALUES
쿼리는 리터럴 값 및 데이터 유형을 포함하여 이 리터럴과 정확하게 일치시킵니다.반대로
FILTER
는 이러한 숫자 리터럴에 대한 퍼지 일치를 생성합니다. 이러한 일치에는 값이 동일하지만 숫자 데이터 유형은 서로 다른 리터럴이 포함됩니다(예:xsd:double
).참고
문자열 리터럴 또는 URI를 열거할 때
FILTER
동작과VALUES
동작 간에는 차이가 없습니다.
FILTER
와 VALUES
간의 차이는 최적화 및 결과 쿼리 평가 전략에 영향을 줄 수 있습니다. 사용 사례에서 퍼지 일치를 원하는 경우가 아니면 유형 변환과 관련된 특별한 경우를 고려하지 않아도 되는 VALUES
를 사용하는 것이 좋습니다. 따라서 더 빨리 실행하고 비용이 덜 드는 보다 효율적인 쿼리를 생성하는 것은 VALUES
입니다.