SPARQL을 사용한 Neptune 모범 사례 - Amazon Neptune

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

SPARQL을 사용한 Neptune 모범 사례

SPARQL 쿼리 언어를 Neptune과 함께 사용하는 경우 다음 모범 사례를 따르세요. SPARQL을 Neptune과 함께 사용하는 방법에 자세한 내용은 SPARQL을 사용하여 Neptune 그래프에 액세스를 참조하세요.

모든 명명된 그래프를 기본값으로 쿼리

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...INVALUES입니다.

예를 들어 단일 쿼리 내에서 여러 사람의 친구를 조회하려는 경우 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)}

이렇게 하면 ?sex: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를 추가하여 명시적으로 이러한 중복 항목을 제거할 수 있습니다. 그러나 중복 값 주입을 위해 쿼리 결과에 실제로 중복 항목을 원하는 경우도 있습니다.

    그러나 FILTERFILTER...IN 버전은 동일한 값이 여러 번 나타날 때 한 번만 값을 추출합니다.

  • 두 번째 경우는 VALUES에서는 항상 정확한 일치를 수행하지만 FILTER에서는 일부 경우에 유형 승격을 적용하고 퍼지 일치를 수행한다는 사실과 관련이 있습니다.

    예를 들어 값 절에 "2.0"^^xsd:float와 같은 리터럴을 포함할 때 VALUES 쿼리는 리터럴 값 및 데이터 유형을 포함하여 이 리터럴과 정확하게 일치시킵니다.

    반대로 FILTER는 이러한 숫자 리터럴에 대한 퍼지 일치를 생성합니다. 이러한 일치에는 값이 동일하지만 숫자 데이터 유형은 서로 다른 리터럴이 포함됩니다(예: xsd:double).

    참고

    문자열 리터럴 또는 URI를 열거할 때 FILTER 동작과 VALUES 동작 간에는 차이가 없습니다.

FILTERVALUES 간의 차이는 최적화 및 결과 쿼리 평가 전략에 영향을 줄 수 있습니다. 사용 사례에서 퍼지 일치를 원하는 경우가 아니면 유형 변환과 관련된 특별한 경우를 고려하지 않아도 되는 VALUES를 사용하는 것이 좋습니다. 따라서 더 빨리 실행하고 비용이 덜 드는 보다 효율적인 쿼리를 생성하는 것은 VALUES입니다.