首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OWLAPI本体中的SWRL规则创建

OWLAPI本体中的SWRL规则创建
EN

Stack Overflow用户
提问于 2017-11-22 17:22:06
回答 1查看 808关注 0票数 0

为了实验SWRL语言,我运行了以下简单的java代码(在Neatbeans 8.2中):

代码语言:javascript
复制
String base = "http://www.prova/testont.owl";
IRI ontologyIRI = IRI.create(base);
OWLOntologyManager manager = OWLManager.createOWLOntologyManager();
OWLOntology ontology = manager.createOntology(ontologyIRI);
OWLDataFactory factory = manager.getOWLDataFactory();

OWLClass adult = factory.getOWLClass(IRI.create(ontologyIRI + "#Adult"));
OWLClass person = factory.getOWLClass(IRI.create(ontologyIRI + "#Person"));
OWLDataProperty hasAge = factory.getOWLDataProperty(IRI.create(ontologyIRI + "#hasAge"));

OWLNamedIndividual john = factory.getOWLNamedIndividual(IRI.create(ontologyIRI + "#John"));
OWLNamedIndividual andrea = factory.getOWLNamedIndividual(IRI.create(ontologyIRI + "#Andrea"));

OWLClassAssertionAxiom classAssertion = factory.getOWLClassAssertionAxiom(person, john);
manager.addAxiom(ontology, classAssertion);
classAssertion = factory.getOWLClassAssertionAxiom(person, andrea);
manager.addAxiom(ontology, classAssertion);

OWLDatatype integerDatatype = factory.getOWLDatatype(OWL2Datatype.XSD_INTEGER.getIRI());
OWLLiteral literal = factory.getOWLLiteral("41", integerDatatype);
OWLAxiom ax = factory.getOWLDataPropertyAssertionAxiom(hasAge, andrea, literal);
manager.addAxiom(ontology, ax);

literal = factory.getOWLLiteral("15", integerDatatype);
ax = factory.getOWLDataPropertyAssertionAxiom(hasAge, john, literal);
manager.addAxiom(ontology, ax);

SWRLRuleEngine ruleEngine = SWRLAPIFactory.createSWRLRuleEngine(ontology);
ruleEngine.createSWRLRule("r1", "Person(?p)^hasAge(?p,?age)^swrlb:greaterThan(?age,17) -> Adult(?p)");

manager.saveOntology(ontology, IRI.create(((new File("FILE_PATH")).toURI())));

我在下面的依赖项中使用maven:

代码语言:javascript
复制
 <dependency>
     <groupId>edu.stanford.swrl</groupId>
     <artifactId>swrlapi-drools-engine</artifactId>
     <version>1.1.4</version>
  </dependency>

我得到了以下错误:

线程"main“中的异常:无效的SWRL谓词'Person‘at org.swrlapi.parser.SWRLParser.generateEndOfRuleException(SWRLParser.java:479) at org.swrlapi.parser.SWRLParser.parseSWRLAtom(SWRLParser.java:210) at org.swrlapi.parser.SWRLParser.parseSWRLRule(SWRLParser.java:106) at org.swrlapi.factory.DefaultSWRLAPIOWLOntology.createSWRLRule(DefaultSWRLAPIOWLOntology.java:219) at org.swrlapi.factory.DefaultSWRLAPIOWLOntology.createSWRLRule(DefaultSWRLAPIOWLOntology.java:213) at org.swrlapi.factory.DefaultSWRLRuleAndQueryEngine.createSWRLRule(DefaultSWRLRuleAndQueryEngine.java:249) at ilc.cnr.it.swrl4morphology.SimpleToSWRL.main(SimpleToSWRL.java:450)

但是,如果我将本体保存在文件中,然后重新加载它,我就不会再得到错误了。似乎默认前缀是在第一次保存期间添加的。我觉得很奇怪..。

拜托,你能帮我理解一下我的错吗?

事先谢谢你,安德里亚

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-23 06:34:41

在保存和解析时,使用本体IRI作为基础,将相对IRIs (如“Person”)转换为绝对IRIs。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47440589

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档