mysql jena rdf_RDF结合Jena初步基础学习(一)

2ff34e647e2e3cdfd8dca593e17d9b0a.png

资源具有属性

Jena是一个Java API,可用于创建和操作RDF图,Jena有对象类表示图形,资源,属性和文字

表示资源的接口: Resource

表示属性的接口: Property

表示文字的接口: Literal

在Jnea中,图形称为模型,由接口 Model 表示

Model model = ModelFactory.createDefaultModel();

使用该方法创建基于内存的模型

Resource joinSmith = model.createResource(personURI);

使用该方法创建资源

“常量”类:VCARD,该类保存表示VCARD模式中所有定义的对象

joinSmith.addProperty(VCARD.FN, fullName);

给资源添加属性

创建资源和添加属性还可以更紧凑的以级联样式编写:Resource joinSmith =

model.createResource(personURI)

.addProperty(VCARD.FN , fullName);

可定义空节点

model.createResource()

括号内不含参数即可定义一个空节点

RDF模型中一般一个语句包含三个部分

subject:箭头出发点

predicate:箭头

object: 箭头目的地

可称为主语,谓语和宾语

主语——谓语——>宾语

example:// list the statements in the Model

StmtIterator iter = model.listStatements();

// print out the predicate, subject and object of each statement

while (iter.hasNext()) {

Statement stmt = iter.nextStatement(); // get next statement

Resource subject = stmt.getSubject(); // get the subject

Property predicate = stmt.getPredicate(); // get the predicate

RDFNode object = stmt.getObject(); // get the object

System.out.print(subject.toString());

System.out.print(" " + predicate.toString() + " ");

if (object instanceof Resource) {

System.out.print(object.toString());

} else {

// object is a literal

System.out.print(" "" + object.toString() + """);

}

System.out.println(" .");

}

listStatements() 方法

该方法返回一个StmIterator, 一种可以遍历模型中所有语句的迭代器(这里的谷歌翻译真是醉了,还好切回英文读懂了,不然简直了)

nextStatement() 方法

该方法从迭代器中返回当前的下一个语句

使用

Statement 进行一个语句的初始化

Statement stmt = iter.nextStatement();

在此基础上分别通过

.getSubject()获取该语句的主语subject

.getPredicate() 获取该语句的谓语Predicate

.getObject()获取该语句的宾语Object

iter.hasNext()

个人理解: iter即当前迭代器,`hasNext()是一个布尔型函数,如果迭代器当前位置之后没有语句了,就返回false,否则返回true

.write(System.out)方法

将一个模型以RDF的形式写出来

model.write(System.out);

要写入大文件并保留空白节点,请以N-TRUPLES格式写入

model.write(System.out,"N-TRIPLES");

===从文件中读取RDF===

example:// create an empty model

Model model = ModelFactory.createDefaultModel();

// use the FileManager to find the input file

InputStream in = FileManager.get().open( inputFileName );

if (in == null) {

throw new IllegalArgumentException(

"File: " + inputFileName + " not found");

}

// read the RDF/XML file

model.read(in, null);

// write it to standard out

model.write(System.out);

使用.read()函数来对文件进行读取

model.read(in,null);

in为创建的输入流

setNsPrefix(String prefix,String URI)

声明命名空间URI可以缩写成prefix(为了方便,因为有些命名空间真的太长了,每次写非常麻烦),Jena要求prefix是一个合法的XML命名空间名称,并URI以非名称字符结尾

给定资源的URI,可以用下列方法从模型中检索资源对象

Resource name = model.getResource(johnSmithURI);

访问资源的属性如下

Resource.getProperty(Property p);

—查询模型—

Model.listStatements() 列出模型中所有语句,但是不适用于数据量大的模型

Model.listStatementWithProperty(Property p,RDFNode o)

将会返回一个迭代器,包含所有含有属性p,并且value是o的资源

选择器

Selector selector = new SimpleSelector(subject, predicate, object);

如果三个参数中任意一个为null,将相当于Sparql中的SELECT *

如果三个参数都为null,则选择模型中的所有语句

Selector selector = new SimpleSelector(null,VCARD.FN,null);

将选择

谓语是VCARD.FN的所有语句

容器Bag是无序集合

ALT是一种旨在代表替代品的无序集合

SEQ是有序集合

创建一个Bag容器

Bag smiths = model.createBag();

容器接口提供一个迭代器来列出容器的内容

NodeIterator iter2 = smiths.iterator();

可以像上述那样用迭代器遍历if (iter2.hasNext()) {

System.out.println("The bag contains:");

while (iter2.hasNext()) {

System.out.println(" " +

((Resource) iter2.next())

.getProperty(VCARD.FN)

.getString());

}

} else {

System.out.println("The bag is empty");

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值