问题标签 [swrlapi]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
138 浏览

java - 在 owl-api 中将 rdf:PlainLiteral 转换为 xsd:string

我对这整个话题相当陌生,我希望有人可以帮助我。

在使用 SQWRL 时,我目前在比较本体数据时遇到问题。SQWRL中的内置swrlb:stringEqualIgnoreCase- 函数不允许我rdf:PlainLiteral与普通字符串进行比较。抛出以下错误消息:

SQWRL 查询:

数据本身^^http://www.w3.org/2001/XMLSchema#string在 GraphDB 中被标记,但我只是将它作为纯文字接收。

是否有任何简单的方法可以将其转换rdf:PlainLiteralxsd:string使用 owl-api 或任何其他工具?

编辑:堆栈跟踪

0 投票
1 回答
34 浏览

maven - 如何解决错误启动应用程序:使用 SWRL API 时创建查询引擎 Drools 时出错?

我收到此错误消息

启动应用程序时出错:创建查询引擎 Drools 时出错。例外:java.lang.NoSuchMethodError。消息:'void org.semanticweb.owlapi.util.PriorityCollection.add(java.io.Serializable)'

我正在使用 SWRL API for Java 在 OWL 本体上运行 SQWRL 查询。因此,我从 Maven 构建了 edu.stanford.swrl swrlapi-example,在 pom 文件中更新了默认 swrl API 和 swrlapi-drools-engine 从版本 1.0.3 到 2.0.9 以及 owl API 从默认 4.2.3 到 5.1。 17. 我在可执行文件 main 中运行这段代码:

OWLOntologyManager 本体管理器 = OWLManager.createOWLOntologyManager();

程序在最后一个命令处停止。我不知道我做错了什么。如果我使用 swrl api 和 swrlapi-drools-engine 的 1.0.3 版,它可以工作,但是我想使用 tbox 和 abox 库中包含的一些命令,这些命令在那个古老的版本中没有实现。

0 投票
0 回答
38 浏览

java - 尝试执行 abox SWRL API 命令时出错

我在 Eclipse 中使用 SWLR API,以便能够执行关于我创建的数据库本体的 sqwrl 查询。当尝试运行“abox”类型的命令时,特别是我尝试使用“abox:hasClass(IndividualName, ?c) -> sqwrl:select(?x)”时,我收到以下错误:

org.swrlapi.parser.SWRLParseException:在 org.swrlapi.parser.SWRLParser.generateEndOfRuleException(SWRLParser.java:488) 在 org.swrlapi.parser.SWRLParser.parseSWRLAtom(SWRLParser.java:219) 的 SWRL 原子谓词“abox:hasClass”无效) 在 org.swrlapi.parser.SWRLParser.parseSWRLRule(SWRLParser.java:115) 在 org.swrlapi.factory.DefaultSWRLAPIOWLOntology.createSQWRLQuery(DefaultSWRLAPIOWLOntology.java:265) 在 org.swrlapi.factory.DefaultSWRLAPIOWLOntology.createSQWRLQuery(DefaultSWRLAPIOWLOntology.java: 259) 在 org.swrlapi.factory.DefaultSWRLRuleAndQueryEngine.createSQWRLQuery(DefaultSWRLRuleAndQueryEngine.java:145) 在 org.swrlapi.factory.DefaultSWRLRuleAndQueryEngine.runSQWRLQuery(DefaultSWRLRuleAndQueryEngine.java:154) 在 predict_maint.OntologyDataBase.main(OntologyDataBase.java:358)

相反,'tbox' 的命令可以完美运行,并且两个相应的包都包含在项目的库中(分别为 org.swrlapi.builtins.abox 和 org.swrlapi.builtins.abox)。

谢谢您的帮助。

0 投票
0 回答
48 浏览

ontology - 尝试在大型本体中执行 SQWRL 查询的问题

我的情况如下:

我使用一些 CCO 本体创建了一个基础本体,并为应用程序域添加了特定的类和属性(我们将其命名为基础本体)。

我已经使用 Java 和 OWLAPI 从 csv 数据库填充了这个本体创建实例及其属性(我们将其命名为完整的本体)。

当使用 SWRL API 对本体执行 SQWRL 查询时,会导致 Java 内存不足错误。我试图解决它,使用 Xmx 参数增加进程可用的内存。这还不够,我已经达到了我这台普通电脑所能做的极限。

如果我尝试在基础本体中进行查询(在创建数据库的所有个体之前),它可以毫无问题地工作。

如果我尝试从 Protégé 运行查询,则会发现同样的问题,它适用于基础本体,如果使用完整的本体,它将阻止程序。

使用 Protégé 推理器处理本体时,在本体中没有发现错误。HermiT 和 Pellet 都在几秒钟内运行基本本体。但是,就完整的本体而言,Pellet 也非常快(运行几秒钟),HermiT 处理本体大约需要 15 分钟。

这很奇怪,因为基础本体和填充本体的大小并没有太大的不同(大约 9000 个公理与 14000 个公理),即使创建的个体数量约为 2500。

我用来测试它的查询是:abox:caa(ClassName, ?i) -> sqwrl:select(?i)

我确信 SWRL API 正在识别命令,因为如果我引入了不正确的 ClassName(本体中不存在的类),程序会因命令错误而停止。但是如果命令是正确的,那么内存不足的问题就这样出现了

线程“主”java.lang.OutOfMemoryError 中的异常:org.drools.core.phreak.PhreakJoinNode.insertChildLeftTuple(PhreakJoinNode.java) 处的 Java 堆空间:480) 在 org.drools.core.phreak.PhreakJoinNode.doNode(PhreakJoinNode.java:71) 在 org.drools.core.phreak 的 org.drools.core.phreak.PhreakJoinNode.doLeftInserts(PhreakJoinNode.java:110)。 RuleNetworkEvaluator.switchOnDoBetaNode(RuleNetworkEvaluator.java:552) at org.drools.core.phreak.RuleNetworkEvaluator.evalBetaNode(RuleNetworkEvaluator.java:538) at org.drools.core.phreak.RuleNetworkEvaluator.evalNode(RuleNetworkEvaluator.java:373) at org .drools.core.phreak.RuleNetworkEvaluator.innerEval(RuleNetworkEvaluator.java:333) 在 org.drools.core.phreak.RuleNetworkEvaluator.doRiaNode(RuleNetworkEvaluator.java:606) 在 org.drools.core。phreak.RuleNetworkEvaluator.evalBetaNode(RuleNetworkEvaluator.java:533) at org.drools.core.phreak.RuleNetworkEvaluator.evalNode(RuleNetworkEvaluator.java:373) at org.drools.core.phreak.RuleNetworkEvaluator.innerEval(RuleNetworkEvaluator.java:333)在 org.drools.core.phreak.RuleNetworkEvaluator.outerEval(RuleNetworkEvaluator.java:169) 在 org.drools.core.phreak.RuleNetworkEvaluator.evaluateNetwork(RuleNetworkEvaluator.java:127) 在 org.drools.core.phreak.RuleExecutor.reEvaluateNetwork (RuleExecutor.java:212) 位于 org.drools.core.concurrent.AbstractRuleEvaluator.internalEvaluateAndFire(AbstractRuleEvaluator.java:34) 的 org.drools.core.phreak.RuleExecutor.evaluateNetworkAndFire(RuleExecutor.java:87)。 core.concurrent.SequentialRuleEvaluator.evaluateAndFire(SequentialRuleEvaluator.java:43) 在 org.drools.core.common.DefaultAgenda。fireLoop(DefaultAgenda.java:1072) at org.drools.core.common.DefaultAgenda.internalFireAllRules(DefaultAgenda.java:1019) at org.drools.core.common.DefaultAgenda.fireAllRules(DefaultAgenda.java:1011) at org.drools .core.impl.StatefulKnowledgeSessionImpl.internalFireAllRules(StatefulKnowledgeSessionImpl.java:1321) at org.drools.core.impl.StatefulKnowledgeSessionImpl.fireAllRules(StatefulKnowledgeSessionImpl.java:1312) at org.drools.core.impl.StatefulKnowledgeSessionImpl.fireAllRules(StatefulKnowledgeSessionImpl.java :1304) 在 org.swrlapi.drools.core.DroolsSWRLRuleEngine.runRuleEngine(DroolsSWRLRuleEngine.java:211) 在 org.swrlapi.factory.DefaultSWRLRuleAndQueryEngine.run(DefaultSWRLRuleAndQueryEngine.java:90) 在 org.swrlapi.factory.DefaultSWRLRuleAndQueryEngine.runSQWRLQuery( DefaultSWRLRuleAndQueryEngine.java:118) 在 org.swrlapi.factory。默认SWRLRuleAndQueryEngine.runSQWRLQuery(DefaultSWRLRuleAndQueryEngine.java:156) 在 predict_maint.OntologyDataBase.main(OntologyDataBase.java:362)

我不明白为什么人们让本体变得如此难以处理......我想知道是否有人可以给我一些想法,告诉我这里可能出了什么问题,我怎么能设法在没有完整本体的情况下执行几个 SQWRL 查询使用大量内存并花费很长时间......

谢谢你。