与 DESCRIBE 结合使用的 SPARQL 查询提示 - Amazon Neptune
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

与 DESCRIBE 结合使用的 SPARQL 查询提示

SPARQL DESCRIBE 查询为请求资源描述提供了一种灵活的机制。但是,SPARQL 规范并未定义 DESCRIBE 的精确语义。

引擎版本 1.2.0.2 开始,Neptune 支持几种适合不同情况的不同 DESCRIBE 模式和算法。

此示例数据集可以帮助说明不同的模式:

@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . @prefix : <https://example.com/> . :JaneDoe :firstName "Jane" . :JaneDoe :knows :JohnDoe . :JohnDoe :firstName "John" . :JaneDoe :knows _:b1 . _:b1 :knows :RichardRoe . :RichardRoe :knows :JaneDoe . :RichardRoe :firstName "Richard" . _:s1 rdf:type rdf:Statement . _:s1 rdf:subject :JaneDoe . _:s1 rdf:predicate :knows . _:s1 rdf:object :JohnDoe . _:s1 :knowsFrom "Berlin" . :ref_s2 rdf:type rdf:Statement . :ref_s2 rdf:subject :JaneDoe . :ref_s2 rdf:predicate :knows . :ref_s2 rdf:object :JohnDoe . :ref_s2 :knowsSince 1988 .

以下示例假设使用如下所示的 SPARQL 查询来请求资源 :JaneDoe 的描述:

DESCRIBE <https://example.com/JaneDoe>

describeMode SPARQL 查询提示

hint:describeMode SPARQL 查询提示用于选择 Neptune 支持的以下 SPARQL DESCRIBE 模式之一:

ForwardOneStep DESCRIBE 模式

您可以使用 describeMode 查询提示调用 ForwardOneStep 模式,如下所示:

PREFIX hint: <http://aws.amazon.com/neptune/vocab/v01/QueryHints#> DESCRIBE <https://example.com/JaneDoe> { hint:Query hint:describeMode "ForwardOneStep" }

ForwardOneStep 模式仅返回要描述的资源的属性和正向链接。在示例中,这意味着它将具有 :JaneDoe(待描述的资源)的三元组作为主题返回:

:JaneDoe :firstName "Jane" . :JaneDoe :knows :JohnDoe . :JaneDoe :knows _:b301990159 .

请注意,DESCRIBE 查询可能会返回带有空白节点的三元组,例如 _:b301990159,它与输入数据集相比,每次具有不同的 ID。

SymmetricOneStep DESCRIBE 模式

如果您不提供查询提示,则 SymmetricOneStep 是默认的 DESCRIBE 模式。您也可以使用 describeMode 查询提示显式调用它,如下所示:

PREFIX hint: <http://aws.amazon.com/neptune/vocab/v01/QueryHints#> DESCRIBE <https://example.com/JaneDoe> { hint:Query hint:describeMode "SymmetricOneStep" }

SymmetricOneStep 语义下,DESCRIBE 返回要描述的资源的属性、正向链接和反向链接:

:JaneDoe :firstName "Jane" . :JaneDoe :knows :JohnDoe . :JaneDoe :knows _:b318767375 . _:b318767631 rdf:subject :JaneDoe . :RichardRoe :knows :JaneDoe . :ref_s2 rdf:subject :JaneDoe .

简明界限描述 (CBD) DESCRIBE 模式

使用 describeMode 查询提示调用简明界限描述 (CBD) 模式,如下所示:

PREFIX hint: <http://aws.amazon.com/neptune/vocab/v01/QueryHints#> DESCRIBE <https://example.com/JaneDoe> { hint:Query hint:describeMode "CBD" }

CBD 语义下,DESCRIBE 返回要描述的资源的简明界限描述(如 W3C 定义):

:JaneDoe :firstName "Jane" . :JaneDoe :knows :JohnDoe . :JaneDoe :knows _:b285212943 . _:b285212943 :knows :RichardRoe . _:b285213199 rdf:subject :JaneDoe . _:b285213199 rdf:type rdf:Statement . _:b285213199 rdf:predicate :knows . _:b285213199 rdf:object :JohnDoe . _:b285213199 :knowsFrom "Berlin" . :ref_s2 rdf:subject :JaneDoe .

RDF 资源(即 RDF 图形中的节点)的简明界限描述是以能够独立的节点为中心的最小子图形。实际上,这意味着,如果您将此图形视为一棵树,以指定的节点为根,则该树的叶子中没有空白节点 (bnode)。由于空白节点无法在外部寻址,也无法在后续查询中使用,因此仅仅浏览图形来查找当前节点中接下来的一个或多个单跳是不够的。您还必须找到可以在后续查询中使用的节点(即空白节点以外的节点)。

计算 CBD

给定源 RDF 图形中的特定节点(起始节点或根),该节点的 CBD 计算如下:

  1. 在子图形中包括源图形中所有以语句的主题为起始节点的语句。

  2. 以递归方式,对于子图形中迄今为止具有空白节点对象的所有语句,请在子图形中包含源图形中语句的主题为该空白节点且尚未包含在子图形中的所有语句。

  3. 以递归方式,对于子图形中迄今为止包含的所有语句,对于源图形中对这些语句的所有修改,包括从每个具体化的 rdf:Statement 节点开始的 CBD。

这会生成一个子图形,其中对象节点要么是 IRI 引用,要么是文本,要么是空白节点,它们不作为图形中任何语句的主题。请注意,不能使用单个 SPARQL SELECT 或 CONSTRUCT 查询来计算 CBD。

对称简明界限描述 (SCBD) DESCRIBE 模式

使用 describeMode 查询提示调用对称简明界限描述 (SCBD) 模式,如下所示:

PREFIX hint: <http://aws.amazon.com/neptune/vocab/v01/QueryHints#> DESCRIBE <https://example.com/JaneDoe> { hint:Query hint:describeMode "SCBD" }

SCBD 语义下,DESCRIBE 返回资源的对称简明界限描述(由 W3C 在使用 VoID 词汇描述关联数据集中定义:

:JaneDoe :firstName "Jane" . :JaneDoe :knows :JohnDoe . :JaneDoe :knows _:b335544591 . _:b335544591 :knows :RichardRoe . :RichardRoe :knows :JaneDoe . _:b335544847 rdf:subject :JaneDoe . _:b335544847 rdf:type rdf:Statement . _:b335544847 rdf:predicate :knows . _:b335544847 rdf:object :JohnDoe . _:b335544847 :knowsFrom "Berlin" . :ref_s2 rdf:subject :JaneDoe .

ForwardOneStepSymmetricOneStep 模式相比,CBD 和 SCBD 的优势在于,空白节点总是会扩展为包括它们的表示形式。这可能是一个重要的优势,因为您无法使用 SPARQL 查询空白节点。此外,CBD 和 SCBD 模式也考虑具体化。

请注意,describeMode 查询提示也可以是 WHERE 子句的一部分:

PREFIX hint: <http://aws.amazon.com/neptune/vocab/v01/QueryHints#> DESCRIBE ?s WHERE { hint:Query hint:describeMode "CBD" . ?s rdf:type <https://example.com/Person> }

describeIterationLimit SPARQL 查询提示

hint:describeIterationLimit SPARQL 查询提示为要针对迭代 DESCRIBE 算法(例如 CBD 和 SCBD)执行的最大迭代扩展次数提供了一个可选约束。

DESCRIBE 限制需要同时满足才行。因此,如果同时指定了迭代限制和语句限制,则必须同时满足这两个限制,然后才能断开 DESCRIBE 查询。

此值的默认值为 5。您可以将其设置为零 (0),以指定对迭代扩展的数量没有限制。

describeStatementLimit SPARQL 查询提示

hint:describeStatementLimit SPARQL 查询提示提供了对 DESCRIBE 查询响应中可能存在的最大语句数的可选约束。它仅适用于迭代 DESCRIBE 算法,例如 CBD 和 SCBD。

DESCRIBE 限制需要同时满足才行。因此,如果同时指定了迭代限制和语句限制,则必须同时满足这两个限制,然后才能断开 DESCRIBE 查询。

此值的默认值为 5000。您可以将其设置为零 (0),以指定对返回的语句数量没有限制。