当前位置: 首页 > 知识库问答 >
问题:

试图理解Jena类层次结构

聂和宜
2023-03-14

我试图重现在Protege中显示给我的OWL本体(OWL.ttl)的类层次结构,您可以在标准URI位置http://www.w3.org/2002/07/OWL#下载。

我遇到的问题是,当我调用以获取层次结构根类时,返回的结果为零。因此我没有根类可以向下递归并构建层次结构。

=================================================================

当我将OWL本体(http://www.w3.org/2002/07/OWL#)加载到Protege中时,我得到了一个非常好的类层次结构。然而,当我加载到Jena中的推理模型或非推理模型时,我没有得到如下所示的层次结构类:

OntModel reasonedModel = com.hp.hpl.jena.rdf.model.ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM_MINI_RULE_INF);
OntModel unreasonedModel = com.hp.hpl.jena.rdf.model.ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM);

// <Code that loads in the ontology syntax into model skipped here>

// Now get the sets of root classes
reasonedModel.listHierarchyRootClasses();     // Returns empty set
unreasonedModel.listHierarchyRootClasses();   // Returns empty set

无论对推理模型还是未推理模型的调用都返回零结果。

======================================================================

现在我试试别的。我知道rdfs:resource始终是任何RDFS/OWL模型的顶级类。所以,当我这样做的时候:

OntClass topLevel = reasonedModel.getOntClass("http://www.w3.org/2000/01/rdf-schema#Resource");

// Get direct subclasses...
topLevel.listSubClasses(true);

从这里递归,我得到了一个完整的类层次结构,包括推断出的关系,因为我选择了一个推理模型。

============================================================

更新:为了解析本体论,也就是OWL2本体论,我必须关闭严格模式,因为Jena目前不兼容OWL2本体论(我使用的是2.7.4版)。

当我使用OWL_MEM或RDFS_MEM调用.listhierarchyrootclasses()时,返回的根类为零。如果我调用.listClasses()并查找所有没有超级类的类来查找根,那么在RDFS_MEM中,我得到以下层次结构:

Class [http://www.w3.org/2002/07/owl#Axiom]
Class [http://www.w3.org/2002/07/owl#NegativePropertyAssertion]
Class [http://www.w3.org/2002/07/owl#Ontology]
Class [http://www.w3.org/2002/07/owl#AllDisjointClasses]
Class [http://www.w3.org/2002/07/owl#Annotation]
Class [http://www.w3.org/2002/07/owl#AllDifferent]
Class [http://www.w3.org/2002/07/owl#AllDisjointProperties]
Class [http://www.w3.org/2002/07/owl#OntologyProperty]
Class [http://www.w3.org/2002/07/owl#AnnotationProperty]
Class [http://www.w3.org/2002/07/owl#DatatypeProperty]
Class [http://www.w3.org/2002/07/owl#ObjectProperty]
        Class [http://www.w3.org/2002/07/owl#InverseFunctionalProperty]
        Class [http://www.w3.org/2002/07/owl#IrreflexiveProperty]
        Class [http://www.w3.org/2002/07/owl#AsymmetricProperty]
        Class [http://www.w3.org/2002/07/owl#TransitiveProperty]
        Class [http://www.w3.org/2002/07/owl#SymmetricProperty]
        Class [http://www.w3.org/2002/07/owl#ReflexiveProperty]
Class [http://www.w3.org/2002/07/owl#DeprecatedProperty]
Class [http://www.w3.org/2002/07/owl#FunctionalProperty]
Class [http://www.w3.org/2002/07/owl#DeprecatedClass]
Class [http://www.w3.org/2002/07/owl#Class]
        Class [http://www.w3.org/2002/07/owl#Restriction]
Class [http://www.w3.org/2002/07/owl#DataRange]
Class [http://www.w3.org/2002/07/owl#NamedIndividual]
Class [http://www.w3.org/2002/07/owl#Nothing]
Class [http://www.w3.org/2002/07/owl#NamedIndividual]
Class [http://www.w3.org/2002/07/owl#Nothing]

共有1个答案

韩耘豪
2023-03-14

ListhierarchyRootClasss()在其javadoc中声明,它将使用的根是owl:thing。因此它不等同于您稍后使用的方法,也不等同于您使用的方法适用于此本体。

注意,您使用的本体是一个非常特殊的本体,因为它是对语言本身的部分进行建模的本体。在大多数本体中,使用owl:thing是正确的策略。

 类似资料:
  • 本文向大家介绍Java类加载器层次结构原理解析,包括了Java类加载器层次结构原理解析的使用技巧和注意事项,需要的朋友参考一下 类加载器的层次结构: 引导类加载器(bootstrap class loader)   用来加载java的核心库(JAVA_HOME/jre/lib/rt.jar,或sun.boot.class.path路径下的内容),是用原生代码来实现的(C实现的),并不继承自java

  • 操作步骤: 菜单栏: Navigate —>Type Hierarchy 快捷键: Mac: control + H Windows\/Linux: Ctrl + H

  • 问题内容: 我试图从我的MySQL数据库中按层次结构获取所有类别和子类别: 我的结果应该是这样(只是示例): 猫A 子猫1 Sub_Sub_Cat 1 Sub_Sub_Cat 2 子猫2 猫B C猫 … MySQL代码: 简而言之,如何在使用 PHP代码 的层次结构中获得它? 问题答案: 使用邻接表模型时,您可以一次性生成结构。 取自一遍父子数组结构(2007年9月; Nate Weiner撰写)

  • 查看某个方法在哪个类中定义,在哪些类中实现 操作步骤: 菜单栏: Navigate —> Method Hierarchy 快捷键: Mac: Shift + Command + H Windows\/Linux: Ctrl + Shift + H

  • SQLAlchemy支持三种继承形式: 单表继承 ,其中几种类型的类由一个表表示, 具体的表继承 ,其中每种类型的类都由独立的表表示,并且 联接表继承 ,其中类层次结构在依赖表中被分解,每个类都由其自己的表表示,该表只包含该类的本地属性。 最常见的继承形式是单表和联接表,而具体的继承则面临更多的配置挑战。 在继承关系中配置映射器时,SQLAlchemy可以加载元素 polymorphically

  • 问题内容: 此函数失败,并显示运行时错误: 有人遇到过吗? UPD: 在模拟器iOS 8.1 / 8.4上失败。9.3工作正常。 UPD2: 创建如下: 问题答案: 通过在项目中放置以下修复程序,我使视图调试器再次工作: 当您的项目加载时,该方法将执行,如果当前尚未实现,则会导致并使用该实现,因此,视图调试使iOS8拥有了所寻找的行为。 要将其添加到您自己的项目中,请在您的项目中创建一个新的空Ob