欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

如何用PHP把RDF内容插入Web站点之中_PHP

程序员文章站 2022-04-18 11:05:49
...
名誉和巨大的财富

设想一个从最热门的门户网站获得最新的新闻的站点。股票价格天气信息新闻故事线式讨论组软件发布……所有这一切都将被动态更新每小时一次不需要任何手工干预。我们可以想象这随之而来的站点访问量源源不断的广告收入以及网管大人所受到的“阿谀奉承”。

但是现在停止幻想开始阅读因为只要你密切关注此项技术说不定你就能成为站点的主人。 对你的要求也只是稍许的想象力一些聪明的PHP编码和几个免费的RSS文件。另外很明显还包括这篇文章剩下的九个部分。



有内容就联合成辛迪加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新闻如Freshmeathttp://www.freshmeat.net)和Slashdot(http://www.slashdot.org),当然还有其它许多站点。在这篇文章当中,我将广泛的使用Freshmeat网站的RDF文件。需要说明的一点是,这里所谈到的技术也可以应用于其它任何RSS1.0或RDF文件。



交换频道(Switching Channels)

典型的RSS文档包含一个由描述性元数据标记出来的资源列表(URLs),请看下面的例子:

?>
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/


  • rdf:resource="http://www.melonfire.com/community/columns/trog/article.ph
    p?id
    =100" />
  • rdf:resource="http://www.melonfire.com/community/columns/trog/article.ph
    p?id
    =71" />
  • rdf:resource="http://www.melonfire.com/community/columns/trog/article.ph
    p?id
    =62" />




    rdf:about="http://www.melonfire.com/community/columns/trog/article.php?i
    d=10
    0">
    Building A PHP-Based Mail Client (part 1)

    http://www.melonfire.com/community/columns/trog/article.php?id=100

    nk>
    Ever wondered how Web-based mail clients
    work? Find out here.



    rdf:about="http://www.melonfire.com/community/columns/trog/article.php?i
    d=71">
    Using PHP With XML (part 1)

    http://www.melonfire.com/community/columns/trog/article.php?id=71/link>
    Use PHP's SAX parser to parse XML data and
    generate HTML pages.



    rdf:about="http://www.melonfire.com/community/columns/trog/article.php?i
    d=62">
    Access Granted

    http://www.melonfire.com/community/columns/trog/article.php?id=62/link>
    Precisely control access to information
    with the mySQL grant tables.



    你可以看到,RDF文件由几个界限分明的部分组成。首先是文档序码(prolog),

    ?>

    然后是根元素中的名称空间声明。

    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"
    />
    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>

    还可以在其中放置一个image>区块这样你就可以发布频道标志的URL。

    所以为了肉RSS1.0文档中的每一个item>区块都更详细地描述一个单独的资源包括标题URL和资源描述。

    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>

    在这个例子里item>区块描述了Ttrog“频道”中单独的一篇文章并为这篇文章提供了描述和标题以及URL。内容收集者可以利用URL创建“向后”链接。



    你看得到RSS1.0文件相当地直观明了不管是手工还是通过编程都非常容易创建。上面的例子和解释仅仅是说明性质的通常你可以用RSS1.0和RDF做更多的事情。你最好看一下文章末尾提供的链接以获取更多的信息。不过在这之前我们再花几分钟讨论一如何将RSS1.0文档插入到你自己的Web站点之中。