如何存储本体的TBOX和ABOX,推理应该在哪里进行?

时间:2019-05-28 15:13:08

标签: jena semantic-web ontology virtuoso triplestore

我正在研究一种包含一些服务和一些服务的语义IoT体系结构。目标是使用我在Protege上构建的本体添加语义注释。我还使用带有Pellet推理程序的Jena 3.6 API(Java 8)在Ubuntu 18.04服务器上设置了Virtuoso 6。我知道最好的做法是保持TBOX和ABOX分开,以便推理和SPARQL查询应该更快,但是我应该如何使用Virtuoso做到这一点呢?因此,考虑到我在.owl文件中的本体以及所有个人,我应该如何存储TBOX以及ABOX的存储方式以及在什么阶段进行推理?

起初,我构建体系结构的方式是每次必须发出SPARQL请求时,我都会发送给Jena,Jena随后将获取上载于Virtuoso的图形,然后使用推理机进行查询,最终将返回结果。

但是,我的教授不同意这种方法,因为他说这还不够快,并建议我将体系结构更改为仅在必要时进行推理的结构,而不是每次都要进行SPARQL时才进行推理。查询。因此,我在问如何使用Virtuoso(或任何其他三重存储)以有效的方式通常存储我的本体。

2 个答案:

答案 0 :(得分:0)

Virtuoso支持命名图(因为它是RDF DBMS方面的RDF Quad存储)。

只需将TBox三元组加载到一个命名图中,然后将ABox三元组加载到另一个命名图中。

Virtuoso中的推理和推理有两种形式。无论哪种情况,它都是由实用指示控制的。也就是说,您可以根据需要将其打开和关闭:

  1. 内置-请参阅有关Built-In Reasoning and Inference
  2. 的信息
  3. 自定义-参阅有关Custom Reasoning and Inference
  4. 的信息

注意:这两篇文章都通过实例演示了Virtuoso方法的实用性。

答案 1 :(得分:0)

在IoT部署中,价值通常会不断变化,因此实时查询方法可能是合适的。因此,如果您忽略了实时推理方面(也许您可以预先计算它,因为IoT部署的动态方面与您要进行的推理无关),您可以使用以下查询进行操作:

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX sosa: <http://www.w3.org/ns/sosa/>
SELECT ?value
FROM <http://my-fancy-iot-device/temperature-sensor-abox>
FROM <http://my-ldp-server/the-reasoned-tbox>
WHERE {
  ?x a ?sensor ; rdf:value ?value .     # from the 1st source and changes often
  ?sensor rdfs:subClassOf sosa:Sensor . # from the 2nd source and changes seldom
}

您需要一个SPARQL引擎,该引擎以对所述图形名称进行HTTP请求的方式来解释FROM部分中的图形名称。 roqet。也可以引入推理,但是仅凭roqet是不够的。