SPARQL与一起使用的查询提示 DESCRIBE - Amazon Neptune

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

SPARQL与一起使用的查询提示 DESCRIBE

SPARQLDESCRIBE查询为请求资源描述提供了一种灵活的机制。但是,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 .

以下示例假设:JaneDoe正在使用这样的SPARQL查询来请求对资源的描述:

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

describeModeSPARQL查询提示

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

ForwardOneStepDESCRIBE模式

您可以使用 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,与输入数据集相比,IDs每次都有不同的三元组。

SymmetricOneStepDESCRIBE模式

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引用,要么是文字,要么是空白节点,不作为图中任何语句的主题。请注意,CBD不能使用单一SPARQLSELECT或CONSTRUCT查询来计算。

对称简明界限描述 (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 .

CBD与ForwardOneStepSymmetricOneStep模式相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> }

describeIterationLimitSPARQL查询提示

hint:describeIterationLimitSPARQL查询提示提供了一个可选约束,用于限制迭代DESCRIBE算法(如和)要执行的最大迭代扩展次数。CBD SCBD

DESCRIBE极限ANDed合而为一。因此,如果同时指定了迭代限制和语句限制,则在切断DESCRIBE查询之前必须同时满足这两个限制。

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

describeStatementLimitSPARQL查询提示

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

DESCRIBE极限ANDed合而为一。因此,如果同时指定了迭代限制和语句限制,则在切断DESCRIBE查询之前必须同时满足这两个限制。

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