

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# Neptun-Datenmodell für Daten OpenSearch
<a name="full-text-search-model"></a>

Amazon Neptune verwendet eine einheitliche JSON-Dokumentstruktur zum Speichern von SPARQL- und Gremlin-Daten im Service. OpenSearch Jedes Dokument in OpenSearch entspricht einer Entität und speichert alle relevanten Informationen für diese Entität. Bei Gremlin werden Scheitelpunkte und Kanten als Entitäten betrachtet, sodass die entsprechenden OpenSearch Dokumente Informationen über Scheitelpunkte, Beschriftungen und Eigenschaften enthalten. Bei SPARQL können Subjekte als Entitäten betrachtet werden, sodass entsprechende OpenSearch Dokumente Informationen über alle Prädikat-Objekt-Paare in einem Dokument enthalten.

**Anmerkung**  
Die Neptune-to-OpenSearch Replikationsimplementierung speichert nur Zeichenkettendaten. Sie können sie jedoch so ändern, dass andere Datentypen gespeichert werden.

Die einheitliche JSON-Dokumentstruktur sieht folgendermaßen aus:

```
{
  "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` – Eindeutige Entitäts-ID, die das Dokument repräsentiert.
  + Bei SPARQL ist dies der Subjekt-URI.
  + Für Gremlin ist dies die `Vertex_ID` oder `Edge_ID`.
+ `entity_type` – Stellt eine oder mehrere Bezeichnungen für einen Vertex oder einen Edge bzw. keine oder mehrere `rdf:type`-Prädikatwerte für ein Subjekt dar.
+ `document_type` – Gibt an, ob das aktuelle Dokument einen Vertex, einen Edge oder eine RDF-Ressource darstellt.
+ `predicates` – Bei Gremlin werden Eigenschaften und Werte für einen Vertex oder einen Edge gespeichert. Bei SPARQL werden Prädikatobjektpaare gespeichert.

  Der Eigenschaftsname hat die Form `properties.name.value` in OpenSearch. Um ihn abfragen zu können, müssen Sie ihn in dieser Form benennen.
+ `value ` – Ein Eigenschaftswert für Gremlin oder ein Objektwert für SPARQL.
+ `graph` – Ein benannter Graph für SPARQL.
+ `language` – Ein Sprach-Tag für ein `rdf:langString`-Literal in SPARQL.

## Beispiel für ein SPARQL-Dokument OpenSearch
<a name="full-text-search-model-sparql-example"></a>

**Daten**

```
@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
```

**Dokumente**

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

## Beispiel für ein Gremlin-Dokument OpenSearch
<a name="full-text-search-model-gremlin-example"></a>

**Daten**

```
# 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
```

**Dokumente**

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