摘要
提前感谢您帮助我编写一个CONSTRUCT / WHERE语句,该语句可以在TopBraid Composer免费版中声明为SPIN规则并使用。
我试图在spin:rule
声明中嵌入SPARQL CONSTRUCT / WHERE语句,然后执行它。我将在下面的陈述1或2中返回零推论。我使用的是Java 7,Eclipse 4.3和TopBraid Composer免费版。我已成功在类表单(语句3)中将语句3作为SPIN构造函数声明运行。我已成功在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:我没有在Ontology Profile表单中检查任何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:节点: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:我成功使用了Jena Generic Rules推理以及OWL_MEM_RULE_INF OntModelSpec,读/写,基本模型,inf模型和ont模型。
上下文
我的问题的背景如下。我正在使用Java和Jena构建并迭代地执行本体和规则集,以证明OWL / RDF的概念代表,考虑和响应非平凡类型书面英语。我使用的句子是非平凡的(41个单词,3个条款等)。当没有针对任何OWL / RDF规则(传递性等)运行时,当前本体有1422个断言。我正在使用TopBraid Composer来补充Jena编程,以确保我符合约定和标准。
答案 0 :(得分:0)
这篇文章概述了我发布的问题的解决方案。我能够通过响应用户论坛的人来解决这个问题。 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属性的子属性:将spin:rulePropertyMaxIterationCount设置为1的规则(以避免通过运行内置函数生成无限循环 - 在我的情况下为spin:generateUUID()。)
然后我需要&#34;拉&#34;或者将新的子属性(我将其命名为&#34; runOnce&#34;)放入我试图为其创建依赖于内置的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
希望这有助于某人。