データの Neptune OpenSearch データモデル - Amazon Neptune

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

データの Neptune OpenSearch データモデル

Amazon Neptune は、 SPARQLと Gremlin の両方のデータを OpenSearch Service に保存するための統合JSONドキュメント構造を使用します。の各ドキュメント OpenSearch はエンティティに対応し、そのエンティティに関連するすべての情報を保存します。Gremlin の場合、頂点とエッジはエンティティと見なされるため、対応する OpenSearch ドキュメントには頂点、ラベル、プロパティに関する情報があります。の場合SPARQL、サブジェクトはエンティティと見なすことができるため、対応する OpenSearch ドキュメントには、1 つのドキュメント内のすべての述語とオブジェクトのペアに関する情報が含まれます。

注記

レプリケーションの実装では Neptune-to-OpenSearch、文字列データのみが保存されます。ただし、他のデータ型を保存するように変更することはできます。

統合JSONドキュメント構造は次のようになります。

{ "entity_id": "Vertex Id/Edge Id/Subject URI", "entity_type": [List of Labels/rdf:type object value], "document_type": "vertex/edge/rdf-resource" "predicates": { "Property name or predicate URI": [ { "value": "Property Value or Object Value", "graph": "(Only for Sparql) Named Graph Quad is present" "language": "(Only for Sparql) rdf:langString" }, { "value": "Property Value 2/ Object Value 2", } ] } }
  • entity_id –  ドキュメントを表すエンティティ固有の ID。

    • の場合SPARQL、これはサブジェクト ですURI。

    • Gremlin の場合、これは Vertex_ID または Edge_ID です。

  • entity_type – 頂点またはエッジの 1 つや複数のラベル、またはサブジェクトの 0 個以上の rdf:type 述語値を表します。

  • document_type – 現在のドキュメントが頂点、エッジ、RDF リソースを表すかどうかを指定するために使用されます。

  • predicates – Gremlin では、頂点またはエッジのプロパティと値が保存されます。の場合SPARQL、述語とオブジェクトのペアを保存します。

    プロパティ名は properties.name.valueの形式になります OpenSearch。クエリを実行するには、その形式で名前を付ける必要があります。

  • value – Gremlin のプロパティ値または のオブジェクト値SPARQL。

  • graph– の名前付きグラフSPARQL。

  • language– リrdf:langStringテラルの言語タグSPARQL。

サンプルSPARQL OpenSearch ドキュメント

[データ]

@prefix dt: <http://example.org/datatype#> . @prefix ex: <http://example.org/> . @prefix xsd: <http://www.w3.org/2001/XMLSchema#> . @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . ex:simone rdf:type ex:Person ex:g1 ex:michael rdf:type ex:Person ex:g1 ex:simone ex:likes "spaghetti" ex:g1 ex:simone ex:knows ex:michael ex:g2 # Not stored in ES ex:simone ex:likes "spaghetti" ex:g2 ex:simone ex:status "La vita è un sogno"@it ex:g2 ex:simone ex:age "40"^^xsd:int DG # Not stored in ES ex:simone ex:dummy "testData"^^dt:newDataType DG # Not stored in ES ex:simone ex:hates _:bnode # Not stored in ES _:bnode ex:means "coding" DG # Not stored in ES

ドキュメント

{ "entity_id": "http://example.org/simone", "entity_type": ["http://example.org/Person"], "document_type": "rdf-resource" "predicates": { "http://example.org/likes": [ { "value": "spaghetti", "graph": "http://example.org/g1" }, { "value": "spaghetti", "graph": "http://example.org/g2" } ] "http://example.org/status": [ { "value": "La vita è un sogno", "language": "it" // Only present for rdf:langString } ] } }
{ "entity_id" : "http://example.org/michael", "entity_type" : ["http://example.org/Person"], "document_type": "rdf-resource" }

サンプル Gremlin OpenSearch ドキュメント

[データ]

# Vertex 1 simone label Person <== Label simone likes "spaghetti" <== Property simone likes "rice" <== Property simone age 40 <== Property # Vertex 2 michael label Person <== Label # Edge 1 simone knows michael <== Edge e1 updated "2019-07-03" <== Edge Property e1 through "company" <== Edge Property e1 since 10 <== Edge Property

ドキュメント

{ "entity_id": "simone", "entity_type": ["Person"], "document_type": "vertex", "predicates": { "likes": [ { "value": "spaghetti" }, { "value": "rice" } ] } }
{ "entity_id" : "michael", "entity_type" : ["Person"], "document_type": "vertex" }
{ "entity_id": "e1", "entity_type": ["knows"], "document_type": "edge" "predicates": { "through": [ { "value": "company" } ] } }