为什么addDomain方法会影响Domain的SuperClass

时间:2014-09-09 05:36:07

标签: java jena owl

最简单的示例代码如下所示。

    OntModel individuals = ModelFactory.createOntologyModel();
        TreeMap<String, String> namespaces=new TreeMap<String,String>();
        namespaces.put("pubo", "http://www.example.org.cn/standards/publishing/ontology/cores/");
        individuals.setNsPrefixes(namespaces);
        OntClass class1=individuals.createClass(namespaces.get("pubo")+"class1");
        class1.setLabel("class1", "en");
        OntClass class2=individuals.createClass(namespaces.get("pubo")+"class2");
        class2.setLabel("class2", "en");
class2.setSuperClass(class1);
        System.out.println(class2.getSuperClass().getURI());
        DatatypeProperty p = individuals.createDatatypeProperty(namespaces
                .get("pubo") + "haha");
        p.addDomain(class2);
        System.out.println(class2.getSuperClass().getURI());

第一个输出是:http://www.example.org.cn/standards/publishing/ontology/cores/class1。 在我p.addDomain(class2)之后,第二个输出是:http://www.w3.org/2000/01/rdf-schema#Resource。 为什么????有什么建议吗?

1 个答案:

答案 0 :(得分:1)

  

getSuperClass

OntClass getSuperClass()
     

回答这个班级的超级班级。 如果还有更多   比这样一个类,任意选择。如果没有   这样的超类,返回null。

我同意这种行为有点令人惊讶,但它不正确。文件说: class1 rdfs:Resource 都是 class2 的超类,因此getSuperClass可以合法地返回它们,因为它们都得到了保证超级&#34;超级&#34;。因为Jena可能在内部做的是要求所有形式为 class2 rdfs:subClassOf X 的三元组并取第一个值 X ,获得不同结果所需要的只是发生一些事情,它会改变可以返回的 X 的值或者它们返回的顺序。一般来说,这些东西没有指定,所以这里没有任何不正确的内容。

如果要检查某些内容是否是其他内容的超类,您可以遍历listSuperClasses生成的所有值,或者只使用hasSuperClass进行检查。这两个方法都有一个接受布尔参数的变体,所以一定要查看文档。