jena读取和解析本体文件

使用jena开发本体应用程序时,首先需要对我们利用本体构建工具,如protege等,构建的本体文件,如owl、rdf等读取并解析得到本体模型。下面给出相应的代码,不对的地方请指正。

(基于jena 2.13.0,jena 3 需要java 1.8)

方式一:使用RDFDataMgr

    /**
     * 使用RDFDataMgr读取RDF文件
     *
     * @param fileName URI或 file:filename形式路径
     * @return
     */
    public static OntModel openRDFFile(String fileName)
    {
        OntModel model = ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM);
        RDFDataMgr.read(model, fileName);
        return model;
    }

方式二:使用FileManager

    /**
     * 打开并读取RDF文件
     *
     * @param fileName
     * @return
     */public static OntModel openRdfFile(String fileName)
    {
        OntModel model = ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM);
        InputStream in = FileManager.get().open(fileName);
        OntModel baseOntModel = null;
        if (in != null)
        {
            baseOntModel = (OntModel) model.read(in, "");
        }
        return baseOntModel;
    }

上面两种方式都没有处理本体导入(import)问题,也即不能同时读取你在构建本体时引入的其他本体文件。为了处理引用的本体,本人目前发现最好的方式是使用配置文件:location-mapping.ttl

@prefix rdf:        <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs:        <http://www.w3.org/2000/01/rdf-schema#> .
@prefix xsd:        <http://www.w3.org/2001/XMLSchema#> .
@prefix lm:         <http://jena.hpl.hp.com/2004/08/location-mapping#> .

# 地址映射
# Application location to alternative location mappings.
# + name 指本体本体文件的uri。可以是http开头的url,也可以是file:开头的文件地址。引入文件中的name一般是uri
# + altName 指文件实际的地址,可以是file:开头的本地文件,或网络地址
# + 顺序无关.
#
# The translation algorithm is:
#
# 1 - Exact mappings: these are tried before attempting a prefix match.
# 2 - By prefix: find the longest matching prefix
# 3 - Use the original if no alternative.

[] lm:mapping
   [
     lm:prefix "GTS" ;
     lm:altPrefix "http://www.geodataont.cn/support/geology/gts"
   ],
   [
     lm:name "http://www.geodataont.cn/support/geology/gts" ;
     lm:altName "file:*/GTS.owl" # 请将*替换为文件目录
   ]

注:prefix部分我暂时没明白啥意思,不一定是对的

相应的代码如下

    /**
     * 读取本体,使用location-mapper确定引用文件地址
     *
     * @param locMapperPath
     * @param baseOntPath 读取的本体文件路径
     * @return
     */
    public static OntModel loadOntModelWithLocMapper(String locMapperPath, String baseOntPath)
    {
        OntModel model = ModelFactory.createOntologyModel();

        LocationMapper locMapper = readLocationMapper(locMapperPath);

        model.getDocumentManager().setProcessImports(true);
        FileManager fileManager = model.getDocumentManager().getFileManager();
        fileManager.setLocationMapper(locMapper);
        baseOntPath = StringUtil.getUriFilePath(baseOntPath);// 添加file:,替换\
        fileManager.readModel(model, baseOntPath);
        model.loadImports();

        return model;
    }

其中getUriFilePath是将文件地址进行转换,方便读取

public static String getUriFilePath(String filepath)
    {
        if (filepath.startsWith("file:") || filepath.startsWith("http://"))
        {
            return filepath;
        }
        else
        {
            filepath = "file:" + filepath;
            filepath = filepath.replaceAll("\\\\", "/");
            return filepath;
        }
    }

目前基本功能就是这样,详细内容参考jena的文档。不对的地方一起讨论

时间: 2024-10-25 15:47:59

jena读取和解析本体文件的相关文章

[cocos2dx utils] cocos2dx读取,解析csv文件

在我们的游戏中,经常需要将策划的数值配置成csv文件,所以解析csv文件就是一个很common的logic, 例如如下csv文件: 下面是一个基于cocos2dx 2.2.4的实现类: #ifndef __Cell__GCCsvHelper__ #define __Cell__GCCsvHelper__ #include <iostream> #include "cocos2d.h" #include <vector> USING_NS_CC; class GC

js读取并解析excel文件,之后上传json到服务器

首先,只能在ie浏览器下使用才可以,因为要调用excel控件,别的浏览器不行: 其次,要对浏览器进行安全设置的更改: internet选项-安全-自定义安全级别-将文件上载到服务器时包含本地目录路径(启用) internet选项-安全-自定义安全级别-对未标记为可安全执行脚本的ActiveX控件初始化并执行脚本(启用) html页面: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http

cocos2d-x读取并解析json文件的方法[CSJson]

1.我们准备了一个json文件(test.json),在resource下面: { "data": { "lastArea": { "areaId": 200, "label": 1, "name": "我是区服", "state": 1 }, "topArea": { "areaId": 10, "label&quo

读取并解析properties文件

public class SysConfig { private static final Properties properties = new Properties(); static{ Resource rs1 = new ClassPathResource("sys-config.properties"); try { properties.load(rs1.getInputStream()); } catch (Exception e) { e.printStackTrace

Android音频开发(4):如何存储和解析wav文件

无论是文字.图像还是声音,都必须以一定的格式来组织和存储起来,这样播放器才知道以怎样的方式去解析这一段数据,例如,对于原始的图像数据,我们常见的格式有 YUV.Bitmap,而对于音频来说,最简单常见的格式就是 wav 格式了. wav 格式,与 bitmap 一样,都是微软开发的一种文件格式规范,它们都有一个相似之处,就是整个文件分为两部分,第一部分是"文件头",记录重要的参数信息,对于音频而言,就包括:采样率.通道数.位宽等等,对于图像而言,就包括:图像的宽高.色彩位数等等:第二部

Spring源码学习-容器BeanFactory(一) BeanDefinition的创建-解析资源文件

写在前面 从大四实习至今已一年有余,作为一个程序员,一直没有用心去记录自己工作中遇到的问题,甚是惭愧,打算从今日起开始养成写博客的习惯.作为一名java开发人员,Spring是永远绕不过的话题,它的设计精巧,代码优美,值得每一名开发人员学习阅读. 在我最开始学习javaEE时,第一次接触Spring是从一个S(Struts)S(Spring)H(Herbinate)的框架开始.由java原生开发到框架开发转换过程中,那时我的印象里Struts负责控制层,herbinate负责数据层,而Sprin

练习:读取解析CSV文件,将读取结果输出的控制台上,并封装到4个Teacher对象中.

/** *    读取解析CSV文件,将读取结果输出的控制台上,并封装到4个Teacher对象中. *    1, 土鳖, 13101015338, 北京海淀区 2, 咪咪, 13201015338, 北京朝阳区 3, 小仓, 13601015818, 北京宣武区 4, 饭岛爱, 13201025818, 北京朝阳区 /** * 读取解析CSV文件,将读取结果输出的控制台上,并封装到4个Teacher对象中. * 1, 土鳖, 13101015338, 北京海淀区 2, 咪咪, 13201015

使用DOM4J解析XMl文件与读取XML文件

XML文件 1 <?xml version="1.0" encoding="UTF-8"?> 2 <bookstore> 3 <book id="1"> 4 <name>冰与火之歌</name> 5 <author>乔治马丁</author> 6 <year>2014</year> 7 <price>89</price&g

C++ 中使用boost::property_tree读取解析ini文件

boost 官网 http://www.boost.org/ 下载页面 http://sourceforge.net/projects/boost/files/boost/1.53.0/ 我下载的是 boost_1_53_0.tar.gz 使用系统  ubuntu 12.10 一.解压 [plain] view plaincopy tar -zxvf  boost_1_53_0.tar.gz 得到一个文件夹 boost_1_53_0,  拷贝其子目录 boost 到以下路径 [plain] vi