[英]add RDFS inference rules support in endpoint SPARQL
我已經在OpenLink Virtuoso上創建了一個端點SPAQL。 一切正常,但我必須訪問Container中的數據,尤其是rdf:Seq。
我有一個這樣的序列:
<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>
現在我看到要訪問容器中的數據,我可以使用rdfs:member
或FILTER (strstarts(str(?prop), str(rdf:_))
在這里解釋
但是對於我的項目,我必須采用第一個解決方案,因為我正在使用Silk,並且我將使用?a/myrdf:has_stoptimes/rdfs:member
類的代碼語法,而無需使用“復雜”過濾器。
我試圖按照本指南進行操作,但是查詢終結點並沒有達到我的期望。
所以我的問題是:如何在Virtuoso端點SPARQL上查詢?a/myrdf:has_stoptimes/rdfs:member
?我必須在端點SPARQL中添加哪些推理規則?
先感謝您
更新
我在Virtuoso中創建了以下推理規則:
ttlp (' @prefix rdfs: .
@prefix rdf: .
rdfs:Container rdf:type rdfs:Class ; rdfs:subClassOf rdfs:Resource .
rdfs:ContainerMembershipProperty a rdfs:Class ; rdfs:subClassOf rdf:Property .
rdf:Seq rdf:type rdfs:Class ; rdfs:subClassOf rdfs:Container .
rdfs:member rdf:type rdf:Property ; rdfs:domain rdfs:Resource ; rdfs:range rdfs:Resource .
', '', 'http://localhost:8890/schema/test') ;
查詢SPARQL端點沒有任何工作,例如:
define input:inference "http://localhost:8890/schema/property_rules1"
SELECT *
FROM
WHERE {?sep a rdf:Seq.
?seq rdfs:member ?p}
在我嘗試將以下行添加到ttl文件后: rdf:_1 rdfs:subPropertyOf rdfs:member
。 這樣,它就可以工作,但顯然結果僅適用於容器的第一個元素。 因此,為所有rdf:_n
添加一行非常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
?x ?a [ has_stoptimes/rdfs:member ?y ] .
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.