在端点SPARQL中添加RDFS推理规则支持
我已经在OpenLink Virtuoso上创建了一个端点SPAQL。 所有这些都可以正常工作,但我必须访问容器中的数据,特别是rdf:Seq 我有一张这样的序号:在端点SPARQL中添加RDFS推理规则支持,sparql,rule,virtuoso,rdfs,inference,Sparql,Rule,Virtuoso,Rdfs,Inference,我已经在OpenLink Virtuoso上创建了一个端点SPAQL。 所有这些都可以正常工作,但我必须访问容器中的数据,特别是rdf:Seq 我有一张这样的序号: <myrdf:has_stoptimes> <rdf:Seq rdf:about="http://test.com/343"> <rdf:li> <myrdf:StopTime rdf:about="http://test.com/StopTime/434">
<myrdf:has_stoptimes>
<rdf:Seq rdf:about="http://test.com/343">
<rdf:li>
<myrdf:StopTime rdf:about="http://test.com/StopTime/434">
...
</ns0:StopTime>
</rdf:li>
<rdf:li>
<myrdf:StopTime rdf:about="http://test.com/StopTime/435">
...
</ns0:StopTime>
</rdf:li>
</rdf:Seq>
查询SPARQL终结点时没有任何效果,如:
define input:inference "http://localhost:8890/schema/property_rules1"
SELECT *
FROM
WHERE {?sep a rdf:Seq.
?seq rdfs:member ?p}
在我尝试向ttl文件添加以下行之后:rdf:_1rdfs:subpertyof rdfs:member
。通过这种方式,它可以工作,但很明显,结果只适用于容器的第一个元素。因此,为所有的rdf:_n
添加一行是非常不方便的,我认为这只是一个临时解决方案,它是不正确的
如果运行查询,我尝试在SILK 2.6.1和数据源的SPARQL部分添加RDF转储:
SELECT *
FROM
WHERE {?sep a rdf:Seq.
?seq rdfs:member ?p}
我得到了正确的结果,没有指定任何推理规则。所以我认为在SILK的这个功能中,我的端点SPARQL中缺少了一些东西,或者我说的是胡说八道吗?您不能在属性路径中使用变量,所以您实际上不能这样做
?x ?a/has_stoptimes/rdfs:member ?y
相反,您必须在以下两者之间使用另一个变量或空白节点:
?x ?a ?z . ?z has_stoptimes/rdfs:member ?y
不太清楚你在问什么。您的意思是想使用属性路径,如
?a/has_stoptimes/rdfs:member
?是的,非常抱歉我的问题不好。但我的问题是,接收我的查询的端点SPARQL无法识别rdfs:member
属性,因此我无法对容器的节点(rdf:Seq)进行操作。实际的错误消息是什么?您是否声明了适当的前缀?是,所有前缀都正确,没有错误消息。问题是我的rdf有类似rdf:_1,rdf:_2..rdf:_n的属性,我发现通过SPARQL查询rdf:Seq节点的唯一方法是通过rdfs:member属性。SILK生成的SPARQL查询是:SELECT?b?v0,其中{b a.可选{b?t1.?t1?v0.}
所以问题不在于SILK或它的语法,因为如果我通过浏览器直接在SPARQL端点上查询,它无论如何都不起作用。我很确定问题在于我需要修改我的端点SPARQL,比如添加推理规则,但我不知道如何添加,特别是添加了哪一个规则。我发现一个老文档在谈论它,但非常普遍地说啊,好的。我明白了。对不起,我误解了这个问题。您的数据可以让您假设如果某个东西是一个Seq,那么它的所有属性(除了rdf:type
)都是rdfs:_n
属性吗?然后您可以简单地搜索:seq789?p?元素
。
?x ?a ?z . ?z has_stoptimes/rdfs:member ?y
?x ?a [ has_stoptimes/rdfs:member ?y ] .