Pom需要添加的依赖:

<dependency><groupId>org.apache.jena</groupId><artifactId>jena-core</artifactId><version>3.9.0</version></dependency>

对于.owl文件,需要分析他的结构

 <owl:Class rdf:about="http://www.owl-ontologies.com/Ontology1540950082.owl#吊瓜"><owl:equivalentClass rdf:resource="http://www.owl-ontologies.com/Ontology1540950082.owl#黄瓜"/><rdfs:subClassOf rdf:resource="http://www.owl-ontologies.com/Ontology1540950082.owl#果菜类作物"/><rdfs:subClassOf rdf:resource="http://www.owl-ontologies.com/Ontology1540950082.owl#蔬菜类作物"/></owl:Class>

其中,Class代表吊瓜这种类,equivalentClass代表吊瓜的同名类,subClass0f代表吊瓜和黄瓜的上一级分类

首先创建一个本体模型

package com.example.demo.owlread;import org.apache.jena.ontology.*;
import org.apache.jena.rdf.model.ModelFactory;import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;public class OWLSearch2 {private static OntModel createOnt(String owlpath) throws FileNotFoundException {//创建一个本体模型,参数OntModleSpec.OWL_MEM指在内存中创建一个本体模型。OntModel ontModel = ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM);//读入owl文件ontModel.read(new FileInputStream(owlpath), "");return ontModel;}

这个函数的功能是根据所属的类,找到它包含哪些类型

/** * 这个函数的功能是根据所属的类,去找它包含哪些类型* */public static void getAllClasses(String owlpath, String nongyaoname) throws FileNotFoundException {OntModel ontModel = createOnt(owlpath);String str;// 列出所有的classSet<String> set = new HashSet<String>();List<String> list = new ArrayList<String>();for (Iterator allclass = ontModel.listClasses(); allclass.hasNext();) {OntClass ontclass = (OntClass) allclass.next();if (!ontclass.isAnon()) {// 测试onclass是否匿名String classstr = ontclass.toString();str = classstr.substring(classstr.indexOf("#") + 1);if (str.equals(nongyaoname)) {System.out.println("所属的类:   " + str);if (!ontclass.listSubClasses().hasNext()) {System.out.println("类描述类型:无");} else {for (Iterator subclasses = ontclass.listSubClasses(); subclasses.hasNext();) {//找到ontclass下的所有class(即,把ontclass这种类型当成subClassOf的种类)OntClass subclass = (OntClass) subclasses.next();String subclasstr = subclass.toString();str = subclasstr.substring(subclasstr.indexOf("#") + 1);set.add(str);list.add(str);System.out.print("类描述类型:superClassOf   ");// System.out.println("类描述值:" + str);System.out.println(str);}}}}}System.out.println(list.get(1));}

这个方法的意思其实就是,先通过OntModel类的ontModel对象来通过遍历找到文件中所有的类,其实就是Class.

然后通过OntClass ontclass,将它变成OntClass类型,再通过ontclass对象列出所有这个类的下属类型。即ontclass.listSubClasses()

这个方法还有一个思想就是,通过遍历找出所有的类,然后如果遍历到你想要找的类,则,将这个类下面的所有的下属类都输出

这函数可以根据类型的描述,找到所属的类

/** 这个函数可以根据类型的描述,找到所属的类* * * * */public static void getAllClasses2(String owlpath, String nongyaoname) throws FileNotFoundException {OntModel ontModel = createOnt(owlpath);String str;String strClass;String strPro;// 列出所有的classList<String> list2 = new ArrayList<String>();for (Iterator allclass = ontModel.listClasses(); allclass.hasNext();) {OntClass ontclass = (OntClass) allclass.next();//OntClass这个接口中定义了本体种与概念(也就是类Class)相关的操作if (!ontclass.isAnon()) {// 测试onclass是否匿名String classstr = ontclass.toString();//通过遍历找到所有的ClassstrClass = classstr.substring(classstr.indexOf("#") + 1);//System.out.println( strClass);//列出这个Class下的所有subClassOffor (Iterator subclasses = ontclass.listSubClasses(); subclasses.hasNext();) {OntClass subclass = (OntClass) subclasses.next();String subclasstr = subclass.toString();strPro = subclasstr.substring(subclasstr.indexOf("#") + 1);//如果有shbClassOf等于想要查找的nongyaoname则把上一级的Class添加到listif (strPro.equals(nongyaoname)) {list2.add(strClass);//这个是把strPro所属的类加进去}}}}System.out.println(list2);}

这个函数可以根据类型的描述,找到它的同类

 public static List getAllequivalentClasses3_1(String owlpath,String nongyaoname) throws FileNotFoundException {OntModel ontModel = createOnt(owlpath);String str;String strClass;String strPro;String strEqu;// 列出所有的classList<String> list2=new ArrayList<String>();for (Iterator allclass = ontModel.listClasses(); allclass.hasNext(); ) {OntClass ontclass = (OntClass) allclass.next();if (!ontclass.isAnon()) {//测试onclass是否匿名 String classstr = ontclass.toString();strClass = classstr.substring(classstr.indexOf("#") + 1);for (Iterator subclasses = ontclass.listSubClasses(); subclasses.hasNext(); ) {OntClass subclass = (OntClass) subclasses.next();String subclasstr = subclass.toString();strPro = subclasstr.substring(subclasstr.indexOf("#") + 1);if(strPro.equals(nongyaoname)) {for (Iterator equclasses = subclass.listEquivalentClasses(); equclasses.hasNext(); ) {OntClass equclass = (OntClass) equclasses.next();String equclasstr = equclass.toString();strEqu = equclasstr.substring(subclasstr.indexOf("#") + 1);list2.add(strEqu);}}} }}System.out.println(list2);return list2;}

subclass.listEquivalentClasses();重点就是它

本体(Ontology)应用案例相关推荐

  1. 本体(Ontology)

    我是在撰写毕业论文中接触到知识表示方面的内容,有时需要理论与实践相结合,关于这方面的理论知识学习,除了网页资料.书籍.另外推荐一个网站:熊猫学术(https://sc.panda321.com/),可 ...

  2. ontology本体

    本体ontology的形式化定义: owl:equivalentClass rdfs:subClassof <owl:Class rdf:about""> . < ...

  3. 计算机组装与维修案例分析,设备故障维修案例分析三则

    设备故障维修案例分析三则 本文列举较具有代表性的故障维修的三个案例,以此阐述在医疗设备维修中对各方面知识综合运用的能力以及对设备故障诊断分析过 (本文共2页) 阅读全文>> 针对通信设备故 ...

  4. 图构建:领域本体设计原则与动态本体

    图构建:领域本体设计原则与动态本体 前文<思考总结:领域知识图谱平台构建与业务应用>中提到:"本体设计是图应用中的重中之重,一切的图展示.图计算.图分析.图挖掘.图模式匹配-的基 ...

  5. Ontology × DoraHacks 10万美金黑客松现已启航,在WEB3的世界里添“码”行空

    今年3月初,本体平台完成以太坊虚拟机(EVM)集成,成为支持虚拟机数量最多的公链平台.同期,1000万美元的 EVM 基金面向全球开发者重磅推出,鼓励全球开发者锐意进取,突破创新,在本体 EVM 上部 ...

  6. 网络教学c语言,本体C语言网络教学模式

    一.本体相关概念 (一)本体 本体(ontology)是共享概念模型的明确的形式化规范说明[1].它通过抽象某一应用领域的概念和术语,形成该应用领域中共享和公共的领域概念,建立一种知识的描述.本体目前 ...

  7. 白宁超计算机科学院,基于主动学习的传统中医症状本体构建方法研究综述.PDF...

    基于主动学习的传统中医症状本体构建方法研究综述.PDF 计算机技术应用 • the Application of Computer Technology 基于主动学习的传统中医症状本体构建方法研究综述 ...

  8. 知识图谱初步学习(零)——本体是什么

    知识图谱初步学习(零)--本体是什么 文章目录 知识图谱初步学习(零)--本体是什么 前言 一. 哲学层面理解 二. 引申到语义层面理解 三.学术层面 四.其他层面 - 术语 - 语义网 五.本体与类 ...

  9. 语义网、本体、OWL基础知识梳理

    一.语义网(Semantic Web) 语义网(Semantic Web)是对未来网络的一个设想,现在与Web 3.0这一概念结合在一起,作为3.0网络时代的特征之一.简单地说,语义网是一种智能网络, ...

  10. 浅谈语意网Semantic Web词网与知识本体

    http://www.bipaq.com/news/newsDetail.asp?id=942 语意网,词网与知识本体: 浅谈未来网路上的知识运筹 中央研究院语言学研究所研究员 黄居仁 [摘要]:本文 ...

最新文章

  1. JavaScript服务器端开发基础之Math对象小结
  2. 1.2.1 计算机系统的组成(硬件+软件)
  3. Java 成员变量和局部变量
  4. SAP Leonardo图片处理相关的机器学习服务在SAP智能服务场景中的应用
  5. 配置SMB共享 、 配置NFS共享
  6. php渲染视图,Laravel 视图渲染:Blade 模板引擎
  7. netcore quartz job用不了services_.NetCore开源集成框架
  8. spring-security过程分析
  9. 我被男朋友整整欺骗了两年可结果却让我感动!
  10. git clone 失败_鲜为人知的Git功能——Git Worktree工作树
  11. 王浩算法 c语言,基本遗传算法C语言实现.doc
  12. 贴片钽电容封装、尺寸
  13. 自动驾驶领域中常见英文缩写、相关含义以及常用专业英文
  14. 【读书笔记】--少有人走的路①:心智成熟的旅程
  15. python 将单词分割成字母_Python基于分隔符单词拆分列表
  16. MFC 下拉列表框的设置
  17. POI读取word里面的表格并处理数据
  18. Flash鼠绘入门第四课:绘制漂亮的梅花
  19. 股市第一赌局:百万赌金 侯宁催账叶荣添准备买单
  20. Java实现excel大数据量导出

热门文章

  1. java判断运行程序是否运行环境_Java获取运行环境信息
  2. Java 求解分发饼干
  3. 微信小程序---上传图片(视频)功能(单个/多个)
  4. 星志远电商:拼多多精确匹配溢价多少合适?
  5. 从零单刷数据结构(Java描述)——哈希表
  6. 阿里程序员:加班晚归被女友锁在门外,网友:程序员要什么女朋友
  7. 关于setCapture和releaseCapture的理解和整理
  8. [iBoard 电子学堂][第八卷 设计任意波发生器] 第四篇 低速 DAC 扩展技术
  9. C语言float变量精度,float部类的精度究竟是多少
  10. sugarcrm php版本,php-如何为SugarCRM 6.1.0创建新主题