摘要
提前感谢您帮助我编写一个 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
希望这对某人有所帮助。