Jena Tutorial(一)

Jena Tutorial(一)

目标:1.RDF理解为一个图表而不是一个XML文档

         2.能够使用JenaJava中加载一个RDF/XML文件

         3.使用Jena写一个RDF图表来作为一个RDF/XML文件

         4.Jena中操作一个RDF图表

 

Introduction

RDF是一种资源描述标准。从深度上和准确度上说这种资源依然是一些数据。

我们的例子是关于人的。他们使用一种VCARDSRDF表述方法。RDF是是用节点和弧形图表的形式的最好想法。例如:

Figure 1

资源John Smith作为图表和用URI定义("http://.../JohnSmith”)来显示出来。

 

资源有属性。在这些例子中,我们对出现在John Smith商业卡中的一系列属性感兴趣。Figure 1仅仅显示出一个属性:John Smith的全名。一个属性用一条弧表示并把属性全名表于弧上。属性的名字也是一个URI,但是这个URI是很长、很繁琐的,在XML的名字表中显示。在之前的叫做前缀命名空间表示一个名字空间,之后的叫做本地本地名字代表在在名字空间中的一个名字。在写成RDF/XML文件时属性常常在全名表中表示出来,这样便于在图表和文档表示时速记。但是严格地说属性是被URI定义的。nsprefix:localname表方便与名字空间的URI和本地名字连接。并不需要通过浏览器来解决一个URI属性。

每一个属性有一个值。在这个案例中这个值叫做文字(literal),一种文字特征类型。文字在矩形框中显示。

Jena是一个JavaAPI接口,能够用来创建和操作类似于图1RDF图。Jena有一个课题类来表述图示,资源和文字。表述资源、属性和文字的接口在Jena中叫做资源、属性和文字。在Jena中一个RDF图被称为一个模型,用模型接口来描述。

创建一个模型或这种图很简单:

// some definitions
   
   
static String personURI    = "http://somewhere/JohnSmith";
   
   
static String fullName     = "John Smith";

// create an empty Model
Model model = ModelFactory.createDefaultModel();
   
   

// create the resource
Resource johnSmith = model.createResource(personURI);
   
   

// add the property
 johnSmith.addProperty(VCARD.FN, fullName);
  
  

用一些常量定义开始,之后在创建一个空模型,用ModelFactory类的方法createDefaultModel()来创建一个记忆的基础模型。Jena包括其他Model接口的扩展,例如:使用关系型数据库,这种类型的模型也可以通过ModelFactory得到。

之后创建资源John Smith并添加进模型中。常量类VCARD提供这种属性,在VCARD计划中提供对所有物体的定义。Jena对其他许多著名的schemas提供常量类,例如:像RDFRDFschema本身,Dubin CoreDAML

像创建资源和添加属性的代码可以很简洁地用瀑布方式书写:

Resource johnSmith =

        model.createResource(personURI)

             .addProperty(VCARD.FN, fullName);

现在让我们为vcard增加更多详细的描述,来探索RDFJena的一些特性。

在第一个例子中,属性的值是一个文字。RDF也可以把其他的资源作为他的属性值。使用一个公共的RDF技术,来显示怎样表达JohnSmith名字的其他部分。

Figure 2

这儿我们增加一个新的属性vcard:N来代表John Smith的名字结构。vcard:N用其他的资源作为他的值,描述复合结构的椭圆并没有一个URI,这样的节点叫做空白节点。

表述这中结构的Jena代码也很简单,先有声明之后创建一个空白模型。

tutorial2 // some definitions

String personURI    = "http://somewhere/JohnSmith";

String givenName    = "John";

String familyName   = "Smith";

String fullName     = givenName + " " + familyName;

 

// create an empty Model

Model model = ModelFactory.createDefaultModel();

 

// create the resource

//   and add the properties cascading style

Resource johnSmith

  = model.createResource(personURI)        //增加一个节点

         .addProperty(VCARD.FN, fullName)

         .addProperty(VCARD.N,

                      model.createResource()

                           .addProperty(VCARD.Given, givenName)

                           .addProperty(VCARD.Family, familyName));

陈述

在每一个RDF图中的弧叫做一个陈述。每一个陈述断言关于资源的一个事实。每一个陈述有三个部分:

Ø         主体是来自于弧起始点的资源

Ø         谓词是标于弧上的属性

Ø         客体是弧指向的资源或文字

一个陈述有时也叫做三元组。

每一个RDF模型代表一些陈述。相同的陈述是没有作用的。Jena模型接口定义了listStatements()方法,以返回一个JavaIterator字类型StmtIteratorStmtIterator有一个方法nextStatement()来从iterator中返回下一个陈述。Statement接口提供了得到陈述主体、谓词、客体的方法。

Tutorial3扩展了tutorial2列出所有的已创造的陈述并输出。

Tutorial3  // 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(" .");

}

一个陈述的客体是资源或是文字,getObject()方法返回客体的类型作为RDFNode(一种公共的资源和文字的父类),后面的客体通过instanceof确定类型和处理方法。

输出如下:

http://somewhere/JohnSmith  http://www.w3.org/2001/vcard-rdf/3.0#N anon:14df86:ecc3dee17b:-7fff .

anon:14df86:ecc3dee17b:-7fff  http://www.w3.org/2001/vcard-rdf/3.0#Family  "Smith" .

anon:14df86:ecc3dee17b:-7fff  http://www.w3.org/2001/vcard-rdf/3.0#Given  "John" .

http://somewhere/JohnSmith  http://www.w3.org/2001/vcard-rdf/3.0#FN  "John Smith" .

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值