jena使用 java_转:使用Jena 处理 RSS 1.0

作者:Brian McBride

发表时间:2000年9月2日

原文链接:http://www.hpl.hp.co.uk/people/bwm/rdf/jena/rssinjena.htm

译者:dlee

翻译时间:2001年5月26日

RSS 1.0 是最近宣布的一个格式,顺从于 W3C 的 RDF (资源定义框架),用来分发(distributing) 站点摘要 (site summary) 和企业联合 (syndication) 元数据。一个站点摘要文档的例子可以在规范中找到。Jena 是一套实验性的用来处理 RDF 的 Java API。这篇笔记描述了一个应用程序使用 Jena 来将一个站点摘要文档翻译成 HTML。整个程序的源代码作为 RenderToHTML 可以在 Jena 发布的例子包里得到。

这篇文章和例子代码基于 RSS 规范候选发布版本1 (Release Candidate 1 version)。

这个应用程序以创建一个 RDF 模型开始,实际上在内存中是一个 RDF statement 的集合。然后解析站点摘要文档,使用一个 RDF 解析器,并加载 statement 到新创建的模型中。

Model model = new ModelMem();

model.read("http://www.xml.com/xml/news.rss");

在写出一个样板 HTML 头后,程序列出和处理在输入流中的每个 channel。在 RDF 术语中,channel 是具有一个 rdf:type 属性的 rss:channel 的资源。我们使用 Jena API 来列出具有一个有这个值的 rdf:type 属性的所有的资源。在下面的代码中,假设输出是一个接收 HTML 输出的 PrintWriter。

ResIterator channels =  model.listSubjectsWithProperty(RDF.type, RSS.channel);

while (channels.hasNext()) {

renderChannel(channels.next(), out);

}

为了呈现 (render) 一个 channel,程序首先写出它的 title,description 和相关的 image 和 textinput 字段 (如果有的话)。getProperty 方法用来得到 channel 的 title,link 和 description 属性,随后这些可以被呈现为 HTML。

void renderChannel(Resource channel, PrintStream out)

throws RDFException {

String url = null;

String title = null;

String desc = null;

url = channel.getProperty(RSS.link).getString();

title = channel.getProperty(RSS.title).getString();

desc = channel.getProperty(RSS.description).getString();

一个 channel 可以有一个相关联的 image 和 textinput,测试是否存在这些属性和是否需要调用合适的方法来呈现它们是很简单的。

if (channel.hasProperty(RSS.image)) {

renderImage(channel.getProperty(RSS.image) .getResource(), out);

}

if (channel.hasProperty(RSS.textinput)) {

renderImage(channel.getProperty(RSS.textinput) .getResource(), out);

}

为了处理一个 image,同样的调用被用来确定 image 的属性。

String url = null;

String title = null;

// does the image have a link?

if (image.hasProperty(RSS.link)) {

url = image.getProperty(RSS.link).getString();

}

// does the image have a title?

if (image.hasProperty(RSS.title)) {

title = image.getProperty(RSS.title).getString();

} image.getProperty(SSF.title).getString();

然后这个 image 可以被呈现成为 output stream。textinput 以 相似的方法处理。

channel 有一个 items 属性,它的值为一个 RDF sequence。因此使用 getProperty 方法得到这个 sequence 就很简单的了。然后迭代每一个元素以呈现它。

if (channel.hasProperty(RSS.items)) {

Seq items = channel.getProperty(RSS.items).getSeq();

for (int i=1; i<= items.size(); i++) {

renderItem(items.getResource(i), out);

}

}

以相同的模式呈现每一个 items。首先得到需要呈现的 items 的属性,然后写出 HTML。

void renderItem(Resource item, PrintWriter out) {

String url = item.getProperty(RSS.link).getString();

String title = item.getProperty(RSS.title).getString();

String desc = item.getProperty(RSS.description) .getString();

...

}

使用 Jena 来处理 RSS 1.0 流是简单和直接的。

Brian McBride

HP实验室,2000年9月2日

修改于2000年12月2日

posted on 2006-07-20 10:36 hopeshared 阅读(530) 评论(0)  编辑  收藏 所属分类: Web Service

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值