【问题标题】:SWRL and VirtuosoSWRL 和 Virtuoso
【发布时间】:2015-04-12 15:43:00
【问题描述】:

我正在寻找一种清晰的方法来在 virtuoso 服务器中清楚地使用 SWRL。例如,我使用 Protege 4.3 设计了一个本体,并使用 Protege 中的“规则”选项卡编写了 SWRL 规则。

Product(?P),hasName(?P,?N),inGroupB(?P,?B)->hasBug(?P)

我将我的 RDF 数据 (~3GB) 连同本体架构一起上传到了 Virtuoso 服务器。我试图回忆应该根据本体中的规则推断的数据,但查询返回空结果。 SPARQL 查询示例,它应该清楚地从上述规则返回推断关系,如下所示:

DEFINE input:inference <http://example.com/2/owl>  
PREFIX e:<http://example.com/e/>
SELECT * 
FROM <http://example.com/2/data> 
WHERE 
 { 
     ?P a e:Product ; 
      e:hasBug ?B
 }

我相信我在将这些东西集成在一起时遇到了问题(RDF 数据、OWL 模式和 SWRL 规则)。我使用 Jena 和 Virtuoso Jena 驱动程序来加载数据、本体和运行 SPARQL 查询。关于如何让推理部分正常工作的任何建议?

【问题讨论】:

  • 我在问题中没有看到任何与 Jena 相关的内容。
  • 我使用 Jena 将 RDF 数据和本体自动上传到 virtuoso 中。
  • Virtuoso 是否支持 SWRL?我认为它仅限于一些 OWL 推理

标签: jena semantic-web owl protege virtuoso


【解决方案1】:

Virtuoso 7.x 不支持 SWRL。

Virtuoso 8.x 实现了 SPIN,可以将 SWRL 翻译成 SPIN,以及其他复杂的推理。

请参阅Creating Custom Inference Rules using the SPIN Vocabulary and Virtuoso 8.0 进行演练。

您上面粗略的 SWRL 大致翻译为 --

CONSTRUCT { ?P <hasBug> ?B }
WHERE
  {
    ?P  a           <Product> ;
        <hasName>   ?N ;
        <inGroupB>  ?B .    
  }

-- 或--

CONSTRUCT { ?P a <BuggyProduct> }
WHERE 
  {
    ?P  a           <Product> ;
        <hasName>   ?N ;
        <inGroupB>  ?B .    
  }

拥有 SPARQL CONSTRUCT 后,制定自定义推理规则只需几个步骤:

  1. 使用 SPIN 术语描述(使用 Turtle 文档中的 RDF 语句集合)您的规则
  2. EXEC ('SPARQL ' || SPARQL_SPIN_GRAPH_TO_DEFSPIN('{turtle-doc-with-rule-description-iri'))
  3. 测试你的规则

更完整的用户文档正在制作中;您可以通过Virtuoso Users mailing listOpenLink Support Case System 获得帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-25
    • 2015-05-24
    • 1970-01-01
    • 1970-01-01
    • 2017-09-04
    • 2019-01-28
    • 2015-02-10
    • 2011-04-02
    相关资源
    最近更新 更多