Jena API的使用以及实例_wingofdeath的博客-程序员宅基地

技术标签: java  web  实例  api  jena  

本文将对jena API进行简单介绍,鉴于Jena已经更新到3.2版本,有些设置已经无法使用,对此进行了一定程度的修改,以方便新手的使用。部分内容参考了这里http://www.iandickinson.me.uk/articles/jena-eclipse-helloworld/

1.Jena包下载以及环境配置

首先,下载最新版本的Jena包,目前更新到3.2版本,下载地址,解压;

(1)打开Eclipse,新建java project;

这里写图片描述
本人使用的是eclipse neon,推荐使用该版本及以上。

(2)新建类

这里写图片描述

(3)右键点击项目->properties->Java Build Path -> Add libraries->User library,新建一个userlibrary命名为JenaLibs,Add External JARs, 并将下载下来的Jena包解压后 lib 目录下的 jar 文件添加到其中,点击OK。

这里写图片描述
这里写图片描述

(4)注意import的文件格式为org.apache.jena*;

这里写图片描述
现在可以开始您的Jena使用了。

2.使用实例

package web;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;

import org.apache.jena.rdf.model.Model;
import org.apache.jena.rdf.model.ModelFactory;
import org.apache.jena.rdf.model.RDFNode;
import org.apache.jena.rdf.model.Resource;
import org.apache.jena.vocabulary.VCARD;

public class ExtendAndQuery {
    public static void main(String[] args) throws Exception{
        String personURI = "http://somewhere/JohnSmith";  
        String givenName = "John";  
        String familyName = "Smith";  
        String fullName = givenName + " " + familyName;  
        Model model = ModelFactory.createDefaultModel();  

        Resource johnSmith = model.createResource(personURI);  
        johnSmith.addProperty(VCARD.FN, fullName);  
        johnSmith.addProperty(VCARD.N,   
                    model.createResource()  
                        .addProperty(VCARD.Given, givenName)  
                        .addProperty(VCARD.Family, familyName));  

        System.out.println("原始内容:");  
        model.write(System.out);  
        // 删除 Statement           
        model.remove(model.listStatements(null, VCARD.N, (RDFNode)null));  
        model.removeAll(null, VCARD.Given, (RDFNode)null);  
        model.removeAll(null, VCARD.Family, (RDFNode)null);  

        System.out.println("\n删除后的内容:");  
        model.write(System.out);  

        //增加 Statement  
        model.add(johnSmith, VCARD.N, model.createResource()  
                .addProperty(VCARD.Given, givenName)  
                .addProperty(VCARD.Family, familyName));  
        System.out.println("\n重新增加后的内容:");  
        model.write(System.out);  
    }  
}

引用自javafreely,2012-12-25。
其中, ModelFactory 类是一个Model 工厂,用于创建model 对象。我们可以使用 Model 的createResource 方法在model 中创建一个资源,并可以使用资源的 addProperty 方法添加属性。
这个例子中,资源 http://…/JohnSmith 表示一个人。这个人的全名是 John Smith,即 vcard:FN 属性的值是 John Smith。在 Jena 中,资源用 Resource 类来表示,其属性用 Property 类来表示。而整体模型用Model 类来表示,即上图就是一个Model。一个 Model 对象可以包含多个资源。
我们可以使用Jena API解析这个RDF的statement:

package web;
import org.apache.jena.rdf.model.Model;
import org.apache.jena.rdf.model.ModelFactory;
import org.apache.jena.rdf.model.RDFNode;
import org.apache.jena.rdf.model.Resource;
import org.apache.jena.vocabulary.VCARD;
import org.apache.jena.rdf.model.Property;    
import org.apache.jena.rdf.model.Statement;  
import org.apache.jena.rdf.model.StmtIterator;  

public class StatementDemo {  
    public static void main(String[] args){  

        //Introduction  
        String personURI = "http://somewhere/JohnSmith";  
        String givenName = "John";  
        String familyName = "Smith";  
        String fullName = givenName + " " + familyName;  
        Model model = ModelFactory.createDefaultModel();  

        Resource johnSmith = model.createResource(personURI);  
        johnSmith.addProperty(VCARD.FN, fullName);  
        johnSmith.addProperty(VCARD.N,   
                    model.createResource()  
                        .addProperty(VCARD.Given, givenName)  
                        .addProperty(VCARD.Family, familyName));  

        //Statement  
        StmtIterator iter = model.listStatements();  

        while(iter.hasNext()){  
            Statement stmt = iter.nextStatement();  
            Resource subject = stmt.getSubject();  
            Property predicate = stmt.getPredicate();  
            RDFNode object = stmt.getObject();  

            System.out.print(subject.toString());  
            System.out.print(" "+predicate.toString());  
            if(object instanceof Resource){  
                System.out.print(object.toString());  
            }else{  
                System.out.print("\"" + object.toString() + "\"");  
            }  

            System.out.println(" .");  
        }  
    }  
}  

其中有一个资源我们没有指定资源名。

鉴于笔者学习进度只到这一步,更多学习资源请访问Javafreely

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/wingofdeath/article/details/65586947

智能推荐

[Android源码分析]蓝牙打开流程分析——jni层之下的偷偷摸摸(Service Record的创建)_gordon1986的博客-程序员宅基地

为什么取名为偷偷摸摸,因为从这里往下在互联网上就基本找不到任何资料了,大家都是凭借函数的名字去猜测一下做了一些什么,然后继续回到jni之上去分析了。然而仅了解那些明面上的东西对我们分析蓝牙来说显然是不够的,我们必须要一探究竟,看看jni之下都偷偷摸摸做了些什么。

每天一道编程题——素数对猜想_sunniy27的博客-程序员宅基地

题目摘自: - PAT数据结构起步能力自测让我们定义dnd_nd​n​​为:dn=pn+1−pnd_n = p_{n+1}-p_nd​n​​=p​n+1​​−p​n​​,其中pip_ip​i​​是第iii个素数。显然有d1=1d_1 = 1d​1​​=1,且对于n>1n>1n>1有dnd_nd​n​​是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。现给定任意正整数N(

Visual Studio 开源控件扩展 NuGet 常用命令及常用组件_天马3798的博客-程序员宅基地

Visual Studio 开源控件扩展 NuGet 常用命令,整理如下:—————————————————————————————————-获取列表Get-Package -ListAvailable添加组件Install-Package 组件名添加特定版本组件Install-Package 组件名 -Version 版本号移除组件

POJ 1273 EK算法_傻蛋的阿简的博客-程序员宅基地

纯模板题,套个模板就好了#include<iostream>#include<queue>#include<cstring>#include<cstdio>using namespace std;const int maxn=205;const int inf=0x7fffffff;int r[maxn][maxn]; //残留...

警告: No mapping found for HTTP request with URI [/mark_head/WEB-INF/jsp_yanguo110的博客-程序员宅基地

这个问题出现的原因是在第一次访问接口成功的时候后转到jsp页面的时候,想要的情况是跳转到另一个jsp,然后在网上一通乱查乱改,在web.xml改 /*变成 /不行,然后在扫描注解 加上*,像这样,但是还是没什么用,后来觉得应该是返回的问题,然后在@RequestMapping(value="/login",method=RequestMethod.POST, produces = "text/

随便推点

Python Selenium破解滑块验证码最新版(GEETEST 95%以上通过率)_小叶丶的博客-程序员宅基地

一、滑块验证码简述       有爬虫,自然就有反爬虫,就像病毒和杀毒软件一样,有攻就有防,两者彼此推进发展。而目前最流行的反爬技术验证码,为了防止爬虫自动注册,批量生成垃圾账号,几乎所有网站的注册页面都会用到验证码技术。其实验证码的英文为 CAPTCHA(Completely Automated Public Turing test to tell Computers and Humans Apart),翻译成中文就是全自动区分计算机和人类的公开图灵测试,...

Android把view的画面转换为bitmap_hc-斌斌的博客-程序员宅基地

程序如何把自身进行一次截图?或者对某个view对象截图?由左至右,分别是 bt4 iv iv2 iv3iv是屏幕截图,上半部分是黑色,下面是bt4的图iv2填充的是未显示过的一个按钮,截取不到,呈黑色iv3是复制bt4,跟bt4一样上述代码包含了bitmap转换为drawable的方式转自:http://www.aslibra.com/blog/post/andro

nacos 作为配置中心控制台会一直循环打印日志_Bruce Leo的博客-程序员宅基地

解决方法1:把bootstrap.properties重新改回为application.properties解决方法2:将配置文件里的 spring.cloud.nacos.config.namespace=public 注释掉

extern "C" 与函数重载_dielu7895的博客-程序员宅基地

前言如果向要在一个文件中使用另一个文件中的变量,不能在头文件中定义全局变量,因为被多个文件包含后会导致编译出错,并且静态的static变量,只能在本文件内使用,这时候就可以使用extern关键字。extern 关键字:  首先还是先看一下 extern 关键字的作用:extern关键字可以置于变量或函数前,以标示变量或函数的定义在别的文件中,提示编译器遇到此变量或函数时在其他...

微型计算机的基本组成及各个部分的作用_微机原理的硬件部分的五个基本部件_Asia52的博客-程序员宅基地

1.冯诺依曼计算机的储存工作方式(1)采用二进制代码表示数据和指令数据和指令都是由0和1组成的代码序列(2) 采用储存程序工作方式编写程序,将程序保存到计算机的储存器中,然后从计算机里依次执行(3) 硬件系统由五大部分构成计算机硬件系统由运算器,储存器,控制器,输入设备,输出设备五大部件构成2.硬件系统,可触摸到的系统,软件:由不能触摸到的二进制构成的 ,软件有系统软件(操作系统,...

【Visual C++】游戏开发笔记十八 游戏基础物理建模(一) 匀速与加速运动_浅墨_毛星云的博客-程序员宅基地

本系列文章由zhmxy555(毛星云)编写,转载请注明出处。 http://blog.csdn.net/zhmxy555/article/details/7496200作者:毛星云    邮箱: [email protected]    欢迎邮件交流编程心得我们可以毫不夸张的说,在当今的任意一款成功的3D游戏引擎中,物理建模都是非常核心的部分。比如当今最高水平的、大名鼎鼎的引擎Unreal E

推荐文章

热门文章

相关标签