

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

# RDF 的集區模型
<a name="pool-model-rdf"></a>

資源描述架構 (RDF) 具有具名圖形的概念，可提供分隔資料的邏輯方式。在 Amazon Neptune 中，您有預設的命名圖形和使用者定義的命名圖形。您可以視需要建立任意數量的具名圖形。統稱為 RDF 資料集。預設或使用者定義的所有具名圖形都是由 RDF 資料集內的國際化資源識別符 (IRI) 定義。在 Neptune 中，除非使用者在寫入資料時宣告具名圖形，否則所有[三元組](https://www.w3.org/TR/PR-rdf-syntax/#model)都會被視為預設具名圖形的一部分。

具名圖形有多個使用案例：
+ 資料分割和資料隔離
+ 資料來源
+ 版本控制
+ Inference

本指南著重於資料分割使用案例。我們建議為每個租用戶建立一個使用者定義的具名圖形。

## 使用圖形存放區 HTTP 通訊協定的 SPARQL 查詢選項
<a name="sparql"></a>

下列範例查詢使用 SPARQL 通訊協定和 RDF 查詢語言 (SPARQL) 和圖形存放區 HTTP 通訊協定來查詢或建立租用戶的具名圖形。
+ `HTTP GET` ‒ 若要擷取租用戶的特定圖形：

  ```
  curl --request GET 'https://your-neptune-endpoint:port/sparql/gsp/?graph=http%3A//www.example.com/named/tenant1'
  ```
+ `HTTP PUT` ‒ 若要使用請求中指定的承載建立或取代特定具名圖形：

  ```
  curl --request PUT -H "Content-Type: text/turtle" \  --data-raw "@prefix ex: http://example.com/ . ex:subject ex:predicate ex:object ." \ 
  'https://your-neptune-endpoint:port/sparql/gsp/?graph=http%3A//www.example.com/named/tenant1'
  ```

  在 RDF 中，物件是三元物件。
+ `HTTP POST` ‒ 若要在圖形不存在時建立新的具名圖形，或與現有圖形合併：

  ```
  curl --request POST -H "Content-Type: text/turtle" \
  --data-raw "@prefix ex: http://example.com/ . ex:subject ex:predicate ex:object ." \  
  'https://your-neptune-endpoint:port/sparql/gsp/?graph=http%3A//www.example.com/named/tenant1'
  ```

## RDF 的租用戶隔離
<a name="isolation"></a>

若要在應用程式層使用必要的護欄對資料進行邏輯隔離，請在租用戶和使用者定義的具名圖形之間建立映射。當您為 RDF 資料集設計多租戶時，請注意 RDF 和 [SPARQL](https://www.w3.org/TR/sparql11-query/) 的下列層面：
+ 在 Neptune 中，當您在不指定具名圖形的情況下進行查詢時，它會擷取資料庫中所有具名圖形中符合模式的所有三元組。
+ 在 RDF 中，不同具名圖形節點之間的連線沒有限制。例如，在上圖中， 中的節點`:G1`可以透過邊緣連接到 `G2`中的節點。

例如，如果特定租用戶的最終使用者提交查詢至 API，API 應先驗證下列需求，再將查詢提交至 Neptune 資料庫：
+ 任何範圍在單一租用戶的查詢都必須指定具名圖形。否則，您會面臨跨租用戶洩漏資料的風險。
+ 更新或刪除查詢應一律指定具名圖形。
+ 邊緣或關係任一端的節點應一律屬於正確的具名圖形。

如需最佳實務的詳細資訊，請參閱 [Neptune 文件](https://docs.aws.amazon.com/neptune/latest/userguide/feature-sparql-compliance.html)。