我使用Protege 4.1 alpha创建了一个RDF / OWL文件。 我还在Protege中创建了一个名为CheapPhone的定义类。该课程有一个限制,如下所示:
(hasPrice some integer[< 350])
每当手机价格低于350时,推断为CheapPhone。 在Protege 4.1 alpha中推断它没有问题。但是,我无法使用耶拿来推断这一点。
我还创建了一个名为SmartPhone的已定义类。该类还有一个限制,如下所示:
(has3G value true) and (hasInternet value true)
每当手机有3G和互联网时,它都被推断为智能手机。 在这种情况下,在Protege和Jena中都没有问题。
我开始认为Jena的默认推理引擎存在问题。 我在Java中使用的代码如下:
Reasoner reasoner = ReasonerRegistry.getOWLReasoner();
reasoner = reasoner.bindSchema(ontModel);
OntModelSpec ontModelSpec = OntModelSpec.OWL_MEM_MINI_RULE_INF;
ontModelSpec.setReasoner(reasoner);
// Create ontology model with reasoner support
// ontModel was created and read before, so I don't share the code in order
// not to create garbage here
OntModel model = ModelFactory.createOntologyModel(ontModelSpec, ontModel);
OntClass sPhone = model.getOntClass(ns + "SmartPhone");
ExtendedIterator s = sPhone.listInstances();
while(s.hasNext()) {
OntResource mp = (OntResource)s.next();
System.out.println(mp.getURI());
}
此代码完美运行并返回实例,但是当我更改下面的代码并使其适用于CheapPhone时,它不会返回任何内容。
OntClass sPhone = model.getOntClass(ns + "CheapPhone");
我做错了吗?
答案 0 :(得分:1)
数据范围([< 350]
位)是OWL 2的一个功能.Jena不支持OWL 2.有关支持OWL 2的工具列表,请参阅W3C的OWL 2 Implementations页面 - 您将必须使用其中之一。 (杰纳的一些实验性正在进行的工作列在那里,但这肯定还没有进入耶拿版本。)