最简单的示例代码如下所示。
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。 为什么????有什么建议吗?
答案 0 :(得分:1)
getSuperClass
OntClass getSuperClass()
回答这个班级的超级班级。 如果还有更多 比这样一个类,任意选择。如果没有 这样的超类,返回null。
我同意这种行为有点令人惊讶,但它不正确。文件说: class1 和 rdfs:Resource 都是 class2 的超类,因此getSuperClass可以合法地返回它们,因为它们都得到了保证超级&#34;超级&#34;。因为Jena可能在内部做的是要求所有形式为 class2 rdfs:subClassOf X 的三元组并取第一个值 X ,获得不同结果所需要的只是发生一些事情,它会改变可以返回的 X 的值或者它们返回的顺序。一般来说,这些东西没有指定,所以这里没有任何不正确的内容。
如果要检查某些内容是否是其他内容的超类,您可以遍历listSuperClasses生成的所有值,或者只使用hasSuperClass进行检查。这两个方法都有一个接受布尔参数的变体,所以一定要查看文档。