Modello di dati Neptune per i dati di OpenSearch - Amazon Neptune

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Modello di dati Neptune per i dati di OpenSearch

Amazon Neptune utilizza una struttura di documenti JSON unificata per l'archiviazione dei dati SPARQL e Gremlin nel servizio OpenSearch. Ogni documento in OpenSearch corrisponde a un'entità e archivia tutte le informazioni pertinenti per l'entità stessa. Per Gremlin, i vertici (nodi) e gli archi sono considerati entità, quindi i documenti OpenSearch corrispondenti contengono informazioni su vertici, etichette e proprietà. Per SPARQL, i soggetti possono essere considerati entità, quindi i documenti OpenSearch corrispondenti contengono informazioni su tutte le coppie predicato-oggetto in un unico documento.

Nota

L'implementazione della replica da Neptune a OpenSearch archivia solo i dati stringa. Tuttavia, è possibile modificarlo per memorizzare altri tipi di dati.

La struttura del documento JSON unificata è simile a questa:

{ "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 univoco dell'entità che rappresenta il documento.

    • Per SPARQL, questo è l'URI del soggetto.

    • Per Gremlin, questo è Vertex_ID o Edge_ID.

  • entity_type: rappresenta una o più etichette per un vertice o un arco o zero o più valori di predicato rdf:type per un soggetto.

  • document_type: consente di specificare se il documento corrente rappresenta un vertice, un arco o una risorsa RDF.

  • predicates: per Gremlin, archivia proprietà e valori per un vertice o un arco. Per SPARQL, memorizza coppie di oggetti-predicato.

    Il nome della proprietà assume il formato properties.name.value in OpenSearch. Per interrogarlo, devi nominarlo in quel modulo.

  • value : valore della proprietà per Gremlin o valore di oggetto per SPARQL.

  • graph: grafo denominato per SPARQL.

  • language: tag del linguaggio per un valore letterale rdf:langString in SPARQL.

Documento OpenSearch di esempio per SPARQL

Dati

@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 ex:simone ex:hates _:bnode # Not stored in ES _:bnode ex:means "coding" DG # Not stored in ES

Documenti

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

Documento OpenSearch di esempio per Gremlin

Dati

# 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

Documenti

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