Modèle de données Neptune pour les données OpenSearch - Amazon Neptune

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Modèle de données Neptune pour les données OpenSearch

Amazon Neptune utilise une structure de document JSON unifiée pour stocker les données SPARQL et Gremlin dans Service. OpenSearch Chaque document OpenSearch correspond à une entité et stocke toutes les informations pertinentes pour cette entité. Pour Gremlin, les sommets et les arêtes sont considérés comme des entités. Les OpenSearch documents correspondants contiennent donc des informations sur les sommets, les étiquettes et les propriétés. Pour SPARQL, les sujets peuvent être considérés comme des entités, de sorte que les OpenSearch documents correspondants contiennent des informations sur toutes les paires prédicat-objet dans un seul document.

Note

L'implémentation de Neptune-to-OpenSearch réplication ne stocke que des données sous forme de chaîne. Toutefois, vous pouvez le modifier pour stocker d'autres types de données.

La structure de document JSON unifiée ressemble à ce qui suit.

{ "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 unique d'entité représentant le document.

    • Pour SPARQL, il s'agit de l'URI de sujet.

    • Pour Gremlin, c'est le Vertex_ID ou Edge_ID.

  • entity_type : représente une ou plusieurs étiquettes pour un sommet ou une arête, ou zéro ou plusieurs valeurs de prédicat rdf:type pour un sujet.

  • document_type : permet de spécifier si le document actuel représente un sommet, une arête ou une ressource RDF.

  • predicates : pour Gremlin, stocke les propriétés et les valeurs d'un sommet ou d'une arête. Pour SPARQL, il stocke les paires prédicat-objet.

    Le nom de la propriété prend le formulaire properties.name.value dans OpenSearch. Pour l'interroger, vous devez le nommer sous cette forme.

  • value  : valeur de propriété pour Gremlin ou valeur d'objet pour SPARQL.

  • graph : graphe nommé pour SPARQL.

  • language : balise de langage pour un littéral rdf:langString dans SPARQL.

Exemple de document SPARQL OpenSearch

Données

@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

Documents

{ "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" }

Exemple de document Gremlin OpenSearch

Données

# 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

Documents

{ "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" } ] } }