【Sesame】Triple Store 添加三元数据
来源:互联网 发布:淘宝图片自己拍 编辑:程序博客网 时间:2024/05/02 00:18
打算写一个sesame数据库的使用系列文章。这是第二篇,第一篇详见这里,讲解sesame数据库的搭建。
Sesame数据库添加triple三元组的方法有很多种,这里讲解两种,即单条添加与批量添加。
1. 建立数据库链接
Sesame数据库提供了几种数据存储办法,有本地数据库NativeStore,有基于内存的MemoryStore,有基于远程数据库的HTTP方式,还有基于关系型数据库存储方式的MySQLStore.
声明变量:
private Repository repo;private MemoryStore memStore;private NativeStore natStore;private File repoFile;private RepositoryConnection repoConn;
基于内存MemoryStore:
/** * To get the repository within memory. */public RepoUtil() {repoFile = new File(Const.repoPath);memStore = new MemoryStore();repo = new SailRepository(memStore);}
基于本地NativeStore:
/** * To get the repository on the disk. * @param repoPath the repository file path */public RepoUtil(String repoPath) {repoFile = new File(repoPath);natStore = new NativeStore(repoFile);repo = new SailRepository(natStore);}
基于网络HTTP Connection:
/** * To get the repository on the Http server. * @param server the server address * @param repoId the repository ID */public RepoUtil(String server, String repoId) {repo = new HTTPRepository(server, repoId);}
基于关系型数据库MySQL:
参考我的另一篇文章.
1.1. 初始化数据库
try {repo.initialize();repoConn = repo.getConnection();//Get the connection from repository connection pool//repoConn.setAutoCommit(false);//why deprecate the setAutoCommit method?} catch(RepositoryException e) {e.printStackTrace();}
2. 添加单条数据
2.1. 生成URI
此处提供函数用于生成URI,不需要如此麻烦,领会URI生成方法要领即可。
先需要初始化URI、Literal生成器ValueFactory:
ValueFactory valueFactory = new ValueFactoryImpl();
接下来即可生成URI:
/** * To get the URI of the specific string value * 1. if it is already a URI, then return; * 2. else translate it to URI format and return. * @param iden * @return the true URI */public URI getUri(String iden) {URI rtn = null;String url = null;StringBuilder strRtn = new StringBuilder(uriBuilder);if(isUri(iden)) {System.out.println("isUri");return valueFactory.createURI(iden);} else {try {url = URLEncoder.encode(iden,"utf-8");} catch (UnsupportedEncodingException e) {e.printStackTrace();}strRtn.append(url);rtn = valueFactory.createURI(strRtn.toString());return rtn;}}
此处附上判断URI的函数(摘自网络)
/** * To justify if the input string is * in the format of URI. * @param obj * @return */public boolean isUri(String obj) {return obj.matches("(([a-zA-Z][0-9a-zA-Z+\\\\-\\\\.]*:)?/{0,2}[0-9a-zA-Z;/?:@&=+$\\\\.\\\\-_!~*'()%]+)?(#[0-9a-zA-Z;/?:@&=+$\\\\.\\\\-_!~*'()%]+)?");//return false;}
生成URI与Literal方法的简化版(会忽略某些问题,建议采用以上函数):
URI creativeWork = vf.createURI(namespace+"CreativeWork");Literal about = vf.createLiteral(namespace+"about#"+"SomeString");
在构建好Connection、URI以及Literal以后,即可插入三元组:
/** * The URI-URI-Literal format SPO record. */public void addRecord(URI subj, URI pred, Literal obj) {try {//repoConn = repo.getConnection();repoConn.add(subj, pred, obj);//repoConn.close();} catch (RepositoryException e) {e.printStackTrace();} }/** * The URI-URI-URI format SPO record. */public void addRecord(URI subj, URI pred, URI obj) {try {//repoConn = repo.getConnection();repoConn.add(subj, pred, obj);//repoConn.close();} catch (RepositoryException e) {e.printStackTrace();}}
3、批量导入数据
如果有大量数据已经在文件中保存,我们不需要人工编写数据读取、写入的代码,直接通过Sesame已经提供的批量导入接口即可。
File importFile = new File("segment"+j+".ttl");String baseURI = "http://rk.com/import/test/";RepositoryConnection con;try {FileReader fileReader = new FileReader(importFile);BufferedReader reader = new BufferedReader(fileReader);con = repo.getConnection();con.add(reader, baseURI, RDFFormat.TURTLE);System.out.println("Add "+j+" ends.");con.close();} catch (RepositoryException e) {e.printStackTrace();} catch (RDFParseException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}
注意Java Heap的内存大小限制。
可以查看这里修改Java虚拟机内存限制。
至此完成了Sesame数据写入的几种方法。
下回介绍数据导出与数据修改。
0 0
- 【Sesame】Triple Store 添加三元数据
- 【Sesame】导出已经存在的三元组数据
- 【Sesame】查询与修改数据
- SICP 习题2.41 triple 三元组
- Extjs4之Store动态添加数据
- ExtJs6 store发送数据添加参数
- triple
- Triple
- Ext中Store数据的操作【添加统计行】
- Ext.net 前台往Store里添加数据,Add方法
- 【Sesame】用Maven管理Sesame项目
- sesame相关技术
- Sesame HTTP服务器安装
- 删除Store中的数据
- store中修改数据
- 数据集的Store
- Store数据搜索
- Ext 修改 store 数据
- hexToDec
- 排列算法——字典序法
- 插入排序--直接插入排序和希尔排序
- 2. Hello World (2)
- 栈帧详解
- 【Sesame】Triple Store 添加三元数据
- 基本排序(回顾排序)
- pku 1014
- 在我参加的一个晚会上
- 并非我们不重视理想
- 搜索(IDA*)HOJ The Rotation Game
- 2045——不容易系列之(3)—— LELE的RPG难题
- PackageManagerService学习笔记四-构造方法(扫描Package)
- 前言