在sparql查询中使用CONSTRUCT
时,输出为single RDF graph,也就是一组三元组,基本上是 new 数据。但总的来说,我认为CONSTRUCT
是一种手动创建理论上应该可重用的规则的方法。
在CONSTRUCT
的示例用法中,假设我想要定义数据中尚未存在的内容。 Here's a good example taken from an article about CONSTRUCT
@prefix : <http://some.site.com/ont#> .
:jane :hasParent :gene .
:gene :hasParent :pat ;
:gender :female .
:joan :hasParent :pat ;
:gender :female .
:pat :gender :male .
:mike :hasParent :joan .
“以下CONSTRUCT语句根据上述内容创建新的三元组,以指定谁是谁的祖父:”
PREFIX : <http://some.site.com/ont#>
CONSTRUCT { ?p :hasGrandfather ?g . }
WHERE {?p :hasParent ?parent .
?parent :hasParent ?g .
?g :gender :male .
}
结果:
@prefix : <http://some.site.com/ont#> .
:jane :hasGrandfather :pat .
:mike :hasGrandfather :pat .
由于CONSTRUCT
查询,我生成了 new triples ,这是否意味着我必须获取该数据,然后将其输入数据库才能启动使用/重用:hasGrandfather
?或者我可以引用生成的RDF图,就好像我将在SQL中引用动态表一样?
是否有其他有用的方法可以与使用CONSTRUCT
生成的三元组进行交互?
答案 0 :(得分:4)
如果您正在使用SPARQL 1.1,并且您正在查询三元组,则通常使用INSERT将这些三元组添加到商店(添加到同一图表或不同图表)。请查看SPARQL 1.1 Update中的第3.1节:
3.1 Graph Update
图形更新操作会更改图形存储中的现有图形但是 不要明确删除也不要创建它们。非空插入 但是,不存在的图形将隐式创建这些图形, 即,实现更新请求的实现应该是静默的 自动创建三元组之前不存在的图形 插入其中,如果不能这样做,必须以失败的方式返回 无论如何。 (例如,实施可能不够 资源或实现可能只提供更新服务 在一组固定的图形上,隐式创建的图形不是 在这个固定的集合内)。实现可能会删除图表 将三元组从中移除后留空。
SPARQL 1.1 Update提供了以下图形更新操作:...
- 图形更新的基于模式的基本操作是INSERT和DELETE(可以在单个DELETE / INSERT操作中共同出现)。 这些操作包括要删除的三元组和组 要添加的三元组。三元组的规格基于 查询模式。 INSERT / DELETE和INSERT DATA之间的区别 / DELETE DATA是INSERT DATA和DELETE DATA不替换的 从模式绑定到模板。 DATA表格需要 具体数据(包含DELETE中变量的三重模板) 不允许DATA和INSERT DATA操作,空白节点是 在DELETE DATA中不允许,请参阅语法中的注释8 + 9)。有 具体数据的具体操作意味着请求可以 流式传输,以便可以完成大型的纯数据更新。
后来在同一份文件中:
例8:
此示例将三元组从一个命名图形复制到另一个命名图形 基于模式的图表:
PREFIX dc: <http://purl.org/dc/elements/1.1/> PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> INSERT { GRAPH <http://example/bookStore2> { ?book ?p ?v } } WHERE { GRAPH <http://example/bookStore> { ?book dc:date ?date . FILTER ( ?date > "1970-01-01T00:00:00-02:00"^^xsd:dateTime ) ?book ?p ?v } }
答案 1 :(得分:2)
为了补充Joshua的答案,因为您似乎正在使用构造查询来编写规则,您可以考虑使用或至少查看OWL并使用支持推理的数据库(有几个)。一些支持OWL的数据库也将支持SWRL规则,因此您可以使用两者。
如果你想坚持规则,但更喜欢SPARQL,Stardog有一个SPARQL based syntax for SWRL;它们仍然是SWRL规则,但具有可口的语法。还有SPIN,虽然不是标准,但它是基于SPARQL的规则,但不是正式的标准。