给定以下三元组描述Forklift1 在不同时间的位置:
:forklift1
:location :station1, :dockdoor1;
:9305fc5f-d43d :station1;
:a4e9-2bcd5b97 :dockdoor1;
.
:9305fc5f-d43d a :location;
:createdDate "2022-01-02T10:00:00.000-05:00"^^xsd:dateTime;
:expiryDate "2022-01-03T14:00:00.000-05:00"^^xsd:dateTime;
.
:a4e9-2bcd5b97 a :location;
:createdDate "2022-01-03T14:00:00.000-05:00"^^xsd:dateTime;
.
要检索 Forklift1 的当前位置,SPARQL 查询是:
select ?o where {
:forklift1 :location ?o
optional{:forklift1 ?px ?o. ?px a :location. optional{?px :createdDate ?createdDate} optional {?px :expiryDate ?expiryDate}}
filter (!bound(?expiryDate))
}
?o :dockdoor1
我的目标是让查询引擎返回相同的结果,但查询更简单:
select ?s where {
:forklift1 :location ?o.
}
?o :dockdoor1
我正在使用Jena TBD + ARQ;我阅读了一些文档,可以通过自定义 ARQ 查询引擎来完成。对于每个 Triple 模式 :forklift1 :location ?o
,以编程方式添加新的属性实例模式 optional{:forklift1 ?px ?o. ?px a :location. optional{?px :createdDate ?createdDate} optional {?px :expiryDate ?expiryDate}} filter (!bound(?expiryDate))
。我没有动手,不知道从哪里开始。
有谁知道如何做到这一点?您的帮助将推动我的工作向前发展!