

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 關於預設圖形的 SPARQL DESCRIBE 行為
<a name="sparql-default-describe"></a>

SPARQL [https://www.w3.org/TR/sparql11-query/#describe](https://www.w3.org/TR/sparql11-query/#describe) 查詢表單可讓您擷取資源的相關資訊，而無需知道資料結構，也不必撰寫查詢。如何組合這些資訊留給 SPARQL 實作決定。Neptune 提供了[數個查詢提示](sparql-query-hints-for-describe.md)，調用不同的模式和演算法，供 `DESCRIBE` 使用。

在 Neptune 的實作中，無論模式為何，`DESCRIBE` 只會使用 [SPARQL 預設圖形](feature-sparql-compliance.md#sparql-default-graph)中存在的資料。這與 SPARQL 處理資料集的方式一致 (請參閱 SPARQL 規格中的[指定 RDF 資料集](https://www.w3.org/TR/sparql11-query/#specifyingDataset))。

在 Neptune 中，除非使用 `FROM` 和/或 `FROM NAMED` 子句指定特定的具名圖形，否則預設圖形會包含資料庫中所有具名圖形之聯集中的所有唯一三元組。Neptune 的所有 RDF 資料都儲存在具名圖形中。如果插入沒有具名圖形內容的三元組，Neptune 會將其儲存在指定的具名圖形 `http://aws.amazon.com/neptune/vocab/v01/DefaultNamedGraph` 中。

當使用 `FROM` 子句指定一或多個具名圖形時，預設圖形是這些具名圖形中所有唯一三元組的聯集。如果沒有 `FROM` 子句，但有一個或多個 `FROM NAMED` 子句，則預設圖形是空的。

## SPARQL `DESCRIBE` 範例
<a name="sparql-default-describe-examples"></a>

請考慮下列資料：

```
PREFIX ex: <https://example.com/>

GRAPH ex:g1 {
    ex:s ex:p1 "a" .
    ex:s ex:p2 "c" .
}

GRAPH ex:g2 {
    ex:s ex:p3 "b" .
    ex:s ex:p2 "c" .
}

ex:s ex:p3 "d" .
```

對於此查詢：

```
PREFIX ex: <https://example.com/>
DESCRIBE ?s
FROM ex:g1
FROM NAMED ex:g2
WHERE {
  GRAPH ex:g2 { ?s ?p "b" . }
}
```

Neptune 會傳回：

```
ex:s ex:p1 "a" .
ex:s ex:p2 "c" .
```

在這裡，首先評估圖形模式 `GRAPH ex:g2 { ?s ?p "b" }`，這會導致 `?s` 的繫結，然後對預設圖形評估 `DESCRIBE` 部分，現在只是 `ex:g1`。

不過，對於此查詢：

```
PREFIX ex: <https://example.com/>
DESCRIBE ?s 
FROM NAMED ex:g1 
WHERE { 
  GRAPH ex:g1 { ?s ?p "a" . } 
}
```

Neptune 不會傳回任何內容，因為當 `FROM NAMED` 子句存在，而沒有任何 `FROM` 子句時，預設圖形是空的。

在以下查詢中，`DESCRIBE` 會在沒有 `FROM` 或 `FROM NAMED` 子句存在的情況下使用：

```
PREFIX ex: <https://example.com/>
DESCRIBE ?s 
WHERE { 
  GRAPH ex:g1 { ?s ?p "a" . } 
}
```

在此情況下，預設圖形是由資料庫中所有具名圖形之聯集中的所有唯一三元組成 (正式稱為 RDF 合併)，因此 Neptune 將傳回：

```
ex:s ex:p1 "a" . 
ex:s ex:p2 "c" . 
ex:s ex:p3 "b" .
ex:s ex:p3 "d" .
```