利用Jena API构建RDF模型

(1)Resource Description Framework(资源描述框架 RDF)是W3C推荐的标准,与XML、SOAP等web标准并排,是一个用于表达关于万维网上的资源的信息的语言。

RDF使用URI来标识任何事物,并通过属性和属性值来描述资源。资源、属性和属性值的组合可以形成一个陈述句,其中资源是陈述句的主体,属性时陈述句的谓语,属性值是陈述句的客体。主语、谓语、客体称为RDF的三元组。

例:《XXX》的作者是XX:在这个陈述句中,《XXX》是主体,作者是谓语,XX是客体。

RDF就是这些一个个的陈述语句构成的,RDF模型可以转换成图结构,其中主体和客体代表图的节点,谓语代表边。

下图所示:

利用Jena API构建RDF模型_第1张图片

用陈述句表示就是:《XXX》的作者是XX,出版时间是1900年


关于RDF我找到的比较全面的参考资料有:

                      RDF入门推荐标准(中文版)http://zh.transwiki.org/cn/rdfprimer.htm               W3CSchool的RDF教程:http://www.w3school.com.cn/rdf/index.asp



(2)Jena是Apache的一个开源项目,用于构建语义Web程序,它提供了一组工具和Java库来帮助你开发语义web,链接数据应用等。

           我也是刚刚开始接触Jena和RDF,所以本文的应用实例都是通过阅读Jena官网上的文档学习而来。代码通过注释说明:

          参考资料:http://jena.apache.org/tutorials/rdf_api.html。其中还有很多example,分别讲了构建RDF模型,读取RDF文件,生成RDF文件等。

          

import com.hp.hpl.jena.rdf.model.Model;
import com.hp.hpl.jena.rdf.model.ModelFactory;
import com.hp.hpl.jena.rdf.model.Property;
import com.hp.hpl.jena.rdf.model.RDFNode;
import com.hp.hpl.jena.rdf.model.Resource;
import com.hp.hpl.jena.rdf.model.Statement;
import com.hp.hpl.jena.rdf.model.StmtIterator;
import com.hp.hpl.jena.vocabulary.VCARD;


public class JenaRDF
{
    public static void main(String args[])
    {
       String personURI = "http://somewhere/JohnSmith";
       String fullName = "John Smith";
       String givenName = "John";
       String familyName = "Smith";
       //要创建RDF模型,首先要通过模型工厂创建一个Model
       Model model = ModelFactory.createDefaultModel();
       //创建一个名为personURI的资源,资源是模型中的节点
       Resource johnSmith = model.createResource(personURI);
       //addProperty方法是给资源添加谓语和客体,所以有两个参数。另外,因为方法的返回值是资源本身,所以可以级联的给资源添加属性。
       //这里的谓语使用的是VCARD规范,也可以自定义谓语
       //Parameters:
       // p - The property to be added.
       // o - The value of the property to be added.
       johnSmith.addProperty(VCARD.FN, fullName).addProperty(VCARD.N, model.createResource().addProperty(VCARD.Given, givenName).addProperty(null,familyName));//表示电子名片的命名空\
       
       //显示RDF模型中的三元组
       //列出Model中的statements
       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(" .");
       }
       
       model.write(System.out,"RDF/XML-ABBREV");
       model.write(System.out,"N-TRIPLE");
    }
}




你可能感兴趣的:(利用Jena API构建RDF模型)