### 如何用 PHP 把 RDF 内容插入 Web 站点之中(6)

echo "<li><a href=" . $item["link"] . ">" .
$item["title"] . "</a>",
}
}
?>
</ul>
每次你重新装入上面的脚本，相应的 RDF 文件就会被从特定的位置上取来，经过分析之后，按要求的格式显示出来。
如果你站点具有高的访问量，你就可能觉得我们的辛苦无意义之极，尤其是当所用的 RDF 数据更新地没有那么快时，情况更糟。 在这种情况下，或许探究一下在本地缓存 RDF 数据才是较明智的做法：要么扩展上面的例子程序，在其中加入缓存功能；要么每阁几个小时都花很长的时间下载一个最新 RDF 文件的本地副本到你的 Web 服务器上，然后使用这个本地副本，而不是那个“活”的（the “live” one）。
8)免费午餐（A Free Lunch）
上面我所写的那个类也是很基本的，是拿来说明问题的，或许也可以用于低访问量的站点。如果你想寻找一些更专业的东西，去网上吧，那里有许多的开放源码的 RDF 分析器，他们带有各种附加的功能（包括缓存）。 那么就让我们看一些如何运用这些分析器的例子吧。
第一个要讲的是由 Stefan Saasen 为 fase4 网站开发的 RDF 分析器类，可以从 http://www.fase4.com/rdf/上免费下载。这是一个功能非常齐全的 RDF 分析器，支持缓存和通过代理认证。下面是如何使用它的例子：
<html>
<head>
<style type="text/css">
body {font-family: Verdana, font-size: 11px,}
.fase4_rdf {font-size: 13px, font-family: Verdana} .fase4_rdf_title
{font-size: 13px, font-weight : bolder,}
</style>
</head>
<body>
<?
// include class
include("rdf.class.php"),
// instantiate object
$rdf = new fase4_rdf,
// set number of items to display
$rdf->set_max_item(5),
// set RDF engine options
$rdf->use_dynamic_display(true),
$rdf->set_Options( array("image"=>"hidden", "textinput"=>"hidden") ),
// parse and display data
$rdf->parse_RDF("http://www.freshmeat.net/backend/fm-releases.rdf"),
$rdf->finish(),
?>
</body>
</html>
另一个要介绍的是由 Jason Williams 开发的 PHP RDF 分析器，可以在 http://www.nerdzine.net/php_rdf/下载。这是一个未经任何任何渲染的 PHP 类，实现了一些基本的方法。但是它包含的大量的属性，可以让你用来安排经过处理的数据，直到你满意为止。
<html>
<head>
<basefont face="Verdana">
</head>
<body link="Red" vlink="Red" alink="Red">
<?
include("rdf_class.php"),
// this needs to be a local file
$f = new rdfFile("./fm-releases.rdf"),
$f->parse(True),
$f->ReturnTable(True, "black", "white", "100%"),
?>
</body>
</html>
关于这些类的文档在他们各自的网站上都有介绍。
9)增加一点样式（Adding A Little Style）
万一你讨厌遍历那些 PHP 数组并把他们用 HTML 标记出来的方式，那么你也可以选择通过使用 XSLT 样式单来格式化和显示这些数据。PHP4 .1 可以通过新的 XSLT API 来支持 Sablotron XSLT 处理器，新的 API 可以用来合并一个 XSLT 样式单和一个 XML 文档（在这里，即 RDF 文件），从而非常容易的把 XML 标记转化为浏览器可读的 HTML 标记。
我不想在这上面讲的太细，你可以看一下 PHP 手册，或者关注一下本文后面的链接以获得更加详细的信息。不过我还是会给出一个简单的例子来说明这个问题。首先，给出样式单文件：
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:rss="http://purl.org/rss/1.0/"
xmlns:dc="http://purl.org/dc/elements/1.1/" version="1.0">
<!-- main page -->
<xsl:template match="/rdf:RDF">
<html>
<head>
<basefont face="Arial" size="2"/>
</head>
<body>
<xsl:apply-templates select="rss:channel" />
<ul>
<xsl:apply-templates select="rss:item" />
</ul>
</body>
</html>
</xsl:template>
<!-- channel -->
<xsl:template match="rss:channel">
<b>
<a>
<xsl:attribute name="href"><xsl:value-of select="rss:link"
/></xsl:attribute>
<xsl:value-of select="rss:title" />
</a>
</b>
</xsl:template>
<!-- item -->
<xsl:template match="rss:item">
<li />
<a>
<xsl:attribute name="href"><xsl:value-of select="rss:link"
/></xsl:attribute>
<xsl:value-of select="rss:title" />
</a>
<br />
<xsl:value-of select="rss:description" />
</xsl:template>
</xsl:stylesheet>
下面是 PHP 脚本，用来把上面的样式单和讲的“鲜肉”RDF 文档合并起来，生成一个 HTML 页面：
<?php
// XML file
// this needs to be a local file
$xml = "fm-releases.rdf",
// XSLT file
$xslt = "fm.xsl",
// create a new XSLT processor
$xp = xslt_create(),
// transform the XML file as per the XSLT stylesheet
// return the result to $result
$result = xslt_process($xp, $xml, $xslt),
if ($result)
{
// print it
echo $result,
}
// clean up
xslt_free($xp),
?>
我想这相当简单，无须再加说明。两个文档合并在一起，产生了下面的“合成物”：
这是把 RDF 数据转换成浏览器可读的 HTML 的另一种方法，或许简单一些（尽管并不是最理想的）。不过要注意一点，你需要运行一个外部程序来定期更新你的 RDF 文件的本地副本，原因在于 PHP XSLT 处理器访问远端文件可能有困难。
10)家庭作业（Homework）
如果你有兴趣对这些文中谈到的和没谈到的技术了解的更多，你可以考虑访问下面的链接：
RSS 1.0 规范：
http://www.purl.org/rss/1.0/
RSS 发展史：
http://backend.userland.com/stories/rss091
W3C 网站关于 RDF 的内容：
http://www.w3.org/RDF/
PHP 中关于 SAX 和 DOM 编程的讨论：http://www.devshed.com/Server_Side/XML/XMLwithPHP
用 PHP 实现 XSLT 转换的讨论：
http://www.devshed.com/Server_Side/XML/XSLTrans
关于 PHP 类的讨论：
http://www.devshed.com/Server_Side/PHP/BackToClass