- 浏览: 61604 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
pkmu8426:
楼主 您好小弟初学Jena 发觉网上文件实在是太少正好看到您这 ...
本体推理的一个例子 -
hadesmile:
确实是个问题,不过一般不这样用,
奇怪的notify()与notifyAll()的执行问题 -
yydcj:
hadesmile 写道10个reduce线程虽然是顺序实例化 ...
一个notify()的实例分析 -
hadesmile:
10个reduce线程虽然是顺序实例化的,但是他们并不是顺序拿 ...
一个notify()的实例分析 -
biganer2008:
你好,按着你的步骤安装后,OWLVizTab标签空白啊,不知道 ...
在 Protege中安装owl-s editor、graphviz插件
jena 操作RDF的一个例子
RDF 越来越被认为是表示和处理半结构化数据的一种极好选择。本文中,Web 开发人员 Philip McCarthy 向您展示了如何使用 Jena Semantic Web Toolkit,以便在 Java 应用程序中使用 RDF 数据模型。
“资源描述框架(Resource Description Framework,RDF)”最近成为 W3C 推荐标准,与 XML 和 SOAP 等 Web 标准并排。
我们从基本操作开始:从头创建模型并向其添加 RDF 语句。本节,我将说明如何创建描述一组虚构家庭成员之间关系的模型,如图 1 中所示:
将使用来自“关系”词汇表(请参阅 参考资料
)的属性 siblingOf
、 spouseOf
、 parentOf
和 childOf
来描述不同的关系类型。为简单起见,家庭成员用来自虚构名称空间的 URI( http://family/
)进行标识。词汇表 URI 通常以 Jena 代码形式使用,所以将它们声明为 Java 常量会非常有用,减少了错误输入。
Jena 的 ModelFactory
类是创建不同类型模型的首选方式。在这种情况下,您想要空的、内存模型,所以要调用的方法是 ModelFactory.createDefaultModel()
。这种方法返回 Model
实例,您将使用它创建表示家庭中每个成员的 Resource
。创建了资源后,可以编写关于这些资源的语句并添加到模型中。
在 Jena 中,语句的主题永远是 Resource
,谓词由 Property
表示,对象是另一个 Resource
或常量值。常量在 Jena 中通过 Literal
类型表示。所有这些类型共享公共接口 RDFNode
。将需要四个不同的 Property
实例表示家庭树中的关系。这些实例使用 Model.createProperty()
创建。
将语句添加到模型中的最简单方法是通过调用 Resource.addProperty()
。此方法以 Resource
作为主题在模型中创建语句。该方法使用两个参数,表示语句谓词的 Property
和语句的对象。 addProperty()
方法被过载:一个过载使用 RDFNode
作为对象,所以可以使用 Resource
或
Literal
。还有有益过载,它们使用由
Java 原语或 String
表示的常量。在示例中,语句的对象是表示其他家庭成员的 Resource
。
通过使用三元组的主题、谓词和对象调用 Model.createStatement()
,还可以直接在模型上创建语句。注意以此种方式创建 Statement
不将其添加到模型中。如果想将其添加到模型中,请使用创建的 Statement
调用 Model.add()
下面给出一些源代码:
package com.jena.ibm;
import java.util.*;
import com.hp.hpl.jena.rdf.model.*;
public class FamilyModel {
// Namespace declarations
static final String familyUri = "http://family/
";
static final String relationshipUri = "http://family.org/relationship/
";
// Jena model representing the family
private Model model;
public FamilyModel() {
// Create an empty Model
model = ModelFactory.createDefaultModel();
}
public void test()
{
// Create the types of Property we need to describe relationships
// in the model
Property childOf = model.createProperty(relationshipUri,"childOf");
Property parentOf =
model.createProperty(relationshipUri,"parentOf");
Property siblingOf =
model.createProperty(relationshipUri,"siblingOf");
Property spouseOf =
model.createProperty(relationshipUri,"spouseOf");
// Create resources representing the people in our model
Resource adam = model.createResource(familyUri+"adam");
Resource beth = model.createResource(familyUri+"beth");
Resource chuck = model.createResource(familyUri+"chuck");
Resource dotty = model.createResource(familyUri+"dotty");
Resource edward = model.createResource(familyUri+"edward");
Resource fran = model.createResource(familyUri+"fran");
Resource greg = model.createResource(familyUri+"greg");
Resource harriet = model.createResource(familyUri+"harriet");
// Add properties to describing the relationships between them
adam.addProperty(siblingOf,beth);
adam.addProperty(spouseOf,dotty);
adam.addProperty(parentOf,edward);
adam.addProperty(parentOf,fran);
beth.addProperty(siblingOf,adam);
beth.addProperty(spouseOf,chuck);
chuck.addProperty(spouseOf,beth);
dotty.addProperty(spouseOf,adam);
dotty.addProperty(parentOf,edward);
dotty.addProperty(parentOf,fran);
// Statements can also be directly created ...
Statement statement1 = model.createStatement(edward,childOf,adam);
Statement statement2 =
model.createStatement(edward,childOf,dotty);
Statement statement3 =
model.createStatement(edward,siblingOf,fran);
// ... then added to the model:
model.add(statement1);
model.add(statement2);
model.add(statement3);
// Arrays of Statements can also be added to a Model:
Statement statements[] = new Statement[5];
statements[0] = model.createStatement(fran,childOf,adam);
statements[1] = model.createStatement(fran,childOf,dotty);
statements[2] = model.createStatement(fran,siblingOf,edward);
statements[3] = model.createStatement(fran,spouseOf,greg);
statements[4] = model.createStatement(fran,parentOf,harriet);
model.add(statements);
// A List of Statements can also be added
List list = new ArrayList();
list.add(model.createStatement(greg,spouseOf,fran));
list.add(model.createStatement(greg,parentOf,harriet));
list.add(model.createStatement(harriet,childOf,fran));
list.add(model.createStatement(harriet,childOf,greg));
model.add(list);
System.out.println("------------------");
// List everyone in the model who has a child:
ResIterator parents = model.listSubjectsWithProperty(parentOf);
// Because subjects of statements are Resources, the method
returned a ResIterator
while (parents.hasNext()) {
// ResIterator has a typed nextResource() method
Resource person = parents.nextResource();
// Print the URI of the resource
System.out.println(person.getURI()); }
// Can also find all the parents by getting the objects of all
"childOf" statements
// Objects of statements could be Resources or literals, so the
Iterator returned
// contains RDFNodes
NodeIterator moreParents = model.listObjectsOfProperty(childOf);
while(moreParents.hasNext())
{
RDFNode r=moreParents.nextNode();
if(r instanceof Resource){
System.out.println(r);
}
//literal
else System.out.println(r);
}
// To find all the siblings of a specific person, the model itself
can be queried
NodeIterator siblings = model.listObjectsOfProperty(edward,
siblingOf);
// But it's more elegant to ask the Resource directly
// This method yields an iterator over Statements
StmtIterator moreSiblings = edward.listProperties(siblingOf);
System.out.println("------------------");
model.listStatements(adam,spouseOf,dotty);
// Find all statements with adam as the subject and dotty as the object
model.listStatements(adam,null,dotty);
// Find any statements made about adam
model.listStatements(adam,null,(RDFNode)null);
// Find any statement with the siblingOf property
StmtIterator stmtIter=
model.listStatements(null,siblingOf,(RDFNode)null);
while(stmtIter.hasNext())
{
Statement stmt=stmtIter.nextStatement();
System.out.println(stmt);
}
}
public static void main(String args[]) {
// Create a model representing the family
FamilyModel theFamily = new FamilyModel();
theFamily.test();
//System.out.println(theFamily.model);
}
}
参考:http://www.ibm.com/developerworks/cn/java/j-jena/#resources
发表评论
-
DAML-S简介
2010-08-02 11:30 882引自:http://hi.baidu.com/fe ... -
OWL-S API指南
2010-07-15 16:13 1231引自http://yoancn.blogbus.com/log ... -
在 Protege中安装owl-s editor、graphviz插件
2010-07-15 15:59 29661.软件安装: 双击install_protege.exe安 ... -
语义Web服务的API使用实例:OWL-S API结合matchmaker、推理机(Jena、Pellet)进行语义转换、匹配、组合及调用web服务
2010-07-15 15:58 1687引自http://www.cnblogs.com/armyme ... -
Jena 环境的配置
2010-07-15 15:55 1189引自 http://www.cnblogs.com/armym ... -
基于OWL-S的语义Web服务发现组装的常用工具
2010-07-15 15:54 1205Protege + OWL-S Editor + ... -
使用jena持久化OWL本体到MySQL
2010-07-15 15:54 1390引自http://www.cnblogs.com/ar ... -
语义Web Service检索服务的工具下载
2010-07-15 15:52 876Eclipse下载: http://www.eclipse.o ... -
本体推理的一个例子
2010-07-15 15:19 2486引自http://hi.baidu.com/wxmsona/b ... -
家族族谱推理规则文件
2010-07-15 15:19 694引自http://hi.baidu.com/wxmsona/b ... -
家族族谱owl文件
2010-07-15 15:17 1052引自http://hi.baidu.com/wxmsona/b ... -
RDF数据查询语言SPARQL
2010-07-15 15:16 1576数据源,一个RDF文件,就是帮助文档中的vc-db-1.rdf ... -
jena持久化到数据库
2010-07-15 15:15 1102Jena 由 HP Labs (http://www.hp ... -
用 SPARQL 搜索 RDF 数据
2010-07-15 15:14 1697随着越来越多的数据使用类似 RSS 的 RDF 格式保存, ... -
Jena的一个例子
2010-07-15 15:12 1185摘自:http://www.crabone.com/index ... -
本体(Ontology)综述
2010-07-15 15:10 1025本体作为一种能在语义和知识层次 上描述领域概念的建模工具,其 ... -
语义Web和本体开发相关技术
2010-07-15 15:09 1317摘自:http://iMarine.blog.163.com/ ... -
owl-s API一个简单例子
2010-07-15 15:09 1164owl-s语义Web服务标记语言, 在Tim Berners- ... -
语义Web
2010-07-15 14:48 858语 义Web概念: 1998 ... -
语义Web中语言与本体
2010-07-15 14:43 842随着人们对网络上信 ...
相关推荐
Jena是Apache Software Foundation下的一个开源项目,提供了一套强大的Java API,用于处理RDF数据。它不仅支持读取、写入和查询RDF数据,还提供了高级功能,如推理和SPARQL查询执行。Jena的核心组件包括Model、...
根据提供的文件信息,本文将对RDF...Jena作为一个功能强大的RDF处理库,提供了丰富的API来简化RDF数据的操作。通过学习RDF的基本概念以及如何使用Jena处理这些数据,开发者可以构建出更加智能和灵活的应用程序。
以下是一个简化版的例子,展示如何使用Jena操作本体: 1. **创建模型**:首先需要创建一个Jena Model对象,用于存储RDF数据。 2. **加载本体**:接着,可以通过读取本地或远程的RDF文件来加载本体到Model中。 3. **...
Jena RDF API 是一个用于处理资源描述框架(RDF)数据的Java库,它提供了丰富的功能,使得开发者能够创建、读取和操作RDF模型。RDF是一种标准的数据模型,用于描述网络上的资源,它使用URI(统一资源标识符)作为...
对于初学者来说,《jena RDF API入门》是一份非常实用的学习资料,它通过一些典型例子帮助读者快速掌握如何使用Jena进行RDF数据的操作。 #### 二、核心知识点解析 ##### 1. 创建OntModel实例 创建OntModel实例是...
对 Jena 的简单理解和一个例子 本文将对 Jena 进行简单的介绍,并提供一个使用 Protégé 创建生物本体的实例,来帮助初学者更好地理解 Jena。 一、Jena 介绍 Jena 是 HP Labs 开发的 Java 开发工具包,用于 ...
一个简单的Jena使用例子可能涉及以下步骤: 1. **创建Model**: 首先,我们需要创建一个Model对象来存储RDF数据。这通常通过`ModelFactory.createDefaultModel()`完成。 ```java Model model = ModelFactory....
为了帮助理解Jena API的具体用法,这里提供一个简单的示例,演示如何使用Jena API创建和查询RDF数据: ```java import org.apache.jena.rdf.model.*; public class JenaExample { public static void main(String...
标题中的“用jena写的一个家庭族谱例子”揭示了这个项目是利用Jena库来构建一个关于家庭关系的图谱。Jena是Apache软件基金会开发的一个开源Java框架,主要用于处理语义网、链接数据以及知识图谱相关任务。在这个项目...
Jena是Apache软件基金会开发的一个开源Java框架,主要用于构建语义网和链接数据应用。它提供了处理RDF(Resource Description Framework)、RDFS(RDF Schema)以及OWL(Web Ontology Language)等语义数据的强大...
Jena文档《An Introduction to RDF and the Jena RDF API》的译文 RDF和Jena RDF API入门
JENA教程(包括生成RDF和写本体到MySQL中,很适合入门,很详细)JENA教程(包括生成RDF和写本体到MySQL中,很适合入门,很详细)JENA教程(包括生成RDF和写本体到MySQL中,很适合入门,很详细)JENA教程(包括生成RDF和写本体...
本文档旨在为不熟悉资源描述框架(Resource Description Framework,简称RDF)及其Java API——Jena的程序员提供一个入门教程。文档假定读者具备基本的XML和Java知识,并希望通过原型设计的方式快速了解RDF的应用。 ...
Jena,一个在Java编程语言中广泛使用的开源框架,专为处理Resource Description Framework (RDF)、Semantic Web和Linked Data而设计。其2.6.0版本的发布,为开发者提供了一个强大且成熟的工具集,用于构建复杂的语义...
本篇文章将围绕标题“jena本体的一个小程序”展开,深入探讨这个程序的核心概念和功能。 首先,我们要理解什么是本体。在语义网中,本体是一种形式化的、结构化的共享概念模型,用于描述一个领域的知识,使得计算机...
- **设计目标**:创建一个可以与Jena框架无缝集成的分布式RDF三元组存储系统,支持所有RDF规范特性,并具备良好的扩展性和高效查询能力。 - **架构概述**:利用HBase作为底层存储层,结合Jena的强大功能,提供了一...