1

我使用 Protege 4.1 alpha 创建了一个 RDF/OWL 文件。我还在 Protege 中创建了一个已定义的类,称为 CheapPhone。这个类有一个限制,如下所示:

(hasPrice some integer[< 350])

每当一部手机的价格低于350,就被推断为CheapPhone。在 Protege 4.1 alpha 中推断这一点没有问题。但是,我无法使用 Jena 来推断这一点。

我还创建了一个名为 SmartPhone 的已定义类。这个类也有一个限制,如下所示:

(has3G value true) and (hasInternet value true)

每当一部手机有 3G 和互联网时,它就被推断为 SmartPhone。在这种情况下,在 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");

难道我做错了什么 ?

4

1 回答 1

1

数据范围([< 350]位)是 OWL 2 的一个特性。Jena 不支持 OWL 2。有关支持 OWL 2 的工具列表,请参阅 W3C 的OWL 2 实现页面——您必须使用其中一个。(那里列出了一些正在进行的 Jena 实验性工作,但这肯定还没有进入 Jena 版本。)

于 2010-06-13T21:55:20.000 回答