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

1)名誉和巨大的财富
设想一个从最热门的门户网站获得最新的新闻的站点。股票价格，天气信息，新闻故事，线式讨论组，软件发布……所有这一切都将被动态更新，每小时一次，不需要任何手工干预。我们可以想象这随之而来的站点访问量，源源不断的广告收入以及网管大人所受到的“阿谀奉承”。
但是现在，停止幻想，开始阅读，因为只要你密切关注此项技术，说不定你就能成为站点的主人。 对你的要求也只是稍许的想象力，一些聪明的 PHP 编码和几个免费的 RSS 文件。另外，很明显还包括这篇文章剩下的九个部分。
2)有内容，就联合成辛迪加（Have Content, Will Syndicate）
我们从最基本的开始——那么 RSS 究竟是什么鬼东西呢？
RSS（即 RDF Site Summary）是一种格式，最早由 Netscape 公司设计，用于分发其门户站点 My.Netscape.Com 上的内容的描述信息。自 1997 年被提出以来，几经沉浮——可以点击文章末尾的链接，了解一下 RSS 悠久复杂的历史。现在的稳定的版本是 RSS1.0，符合 RDF 规范。这一版本可以说即轻便又功能齐全。
RSS 使得网管及时公布和分发某一特定站点的特定位置的最新最有趣的内容的描述信息变的可能。 从新闻文章列表到股票市场数据或着是天气预报，所有这些信息都可以通过结构良好的 XML 文档来发布，从而也可以被任何 XML 分析器进行分析，处理和翻译。
网站上最新信息的列表是经常更新的，而 RSS 使得这一列表的分发成为可能，也就为 Web 上简易的内容辛迪加联合打开了大门。想了解这其中的道理，请看下面这个简单的例子：
站点 A，属新闻站点（“内容辛迪加组织者”），能够每小时发布一个包含最新新闻列表以及相应链接的 RSS 文档。 而这一 RSS 文档可以被其它站点获取（如站点 B，“内容收集者”），分析并显示在站点 B 的索引页面上。 每次站点 A 发布一个新的 RSS 文档，站点 B 的索引页面都可以自动更新，以获取最新的新闻。
这种方案对交易中的双方机构都有效。 既然 RSS 文档中的链接都指向站点 A 上相应的文章，那么站点 A 将迅速体验到访问量的增加。 而站点 B 的网管可以休假一个星期，因为他有办法自动更新其站点上的索引页面，而这一方法仅仅是把索引页面与站点 A 发布的动态内容相连接而已。
有许多受欢迎的站点向公众提供详细的 RSS 或 RDF 新闻，如 Freshmeat（http://www.freshmeat.net）和 Slashdot（http://www.slashdot.org），当然还有其它许多站点。在这篇文章当中，我将广泛的使用 Freshmeat 网站的 RDF 文件。需要说明的一点是，这里所谈到的技术也可以应用于其它任何 RSS1.0 或 RDF 文件。
3)交换频道（Switching Channels）
典型的 RSS 文档包含一个由描述性元数据标记出来的资源列表（URLs），请看下面的例子：
<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns="http://purl.org/rss/1.0/">
<channel rdf:about="http://www.melonfire.com/">
<title>Trog</title>
<description>Well-written technical articles and
tutorials on Web technologies</description>
<link>http://www.melonfire.com/community/columns/trog/</link>
<items>
<rdf:Seq>
<li
rdf:resource="http://www.melonfire.com/community/columns/trog/article.ph
p?id
=100" />
<li
rdf:resource="http://www.melonfire.com/community/columns/trog/article.ph
p?id
=71" />
<li
rdf:resource="http://www.melonfire.com/community/columns/trog/article.ph
p?id
=62" />
</rdf:Seq>
</items>
</channel>
<item
rdf:about="http://www.melonfire.com/community/columns/trog/article.php?i
d=10
0">
<title>Building A PHP-Based Mail Client (part 1)</title>
<link>http://www.melonfire.com/community/columns/trog/article.php?id=100
</li
nk>
<description>Ever wondered how Web-based mail clients
work? Find out here.</description>
</item>
<item
rdf:about="http://www.melonfire.com/community/columns/trog/article.php?i
d=71">
<title>Using PHP With XML (part 1)</title>
<link>http://www.melonfire.com/community/columns/trog/article.php?id=71<
/link>
<description>Use PHP''s SAX parser to parse XML data and
generate HTML pages.</description>
</item>
<item
rdf:about="http://www.melonfire.com/community/columns/trog/article.php?i
d=62">
<title>Access Granted</title>
<link>http://www.melonfire.com/community/columns/trog/article.php?id=62<
/link>
<description>Precisely control access to information
with the mySQL grant tables.</description>
</item>
你可以看到，RDF 文件由几个界限分明的部分组成。首先是文档序码（prolog），
<?xml version="1.0" encoding="UTF-8"?>
然后是根元素中的名称空间声明。
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns="http://purl.org/rss/1.0/">
接着是<channel>部分，这部分包含了 RDF 所要描述的频道的一般信息。在上面的例子中，频道是 Melonfire 网站的 Trog 专栏，专栏内容是新的技术文章和指南，每星期更新一次。
<channel rdf:about="http://www.melonfire.com/">
<title>Trog</title>
<description>Well-written technical articles and
tutorials on Web technologies</description>
<link>http://www.melonfire.com/community/columns/trog/</link>
<items>
<rdf:Seq>
<li
rdf:resource="http://www.melonfire.com/community/columns/trog/article.ph
p?id
=100" />
<li
rdf:resource="http://www.melonfire.com/community/columns/trog/article.ph
p?id
=71" />
<li
rdf:resource="http://www.melonfire.com/community/columns/trog/article.ph
p?id
=62" />
</rdf:Seq>
</items>
</channel>
<channel>区包含了一个<items>区块，<items>区块又包含了文档中描述的所有资源的一个顺序列表。该列表通过一系列的<li />元素来表示。区块中每一个资源都在后面的<item>区块中有更详细的描述。
<items>
<rdf:Seq>
<li
rdf:resource="http://www.melonfire.com/community/columns/trog/article.ph
p?id
=100" />