如何在SPARQL SPIN规则声明中使用CONSTRUCT/WHERE



摘要

提前感谢您帮助我编写一个 CONSTRUCT/WHERE 语句,该语句可以在 TopBraid Composer 免费版中声明为 SPIN 规则并使用。

我正在尝试在spin:rule声明中嵌入一个 SPARQL CONSTRUCT/WHERE 语句,然后执行它。我对下面的陈述1或2的推论为零。我使用的是Java 7,Eclipse 4.3.和TopBraid Composer Free Edition。我已经成功地将语句 3 作为类窗体中的 SPIN 构造函数声明运行(语句 3(。我已经成功地在SPARQL查询编辑器(解释器(中运行了语句4,我已经交叉发布到用户论坛。

事实 1:我无法将语句 1 作为 SPIN 规则运行。

----报表1---

CONSTRUCT {
?this owl:hasKey ?x .
}
WHERE {
BIND (spif:generateUUID() AS ?x) .
}

事实 2:我无法将语句 2 作为 SPIN 规则运行。

----报表2----

CONSTRUCT {
?this owl:hasKey ?x .
}
WHERE {
?this rdfs:subClassOf node:entity .
BIND (spif:generateUUID() AS ?x) .
}
--No Error Message--

事实 3:但是,我在类窗体的构造函数字段中成功地使用了语句 3。

----报表3----

CONSTRUCT {
?this owl:hasKey ?x .
}
WHERE {
BIND (spif:generateUUID() AS ?x) .
}
Success: When a new instance is created a new triple indicating a key is created.

事实 4:我在 SPARQL 查询编辑器中成功使用了类似的语句 4。

----报表4----

CONSTRUCT {
?s owl:hasKey ?x .
}
WHERE {
?s rdf:type node:word_use
BIND (spif:generateUUID() AS ?x) .
}
Success: When statement is run all current instances get keys.

事实5:我没有在本体配置文件表单中检查任何SPARQL规则库。

事实 6:我导入了以下两个库。

<http://spinrdf.org/spin> from local file TopBraid/SPIN/spin.ttl.
<http://spinrdf.org/sp> from local file TopBraid/SPIN/sp.ttl

事实 7:文件中的命名空间是:

Base URI (Location) - http://example.org/
Default Namespace - http://example.org/
But the Base URI keeps getting reset to:
http://www.semanticweb.org/owl/owlapi/turtle
ace_lexicon - http://attempto.ifi.uzh.ch/ace_lexicon#
arc - http://example.org/arc#
arg - http://spinrdf.org/arg#
concept - http://example.org/concept#
node - http://www.example.org/node#
owl - http://www.w3.org/2002/07/owl#
rdf - http://www.w3.org/1999/02/22-rdf-syntax-ns#
rdfs - http://www.w3.org/2001/01/rdf-schema#
skos - http://www.w3.org/2004/02/skos/core#
sp - http://spinrdf.org/sp#
spif - http://spinrdf.org/spif#
spin - http://spinrdf.org/spin#
spl - http://spinrdf.org/spl#
word_sense - http://example.org/word_sense#
word_term - http://example.org/word_term#
word_use - http://example.org/word_use#

事实 8:我使用的类具有以下断言。

Name - node:unclassified_concept
SubClassOf - node:entity

事实 9:下面介绍了 node:unclassified_concept 类的实例。

URI - http://example.org/concept#regardless_of1
rdfs:comment - without attention to
rdfs:isDefinedBy - <http://en.wiktionary.org/wiki/regardless_of>
rdfs:label - regardless of

事实10:我已经成功地使用了耶拿通用规则推理以及OntModelSpec OWL_MEM_RULE_INF,读取/写入,基本模型,inf模型和ont模型。

上下文

我的问题的背景如下。我正在使用Java和Jena构建并迭代执行本体和规则集,以证明OWL/RDF表示,考虑和响应非平凡的打字英语的概念。我使用的句子是不平凡的(41个单词,三个从句等(。当前的本体在不违反任何OWL/RDF规则(传递性等(运行时有1422个断言。如果可能的话,我会使用TopBraid Composer来补充Jena编程,以确保我符合惯例和标准。

这篇文章

概述了我发布的问题的解决方案。我能够通过响应其用户论坛的人获得此解决方案。https://groups.google.com/forum/#!forum/topbraid-users

我想运行的 CONSTRUCT/WHERE 语句(修订后(是:

CONSTRUCT {
?this owl:hasKey ?x .
}
WHERE {
?this rdf:type node:unclassified_concept .
BIND (spif:generateUUID() AS ?x) .
}

但是,如果我将此语句放在 TBC 中类窗体的 spin:rule 字段中并按下图标进行推理,我将不会收到任何推理,推理者将花费大量时间进行搅动。

解决方案是创建一个 spin:rule 的子属性,该子属性将 spin:rulePropertyMaxIterationCount 设置为 1(以避免通过运行内置函数生成无限循环 - 在我的例子中是 spin:generateUUID(((。

然后我需要"拉取"或将新的子属性(我命名为"runOnce"(放入我试图为其创建一个依赖内置的 CONSTRUCT/WHERE 规则的类形式中。

最后,在类窗体中,我需要选择在新子属性 RunOnce 上添加空白行,然后在那里输入我原来的 CONSTRUCT/WHERE 语句。

然后我运行推理,全班使用了规则。

简而言之,如果要在TBC中的类中嵌入规则,并且该规则使用内置函数,则需要

-Create a subproperty of spin:rule that has rulePropertyMaxIterationCount 
   set to 1.
-Include this subproperty in the classes form.
-Embed your CONSTRUCT/WHERE statement that uses the built-in within that 
   subproperty on the classes form by selecting insert blank line and 
   copying/pasting it       in there.

请注意,TBC 支持的 SPIN 内置函数比我认为的 SPIN API 文档中的要小。TBC 支持的内置列表位于 TBC 产品中。

Help>
  Help Contents>
    TopBraid Composer>
      Application Development Tools>
        SPARQL Motion Scripts>
          SPARQL Motion Functions Reference

希望这对某人有所帮助。

相关内容

  • 没有找到相关文章

最新更新