SPARQL Amazon Neptune의 표준 규정 준수 - Amazon Neptune

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

SPARQL Amazon Neptune의 표준 규정 준수

적용 가능한 SPARQL 표준을 나열한 후 다음 섹션에서는 Neptune의 SPARQL 구현이 해당 표준에서 어떻게 확장 또는 분기되는지에 대한 구체적인 세부 정보를 제공합니다.

Amazon Neptune은 SPARQL 그래프 쿼리 언어를 구현할 때 다음 표준을 준수합니다.

에 적용되는 표준 SPARQL

Neptune의 기본 네임스페이스 접두사 SPARQL

Neptune은 기본적으로 SPARQL 쿼리에 사용하기 위해 다음 접두사를 정의합니다. 자세한 내용은 SPARQL 사양의 접두사 이름을 참조하세요.

  • rdf  – http://www.w3.org/1999/02/22-rdf-syntax-ns#

  • rdfs – http://www.w3.org/2000/01/rdf-schema#

  • owl  – http://www.w3.org/2002/07/owl#

  • xsd  – http://www.w3.org/2001/XMLSchema#

SPARQL 기본 그래프 및 명명된 그래프

Amazon Neptune은 트리플마다 이름이 있는 그래프를 연결합니다. 기본 그래프는 이름이 있는 모든 그래프의 조합으로 정의됩니다.

쿼리에 대한 기본 그래프

GRAPH 키워드 또는 와 같은 구조를 통해 그래프를 명시적으로 지정하지 않고 SPARQL 쿼리를 제출하면 FROM NAMEDNeptune은 항상 DB 인스턴스의 모든 트리플을 고려합니다. 예를 들어 다음 쿼리는 Neptune SPARQL 엔드포인트에서 모든 트리플을 반환합니다.

SELECT * WHERE { ?s ?p ?o }

1개 이상의 그래프에 나타나는 triples는 한 번만 반환합니다.

기본 그래프 사양에 대한 자세한 내용은 SPARQL 1.1 쿼리 언어 사양의 RDF 데이터 세트 섹션을 참조하세요.

로드, 삽입 또는 업데이트에 대한 이름이 있는 그래프 지정

트리플을 로드, 삽입 또는 업데이트할 때 명명된 그래프를 지정하지 않으면 Neptune은 URI 에서 정의한 대체 명명된 그래프를 사용합니다http://aws.amazon.com/neptune/vocab/v01/DefaultNamedGraph.

트리플 기반 형식을 사용하여 Neptune Load 요청을 발행하면 parserConfiguration: namedGraphUri 파라미터를 사용하여 모든 트리플에 사용할 이름이 있는 그래프를 지정할 수 있습니다. Load 명령 구문에 대한 사항은 Neptune 로더 명령 단원을 참조하십시오.

중요

이 파라미터를 사용하지 않고 명명된 그래프를 지정하지 않으면 대체URI가 사용됩니다http://aws.amazon.com/neptune/vocab/v01/DefaultNamedGraph.

이름이 있는 그래프 대상을 명시적으로 제공하지 않고 SPARQL UPDATE를 통해 트리플을 로드하는 경우에도 이 이름이 있는 대체 그래프를 사용합니다.

쿼드 기반 형식 N-Quads를 사용하여 데이터베이스의 트리플마다 이름이 있는 그래프를 지정할 수 있습니다.

참고

N-Quads를 사용하면 이름이 있는 그래프를 비워 둘 수 있습니다. 이 경우 http://aws.amazon.com/neptune/vocab/v01/DefaultNamedGraph를 사용합니다.

namedGraphUri 파서 구성 옵션을 사용하여 N-Quads의 이름이 있는 기본 그래프를 재정의할 수 있습니다.

SPARQL XPath Neptune에서 지원하는 Constructor 함수

이 SPARQL 표준을 통해 SPARQL 엔진은 확장 가능한 XPath 생성기 함수 세트를 지원할 수 있습니다. Neptune은 현재 다음과 같은 생성자 함수를 지원합니다. 여기서 xsd 접두사는 http://www.w3.org/2001/XMLSchema#로 정의됩니다.

  • xsd:boolean

  • xsd:integer

  • xsd:double

  • xsd:float

  • xsd:decimal

  • xsd:long

  • xsd:unsignedLong

쿼리 및 업데이트IRI의 기본 기본 기반

Neptune 클러스터에는 여러 엔드포인트가 있으므로 URL 쿼리 또는 업데이트 요청을 기본으로 사용하면 상대적인 를 해결할 때 예상치 못한 결과가 발생할 IRI 수 있습니다IRIs.

엔진 릴리스 1.2.1.0부터 명시적 기본이 요청의 일부가 아닌 IRI 경우 NeptuneIRI은 를 기본http://aws.amazon.com/neptune/default/으로 사용합니다.

다음 요청에서 기본IRI은 요청의 일부입니다.

BASE <http://example.org/default/> INSERT DATA { <node1> <id> "n1" } BASE <http://example.org/default/> SELECT * { <node1> ?p ?o }

결과는 다음과 같습니다.

?p ?o http://example.org/default/id n1

그러나 이 요청에는 기본IRI이 포함되지 않습니다.

INSERT DATA { <node1> <id> "n1" } SELECT * { <node1> ?p ?o }

이 경우 결과는 다음과 같습니다.

?p ?o http://aws.amazon.com/neptune/default/id n1

xsd:Neptune의 dateTime 값

성능상의 이유로 Neptune은 항상 날짜/시간 값을 Coordinated Universal Time()으로 저장합니다UTC. 이렇게 하면 직접 비교가 매우 효율적으로 수행됩니다.

즉, 특정 시간대를 지정하는 dateTime 값을 입력하면 Neptune은 해당 값을 로 변환UTC하고 해당 시간대 정보를 삭제합니다. 그런 다음 나중에 dateTime 값을 검색하면 원래 시간대의 시간이 UTC아닌 로 표시되며 원래 시간대가 무엇인지 더 이상 알 수 없습니다.

Neptune의 특수 부동 소수점 값 처리

Neptune은 다음과 SPARQL 같이 에서 특수 부동 소수점 값을 처리합니다.

SPARQL Neptune의 NaN 처리

Neptune에서 SPARQL는 쿼리NaN에서 의 값을 수락할 수 있습니다. 신호와 quiet NaN 값 사이에는 구별이 없습니다. Neptune은 모든 NaN 값을 quiet로 취급합니다.

의미상 NaN보다 크거나 작거나 같은 값은 없으므로 NaN을 비교할 수 없습니다. 즉, 이론적으로 비교의 한 쪽에 있는 NaN 값은 다른 쪽의 어느 값과도 일치하지 않습니다.

그러나 XSD 사양은 두 개 xsd:double 또는 xsd:float NaN 값을 동일하게 취급합니다. 이 사양은 Neptune에서 IN 필터, 필터 표현식의 등호 연산자 및 정확한 일치 시맨틱(삼중 패턴의 객체 위치에 NaN이 있음)에도 적용됩니다.

SPARQL Neptune의 무한 가치 처리

Neptune에서 는 쿼리의 INF 또는 값을 수락-INF할 SPARQL 수 있습니다. INF 는 다른 숫자 값보다 크거나 를 다른 숫자 값보다 작게 -INF 비교합니다.

일치하는 부호가 있는 두 INF 값은 유형에 관계없이 서로 동일하게 비교됩니다(예: 부동 소수점-INF은 이중 와 같음-INF).

NaN보다 크거나 작거나 같은 값은 없으므로 NaN과 비교할 수 없습니다.

SPARQL Neptune에서 부정적인 제로 처리

Neptune은 음수 0 값을 부호 없는 0으로 정규화합니다. 음수 0 값은 쿼리에 사용할 수 있지만 데이터베이스에 기록되지 않으며 부호 없는 0과 동일하게 비교합니다.

Neptune 임의 길이 값의 제한 사항

Neptune은 XSD 정수, 부동 소수점 및 십진수 값의 스토리지 크기를 64비트SPARQL로 제한합니다. 더 큰 값을 사용하면 InvalidNumericDataException 오류가 발생합니다.

Neptune, 에서 같음 비교 확장 SPARQL

SPARQL 표준은 값 표현식에 대한 삼원 논리를 정의하며, 여기서 값 표현식은 true, false또는 로 평가할 수 있습니다error. 에 적용되는 SPARQL 1.1 사양 )=FILTER 조건 != 비교에 정의된 용어 균등성에 대한 기본 의미 체계는 사양의 연산자 테이블에서 명시적으로 비교할 수 없는 데이터 유형을 비교할 error 때 를 생성합니다.

이 동작은 다음 예제와 같이 직관적이지 않은 결과를 초래할 수 있습니다.

데이터:

<http://example.com/Server/1> <http://example.com/ip> "127.0.0.1"^^<http://example.com/datatype/IPAddress>

쿼리 1:

SELECT * WHERE { <http://example.com/Server/1> <http://example.com/ip> ?o . FILTER(?o = "127.0.0.2"^^<http://example.com/datatype/IPAddress>) }

쿼리 2:

SELECT * WHERE { <http://example.com/Server/1> <http://example.com/ip> ?o . FILTER(?o != "127.0.0.2"^^<http://example.com/datatype/IPAddress>) }

릴리스 SPARQL 1.0.2.1 이전에 Neptune에서 사용한 기본 의미 체계를 사용하면 두 쿼리 모두 빈 결과를 반환합니다. 그 이유는 사용자 지정 데이터 형식 <http://example.com/IPAddress>에 대해 지정된 명시적 비교 규칙이 없으므로 ?o := "127.0.0.1"^^<http://example.com/IPAddress>에 대해 평가할 때 ?o = "127.0.0.2"^^<http://example.com/IPAddress>false가 아니라 error를 생성하기 때문입니다. 결과적으로 두 번째 쿼리의 부정 버전도 error를 생성합니다. 두 쿼리 모두에서 error는 후보 솔루션이 필터링되도록 합니다.

릴리스 1.0.2.1부터 Neptune은 사양에 따라 SPARQL 불평등 연산자를 확장했습니다. 엔진이 사용자 정의 데이터 유형과 비교할 수 없는 기본 제공 데이터 유형을 비교하는 방법에 대한 추가 규칙을 정의할 수 있도록 하는 SPARQL 운영자 확장성 에 대한 1.1 섹션을 참조하세요.

이 옵션을 사용하면 Neptune은 리터럴 값과 데이터 형식이 구문적으로 같은 경우 연산자 매핑 표에 명시적으로 정의되지 않은 두 데이터 형식의 비교를 true로 평가하고 그렇지 않으면 false로 평가합니다. error는 어떤 경우에도 생성되지 않습니다.

이러한 새로운 시맨틱을 사용하면 두 번째 쿼리가 빈 결과 대신 "127.0.0.1"^^<http://example.com/IPAddress>를 반환합니다.

Neptune에서 Literals 처리 Out-of-Range SPARQL

XSD 의미 체계는 integer 및 를 제외하고 값 공백으로 각 숫자 유형을 정의합니다decimal. 이러한 정의는 각 형식을 값 범위로 제한합니다. 예를 들어 xsd:byte 범위의 범위는 -128에서 +127까지(경계값 포함)입니다. 이 범위를 벗어나는 모든 값은 유효하지 않은 것으로 간주됩니다.

유형의 값 스페이스 외부에 리터럴 값을 할당하려고 하면(예: 를 리터럴 값 999xsd:byte로 설정하려고 하면) Neptune은 out-of-range 값을 반올림하거나 잘라내지 않고 있는 그대로 값을 수락합니다. 하지만 해당 형식은 리터럴 값을 나타낼 수 없기 때문에 숫자 값으로 유지되지 않습니다.

즉, 정의된 xsd:byte 값 범위를 벗어나는 값이라도 Neptune은 "999"^^xsd:byte를 사용합니다. 하지만 데이터베이스에 이러한 값이 유지되면 삼중 패턴의 객체 위치에서 정확한 일치 시맨틱에서만 사용할 수 있습니다. 리터럴은 숫자 값으로 취급되지 않으므로 out-of-range 범위 필터를 실행할 수 없습니다.

SPARQL 1.1 사양은 범위 연산자를 numeric-operator-numeric, string-operator-string, literal-operator-literal 등의 형식으로 정의합니다. Neptune은 invalid-literal-operator-numeric-value와 같은 범위 비교 연산자를 실행할 수 없습니다.