耶拿天气数据集_耶拿简介

资源描述框架(RDF)最近成为W3C的推荐,与XML和SOAP等其他Web标准一起被取代。 RDF可以应用于处理临时传入数据的领域(例如CRM),并且已经广泛用于社交网络和LiveJournal和TypePad等自发布软件。

Java程序员将具有使用RDF模型的技能,从而逐渐受益。 在本文中,我将带您了解HP Labs的开源Jena Semantic Web Framework的一些功能(请参阅参考资料 )。 您将学习如何创建和填充RDF模型,如何将其持久化到数据库中以及如何使用RDQL查询语言以编程方式查询它们。 最后,我将演示如何使用Jena的推理功能从本体论中推断有关模型的知识。

本文假定您对RDF有所了解-包括图形,三元组和模式之类的概念-以及Java编程的基本知识。

创建一个简单的RDF模型

让我们从基础开始:从头开始创建模型并向其中添加RDF语句。 在本节中,我将展示如何创建一个模型来描述一组虚构的家庭成员之间的关系,如图1所示:

图1.虚构的家谱
小家谱

你会描述使用性质不同的关系类型siblingOfspouseOfparentOfchildOf ,从“关系”词汇拍摄(见相关主题 )。 为简单起见,使用来自虚构名称空间http://family/ URI标识家庭成员。 词汇URI在Jena代码中经常使用,因此将它们声明为Java常量很有用,从而减少了混淆它们的风险。

耶拿的ModelFactory类是创建不同类型模型的首选方法。 在这种情况下,您需要一个空的内存模型,因此ModelFactory.createDefaultModel()是要调用的方法。 此方法返回Model的实例,您将使用该实例创建代表家庭中每个人的Resource 。 创建资源后,可以对它们进行声明并添加模型。

在耶拿(Jena)中,语句的主题始终是Resource ,谓词由Property表示,而对象是另一个Resource或文字值。 文字在耶拿用Literal类型表示。 所有这些类型共享一个公共接口RDFNode 。 您将需要四个不同的Property实例来表示家族树中的关系。 这些实例是使用Model.createProperty()创建的。

向模型添加语句的最简单方法是调用Resource.addProperty() 。 此方法在模型中创建一个以“ Resource为主题的语句。 该方法有两个参数,一个表示语句谓词的Property和该语句的对象。 addProperty()方法已重载:一个重载将RDFNode作为对象,因此可以使用ResourceLiteral 。 还有一些方便重载,它们采用Java原语或String表示的文字。 在该示例中,语句的对象是Resource代表其他家庭成员。

通过调用带有三元组的主题,谓词和对象的Model.createStatement() ,也可以在模型上直接创建语句。 请注意,以这种方式创建一个Statement不会将其添加到模型中。 如果要将其添加到模型中,请使用创建的Statement调用Model.add() ,如清单1所示:

清单1.创建一个代表虚构家庭的模型
// URI declarations
String familyUri = "http://family/";
String relationshipUri = "http://purl.org/vocab/relationship/";

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

// Create a Resource for each family member, identified by their URI
Resource adam = model.createResource(familyUri+"adam");
Resource beth = model.createResource(familyUri+"beth");
Resource chuck = model.createResource(familyUri+"chuck");
Resource dotty = model.createResource(familyUri+"dotty");
// and so on for other family members

// Create properties for the different types of relationship to represent
Property childOf = model.createProperty(relationshipUri,"childOf");
Property parentOf = model.createProperty(relationshipUri,"parentOf");
Property siblingOf = model.createProperty(relationshipUri,"siblingOf");
Property spouseOf = model.createProperty(relationshipUri,"spouseOf");

// Add properties to adam describing relationships to other family members
adam.addProperty(siblingOf,beth);
adam.addProperty(spouseOf,dotty);
adam.addProperty(parentOf,edward);

// Can also create statements directly . . .
Statement statement = model.createStatement(adam,parentOf,fran);

// but remember to add the created statement to the model
model.add(statement);

完整的代码示例FamilyModel.java还演示了如何将批处理语句立即作为数组或java.util.List添加到模型java.util.List

建立家庭模型后,让我们看看如何使用Jena的查询API从信息中提取信息。

询问RDF模型

以编程方式询问Jena模型主要是通过ModelResource接口上的list()方法执行的。 这些方法可用于获取与某些条件匹配的主题,对象和Statement 。 它们还返回java.util.Iterator ,它具有返回特定对象类型的额外方法。

让我们回到清单1的家庭模型示例,看看可以如何查询它,如清单2所示:

清单2.查询族模型
// List everyone in the model who has a child:
ResIterator parents = model.listSubjectsWithProperty(parentOf);

// Because subjects of statements are Resources, the m
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值