0

给定以下三元组描述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))。我没有动手,不知道从哪里开始。

有谁知道如何做到这一点?您的帮助将推动我的工作向前发展!

4

0 回答 0