利用jena读取owl文件的父子属性以及其他属性
来源:互联网 发布:linux 清空屏幕 编辑:程序博客网 时间:2024/05/23 00:00
最近,学习的过程中需要处理owl文件,我的需求比较简单,不需要用到推理,但是要读取到owl文件中的所有的属性以及属性值。经过在网上大量的搜索和阅读后,发现大部分都是讲如何创建RDF文件后者是owl文件的,或者是获取指定属性名的属性值,并不能够获取owl文件中所有的属性以及属性值。后来通过查看jena的API找到了方法,记录下来一块分享一下。
为了更好的使用Jena API,我们应该对OWL有个大致的了解。OWL核心是围绕三元组的,即我们在很多资料中看到的陈述(Statement),它的组成为:Statement=(Subject,Property,Object),其中Subject我们熟成为主体,Property成为属性,Object成为客体。在编程中容易让人搞混的他们和Individual的区别。Individual熟称为个体。它是Subject、Object的一个实例,例如在Statement=(Animals,Eat,Plants)陈述中sheep是Animals的一个Individual,grass是Plants的一个Individual。从这个角度上来说我们理解为什么主体、客体被说成是类(Class)。而这一切的主体、客体、个体、类、属性等我们都可以称为资源(Resource)。在编程中OWL常用的是OntModel,Ontclass,OntProperty,Individual。OntClass可以用来创建主体,客体,OntPropety用来创建属性,Individual用来创建个体。 常用的方法有CreatClass,CreatIndividual,listObjects,listObjectsofProperty,listSubjectswithProperty,listPropertyvalues等。
本体文件部分图示:
我的需求很明确,就是将一个owl文件中的所有的属性名称(包括父节点、子节点)以及相对应的属性值读取出来。接下来直接上代码:
//创建一个本体语言指定语言类型.OntModel ontModel = ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM);try {ontModel.read(new FileInputStream("c:/util/owl/symp.owl"), ""); } catch (FileNotFoundException e1) {e1.printStackTrace(); }// 迭代显示模型中的类,在迭代过程中完成各种操作for (Iterator<?> i = ontModel.listClasses(); i.hasNext();) {<span style="white-space:pre"></span>parentList.clear();OntClass c = (OntClass) i.next(); // 返回类型强制转换if (!c.isAnon()) {//如果不是匿名类,则打印类的名字// 迭代显示当前类的直接父类for (Iterator<?> it = c.listSuperClasses(); it.hasNext();){OntClass sp = (OntClass) it.next(); //得到的id号为obo:SYMP_0000743 因此要去掉obo:因此从3开始截取 parentList.add(sp.getModel().getGraph().getPrefixMapping().shortForm(sp.getURI()).substring(4)); } // 迭代显示当前类的直接子类for (Iterator<?> it = c.listSubClasses(); it.hasNext();) {OntClass sb = (OntClass) it.next(); childIdBuf.append(sb.getModel().getGraph().getPrefixMapping().shortForm(sb.getURI()).substring(4)+"~");}StmtIterator iterator = c.listProperties();while(iterator.hasNext()){<span style="white-space:pre"></span>Statement statement = iterator.next(); <span style="white-space:pre"></span>predict = statement.getPredicate().toString().substring(statement.getPredicate().toString().indexOf("#")+1); //得到的数据类似encephalitis^^http://www.w3.org/2001/XMLSchema#string 因此要截取^^之前的部分 //如果不是字符串类型的数据则没有^^这个符号因此符合这个规范的才进行操作 object = statement.getObject().toString();}
}
}
这样就完成了整个的遍历过程。再找到此方法之前,自己尝试过直接使用jena自带的PersistentOntology这个类中的方法直接存入数据库,但是发现他会自动生成好多张表。而且里面有一些数据是不可解释的(可能是我没理解吧),而且属性名前面会加上前缀,不利于进一步进行操作。
希望对和我有同样困惑的朋友有所帮助!
- 利用jena读取owl文件的父子属性以及其他属性
- 三、jena解析关于基因的go.owl文件(读取信息)
- 二、jena解析关于基因的go.owl文件(创建、新增类、以及一些节点)
- jena构建本体,读取owl文件,输出owl文件相关知识
- 如何利用Jena输出数据属性的数据值
- 利用jena API查询OWL本体
- owl jena
- 文件其他属性的修改
- jena 简单查询(不带推理,直接读取owl文件)
- 利用java.util.Properties读取属性文件
- 属性文件的读取方式.
- Java 属性文件的读取
- 属性文件的读取 Java
- 读取jdbc的属性文件
- 读取属性文件的方式
- jena解析关于基因的go.owl文件(正在学习中)
- 一、jena解析关于基因的go.owl文件(正在学习中)
- 二、jena解析关于基因的go.owl文件(创建、新增复杂类)
- div的高度自适用图片的高度
- servlet线程安全
- 【sftp】
- 对于初学iOS开发者有用之在UITableView的导航栏中加入Item的方法
- IOS使用ijkPlayer
- 利用jena读取owl文件的父子属性以及其他属性
- HDU 4006 The kth great number(线段树【亚洲区网络赛题目】)
- SSH端口转发-本地转发
- Mongodb 字段类型转换
- 【tar】只归档不压缩
- 20160412-工作
- 【who】显示当前系统上登录的用户
- 三角形
- 解决a different object with the same identifier value was already associated with the session错误