

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# Neptune 中的 Gremlin 语句
<a name="gremlin-explain-background-statements"></a>

Amazon Neptune 中的属性图数据由四个位置（四元组）语句组成。这些语句中的每一个都代表属性图数据的单个原子单元。有关更多信息，请参阅 [Neptune 图形数据模型](feature-overview-data-model.md)。与资源描述框架 (RDF) 数据模型类似，这四个位置如下所述：
+ `subject (S)`
+ `predicate (P)`
+ `object (O)`
+ `graph (G)`

每个语句都是对一个或多个资源的断言。例如，一个语句可以断言两个资源之间是否存在关系，或者可以将一个属性（键/值对）附加到某个资源。

您可以将谓词视为语句的动词，以描述关系或属性的类型。对象是关系的目标，或者是属性的值。图形位置可选，可通过多种不同方式使用。对于 Neptune 属性图 (PG) 数据，此项可以不使用（空图），或是用于表示边缘的标识符。一组具有共享资源标识符的语句创建一个图形。

Neptune 属性图数据模型中有三类语句：

**Topics**
+ [顶点标签语句](#gremlin-explain-background-vertex-labels)
+ [边缘语句](#gremlin-explain-background-edge-statements)
+ [属性语句](#gremlin-explain-background-property-statements)

## Gremlin 顶点标签语句
<a name="gremlin-explain-background-vertex-labels"></a>

Neptune 中的顶点标签语句有两个作用：
+ 跟踪顶点的标签。
+ 只要存在一条此类语句，即暗示图中存在特定顶点。

这些语句的主语是顶点标识符，宾语是标签，两者均由用户指定。您对这些语句使用特殊的固定谓词（显示为 `<~label>`）和默认图标识符（空图，显示为 `<~>`）。

例如，请考虑以下 `addV` 遍历。

```
g.addV("Person").property(id, "v1")
```

这种遍历导致将以下语句添加到图中。

```
StatementEvent[Added(<v1> <~label> <Person> <~>) .]
```

## Gremlin 边缘语句
<a name="gremlin-explain-background-edge-statements"></a>

Gremlin 边缘语句用于暗示 Neptune 图形中两个顶点之间存在边缘。边缘语句的主语 (S) 是源 `from` 顶点。谓词 (P) 是用户提供的边缘标签。宾语 (O) 是目标 `to` 顶点。图 (G) 是用户提供的边缘标识符。

例如，请考虑以下 `addE` 遍历。

```
g.addE("knows").from(V("v1")).to(V("v2")).property(id, "e1")
```

这种遍历导致将以下语句添加到图中。

```
StatementEvent[Added(<v1> <knows> <v2> <e1>) .]
```

## Gremlin 属性语句
<a name="gremlin-explain-background-property-statements"></a>

Neptune 中的 Gremlin 属性语句对顶点或边缘的单个属性值进行断言。主语是用户提供的顶点或边缘标识符。谓词是属性名称（键），宾语是单个属性值。图 (G) 还是默认的图标识符，即空图，显示为 `<~>`。

考虑以下顶点属性示例。

```
g.V("v1").property("name", "John")
```

该语句导致以下结果。

```
StatementEvent[Added(<v1> <name> "John" <~>) .]
```

属性语句与其他语句的不同之处在于，属性语句的宾语是基元值（`string`、`date`、`byte`、`short`、`int`、`long`、`float` 或 `double`）。它们的宾语不是可用作其他断言的主语的资源标识符。

对于多属性，集合中的每个单属性值接收各自的语句。

```
g.V("v1").property(set, "phone", "956-424-2563").property(set, "phone", "956-354-3692 (tel:9563543692)")
```

这将产生以下结果。

```
StatementEvent[Added(<v1> <phone> "956-424-2563" <~>) .]
StatementEvent[Added(<v1> <phone> "956-354-3692" <~>) .]
```

边缘属性的处理方式与顶点属性类似，但在 (S) 位置使用边标识符。例如，向边缘添加属性：

```
g.E("e1").property("weight", 0.8)
```

这会导致将以下语句添加到图表中。

```
StatementEvent[Added(<e1> <weight> 0.8 <~>) .]
```