【问题标题】:why does the addDomain method affect the Domain's SuperClass为什么addDomain方法会影响Domain的SuperClass
【发布时间】:2014-09-09 05:36:07
【问题描述】:

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

    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。 在 i p.addDomain(class2) 之后,第二个输出是:http://www.w3.org/2000/01/rdf-schema#Resource。 为什么????有什么建议吗?

【问题讨论】:

    标签: java jena owl


    【解决方案1】:

    getSuperClass

    OntClass getSuperClass()
    

    回答一个是这个类的超类的类。 如果还有更多 除了一个这样的类,进行任意选择。 如果没有 这样的超类,返回null。

    我同意这种行为有点令人惊讶,但这并不是不正确。文档说: class1rdfs:Resource 都是您的 class2 的超类,因此两者都可以由 getSuperClass 合法返回,因为它都保证为“超级-班级”。由于 Jena 可能在内部做的是要求 all class2 rdfs:subClassOf X 形式的三元组并取 X 的第一个值,获得不同结果所需要的只是发生改变可能返回的 X 值或返回顺序的事情。一般来说,这些东西没有指定,所以这里没有什么不正确的。

    如果你想检查某个东西是否是另一个的超类,你可以遍历listSuperClasses产生的所有值,或者简单地检查hasSuperClass。这两种方法都有一个接受布尔参数的变体,因此请务必查看文档。

    【讨论】:

    • 谢谢,昨天我向 jena 用户邮件列表发送了一封帮助电子邮件,其中一个人给出了与您相同的建议。在我将 getSupClass 更改为 listSupClasses 并手动筛选出 rdfs:resource 后,我的代码终于可以工作了。非常感谢。
    • 你会发现很多相同的人在这里关注jena标签并阅读耶拿列表。
    猜你喜欢
    • 2013-05-19
    • 1970-01-01
    • 1970-01-01
    • 2016-12-09
    • 2020-11-26
    • 2021-08-25
    • 1970-01-01
    • 1970-01-01
    • 2011-03-06
    相关资源
    最近更新 更多