使用 SPARQL 的 Neptune 最佳實務 - Amazon Neptune

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

使用 SPARQL 的 Neptune 最佳實務

搭配 Neptune 使用 SPARQL 查詢語言時,請遵循這些最佳實務。如需在 Neptune 中使用 SPARQL 的相關資訊,請參閱 訪問 Neptune 圖 SPARQL

預設查詢所有具名圖形

Amazon Neptune 會將每個三元組與一個具名圖形建立關聯。預設圖形是定義成所有具名圖形的聯集。

若您提交 SPARQL 查詢而未透過 GRAPH 關鍵字或 FROM NAMED 之類的建構式明確指定圖形,Neptune 一律會考慮資料庫執行個體中的所有三元組。例如,以下查詢將從 Neptune SPARQL 端點傳回所有三元組:

SELECT * WHERE { ?s ?p ?o }

顯現於多個圖形中的三元組將僅傳回一次。

如需預設圖形規格的相關資訊,請參閱 SPARQL 1.1 查詢語言規格的 RDF 資料集一節。

指定要載入的具名圖表

Amazon Neptune 會將每個三元組與一個具名圖形建立關聯。如果您在載入、插入或更新三元組時未指定具名圖形,Neptune 會使用由 URI 定義的備用具名圖形 (http://aws.amazon.com/neptune/vocab/v01/DefaultNamedGraph)。

如果您是使用 Neptune 大量載入器,則可以使用 parserConfiguration: namedGraphUri 參數,指定要用於所有三元組 (或第四位置空白的四元組) 的具名圖形。如需 Neptune 載入器 Load 命令語法的相關資訊,請參閱 Neptune 載入器命令

在您的查詢中選擇 FILTER、FILTER...IN 和 VALUES

有三種基本方式可在 SPARQL 查詢中注入值:FILTERFILTER...INVALUES

例如,假設您想要在單次查詢中,查詢多名人員的好友。使用 FILTER,您可以建構如下查詢:

PREFIX ex: <https://www.example.com/> PREFIX foaf : <http://xmlns.com/foaf/0.1/> SELECT ?s ?o WHERE {?s foaf:knows ?o. FILTER (?s = ex:person1 || ?s = ex:person2)}

這會傳回將 ?s 繫結至 ex:person1ex:person2,且外寄節點標示為 foaf:knows 之圖形中的所有三元組。

您也可以使用傳回同等結果的 FILTER...IN 建立查詢:

PREFIX ex: <https://www.example.com/> PREFIX foaf : <http://xmlns.com/foaf/0.1/> SELECT ?s ?o WHERE {?s foaf:knows ?o. FILTER (?s IN (ex:person1, ex:person2))}

您也可以使用在這種情況下也會傳回同等結果的 VALUES 建立查詢:

PREFIX ex: <https://www.example.com/> PREFIX foaf : <http://xmlns.com/foaf/0.1/> SELECT ?s ?o WHERE {?s foaf:knows ?o. VALUES ?s {ex:person1 ex:person2}}

雖然在許多情況下,這些查詢在語意上是相等的,但在某些情況下,兩個 FILTER 變體和 VALUES 變體不同:

  • 第一種情況是當您注入重複值時,例如注入相同的人員兩次。在這種情況下,VALUES 查詢會在結果中包含重複項目。您可以將 DISTINCT 新增至 SELECT 子句,明確消除這類重複。但有時候,您可能真的需要在查詢結果中出現重複項目,以注入多餘值。

    不過,當相同的值出現多次時,FILTERFILTER...IN 版本只擷取一次值。

  • 第二種情況與 VALUES 一律執行完全符合,而 FILTER 可能會套用類型提升,並在某些情況下執行模糊映射有關。

    例如,當您在值子句中包含 "2.0"^^xsd:float 等常值時,VALUES 查詢會尋找與此常值完全符合的項目,包括常值的值和資料類型。

    相反地,FILTER 則會產生與這些數值常值模糊符合的項目。符合項目可能包括值相同、但數值資料類型不同的常值,例如 xsd:double

    注意

    列舉字串常值或 URI 時,FILTERVALUES 的行為間無差異。

FILTERVALUES 之間的差異會影響最佳化和產生的查詢評估策略。除非您的使用案例需要模糊相符,否則建議您使用 VALUES,因為它會避免查看有關類型轉換的特殊案例。因此,VALUES 通常會產生更有效率的查詢,執行速度更快但價格低廉。