使用 XML: 扩展 RSS 的能力

2024-03-28 00:58
文章标签 xml 使用 扩展 能力 rss

本文主要是介绍使用 XML: 扩展 RSS 的能力,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

相对于它的受欢迎程度,RSS 标准惊人的简单,甚至可以说有限。RSS 没有假装能做很多东西,但被设计成能够通过 RSS 模块扩展。本文介绍了三种流行的 RSS 扩展,并说明如何设计您自己的扩展。

RSS 简单却并不有限

RSS 这个缩写词有很多含义:真正简单的联合(Really Simple Syndication)、丰富站点摘要(Rich Site Summary)、RDF 站点摘要( RDF Site Summary),可能还有其他的说法。实际上,RSS 就是在越来越多的网站(包括 developerWorks)上出现的那个桔红色按钮。

通过 RSS 提要可以订阅站点并在更新的时候得到通知。RSS 和电子邮件订阅有两个重要的区别:

  • RSS 需要特定的客户机,即 RSS 阅读器,不过将逐渐包括到 Web 浏览器中。
  • RSS 保护用户的秘密,与电子邮件不同,不用在站点上交换个人信息。

 

RSS 101

编写您的第一个 RSS 文件再简单不过了。根 RSS 元素称为 rss(非常合适)。后面紧跟着的是 channel 元素。

channel 元素首先包含关于新闻提要的描述。它至少要包括一个提要标题(title)、到相关网站的链接(link)和提要描述(description)。

其他元素是可选的。最常用的有提要语言(language)、发布日期(pubDate)、分类(category)和有效期(ttl),即频道缓存的分钟数。

经常还会包括 docs 元素,这个元素有点特殊docs 元素指向 RSS 文档,因此必须与每个 RSS 文档的值相同。

频道描述之后是一个 item 元素列表,每项代表一个新闻事件。

什么称得上新闻?这取决于站点和应用程序。对于一般的网站,项(item)可能表示页面的一次重要更新;对于播客(podcast),就是一段新的插话;对于网络监控应用程序,就是一次网络警报;对于论坛,就是一个新的帖子。

item 的内容与频道本身类似:titlelinkdescription。可能有更详细的日期、到多媒体内容的链接(enclosure)、来源和注释。

要在描述中包含 HTML 标记必须对其进行转义(通常使用 CDATA 节)。

值得注意的是 guid 元素,一个特殊的标识符。表示的时候,RSS 依靠它标识新的项。如果没有 GUID,阅读器必须比较项标题和内容来查找新的项。

清单 1 给出了 RSS 提要的一个例子:


清单 1. RSS 提要
<rss version="2.0">
<channel>
<title>Marchal.com</title>
<link>http://www.marchal.com/</link>
<description>Marchal's site.</description>
<docs>http://blogs.law.harvard.edu/tech/rss</docs>
<language>en</language>
<copyright>Copyright 2006, Benoit Marchal.</copyright>
<pubDate>Fri, 30 Jun 2006 00:35:40 +0200</pubDate>
<item>
<title>Online photos</title>
<link>http://www.marchal.com/en/photos</link>
<description><![CDATA[<p>In 2002 I added a digital camera to my
writer toolbox. I have used it to illustrate my articles and web
sites.</p>
<p>While I had some experience with film-based photos, I was
new to digital images. Most of the things I knew were
still valid, others I had to re-learn. There was
a lot of new material as well. These pages summarize
my findings.</p>]]></description>
<pubDate>Fri, 30 Jun 2006 00:35:40 +0200</pubDate>
<category>photo</category>
<category>2002</category>
<guid isPermaLink="false">photos</guid>
</item>
</channel>
</rss>

为了订阅提要,访问者需要一个 RSS 阅读器。简言之,阅读器定期下载 RSS 文件,如果发现新项就通知用户。

两种主流浏览器中内置了 RSS 阅读器:Firefox 1.5、Internet Explorer 7,Safari 也带有一个 RSS 阅读器。还有独立的阅读器,比如 NewsGator 的阅读器。此外,对于那些不喜欢安装新软件的人来说,可以通过聚合站点(如 Google Reader 和 NetVibes)阅读提要。甚至还有 RSS 和电子邮件之间的桥梁,如 Zookoda。

除了本节所述的之外,RSS 还定义了其他元素。完整的规范请参阅 参考资料。

RSS 的能力

一句话,需要共享信息或者通知用户的宿主应用程序或网站能够从 RSS 提要中获益。事实上,RSS 的应用像野火一样蔓延得很快。

大量的应用也带来了一些问题。一些开发人员抱怨说不得不把概念硬塞进项中,而后者的局限性太大。为了解决这种局限性,RSS 2.0 被设计成了一种可扩展的语言。规则很简单:RSS 元素本身没有名称空间(与 RSS 0.92 保持向后兼容),但是允许开发人员在自己的名称空间增加元素来扩展 RSS。

如果标记具有名称空间,RSS 阅读器就会尝试根据名称空间识别出扩展来。如果成功就能处理这些元素。否则简单地忽略这些元素。

因此,RSS 提供了一个基础,可以建立更强大的应用程序。这种机制的优点在于,对阅读器来说扩展是可选的,不能处理某个扩展的阅读器仍然可以有效地处理核心 RSS 规范。

关于名称空间的说明

在继续后面的讨论之前,我先来揭穿关于名称空间的一些神话。奇怪的是,W3C 发布名称空间推荐标准七年之后,仍然存在着很多误解,而且不幸的是,还体现在一些 RSS 阅读器没有正确地实现标准。

名称空间是为需要在一个核心元素集上扩展的词汇表设计的,比如 RSS。具体而言,如果两个不同的扩展使用意义有别的同一个 XML 元素,名称空间可以防止名称冲突。

由于扩展是独立开发的,出现重复使用的名称只是一个时间问题。比如 “key” 这个词。它可能是数据库中的键,也可能是加密中的密钥。

为了消除歧义,名称空间 将元素名分为本地名和名称空间统一资源标识符(URI)。名称空间 URI 是扩展的惟一标识符。就其自身而言,本地名不能保证是惟一的,但本地名和名称空间 URI 结合起来可以做到。

我假设大部分读者都熟悉名称空间的语法。简单地说,xmlns 属性声明一个前缀并将其和名称空间 URI 联系起来。然后前缀又把名称空间 URI 和本地名联系起来。本地名和前缀之间使用冒号作为分隔符。清单 2 是一个例子:


清单 2. 名称空间声明
<dc:contributor xmlns:dc="http://purl.org/dc/elements/1.1/">
Marchal</dc:contributor>

实际上,名称空间有两点容易造成混乱:

  • 标识符是 URI 而且多数时候就是一个 URL。
  • 前缀和本地名的组合不能保证是惟一的。只有名称空间 URI 才能保证惟一性。

我将说明如何解决这两种错误。

首先,名称空间 URI。对于名称空间而言,URI 是严格的词汇表标识符而不是定义。因此,URI 指向何处没有关系。很多情况下,指向的源甚至不存在。

开发人员和用户虽然喜欢定义,但是他们认为在处理给定名称空间中的元素之前迫使应用程序下载文件是不能接受的。

很多应用程序在运行时仍然没有稳定的 Internet 连接。即便有 Internet 连接,下载文件会降低其速度,这一点也不总是允许的。况且如果网站(暂时)不能用怎么办?

此外,对于名称空间来说,需要的仅仅是一个标识符。

为什么用前缀呢?在每个标记上添上 URI 会增加文档的长度。于是引入了前缀作为缩短 URI 的一种办法。但是,前缀不能保证是惟一的(如果本地名不能保证这一点,有什么理由相信前缀会是惟一的,尤其是给出的前缀通常很短),所以必须引用 URI。

这就引出了 URI 的特殊性质,它们可作为惟一的标识符是因为大部分 URI 是 URL,而 URL 包含域名。只要使用自己拥有的域名定义名称空间就能保证惟一性,因为没有其他组织注册同一个域。

三种流行的扩展

为了具体了解扩展的工作原理,我们来看看三种常见的 RSS 扩展:

  • 用于元数据的 Dublin Core
  • 用于播客的 iTunes
  • 扩展了扩展的 Syndicated Photography

Dublin Core

Dublin Core 是一组元数据元素,最早是 RFC2413 定义的。Dublin Core 是资源搜索的最小元数据集。已经被用于 HTML(META 元素中)和各种 XML 词汇表。

Dublin Core 中的一些元素与 RSS 元素相同(比如 language),这是不可避免的,因为它是在 RSS 之前诞生的。但是这些重复也很有用,因为可以在频道或项上增加 Dublin Core 扩展。比如,RSS copyright 元素只能出现在频道层,但是可以把 Dublin Core rights 附加到每个项上。

Dublin Core 名称空间是 http://purl.org/dc/elements/1.1/

清单 3 中的例子在 RSS 中使用了 Dublin Core:


清单 3. RSS 中的 Dublin Core
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"> 
<channel>
<title>Marchal</title>
<link>http://www.marchal.com/</link>
<description>Personal site.</description>
<language>en</language>
<item>>
<title>Introduction</title>
<link>http://www.marchal.com/en/</link>
<description>Introduction to the site.</description>
<dc:creator>Marchal</dc:creator>
<dc:rights>Copyright 2001-2004 Marchal</dc:rights>
</item>
</channel>
</rss>

Dublin Core 扩展表明即使与 RSS 类似的元素也有自身的价值,可以提供更多的选择。

iTunes Music Store

iTunes 通过其 iTunes Music Store 提供了对播客的直接访问。为了在存储中集成播客,iTunes 用名称空间 http://www.itunes.com/dtds/podcast-1.0.dtd 定义了一个扩展。

iTunes 扩展非常值得注意,因为:

  • 在定义不同的时候,它没有逃避重新定义与 RSS 类似的元素(比如 itunes:image,iTunes 需要 300×300 像素的图像,而 RSS 规定最大宽度为 144)。
  • 定义了新元素来增强用户的可访问性(比如 itunes:duration 提供了播客的播放时间,而 RSS 只提供了文件长度)。

清单 4 中的 RSS 例子使用了 iTunes 扩展:


清单 4. 带有 iTunes 扩展的 RSS 提要
<rss xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
version="2.0">
<channel>
<title>Declencheur</title>
<link>http://www.declencheur.com/</link>
<description>Le podcast qui parle photos</description>
<docs>http://blogs.law.harvard.edu/tech/rss</docs>
<language>fr</language>
<copyright>? 2006, Benoit Marchal. Tous droits reserves.</copyright>
<pubDate>Wed, 24 May 2006 16:19:39 +0200</pubDate>
<itunes:author>Benoit Marchal</itunes:author>
<itunes:image href="http://www.declencheur.com/clic/medias/2006/dsc_7478.jpg"/>
<itunes:category text="Arts & Entertainment">
<itunes:category text="Photography"/>
</itunes:category>
<itunes:category text="International">
<itunes:category text="French"/>
<itunes:category text="Belgian"/>
</itunes:category>
<item>
<title>Histogramme</title>
<link>http://www.declencheur.com/clic/archives/2006/05/histogramme-visuel</link>
<description><![CDATA[<p><img alt="L'histogramme" height="225"
width="150" align="right" class="photo illustrationright" 
src="http://www.declencheur.com/clic/medias/2006/_dsc1808.jpg" />A mes yeux,
l'histogramme est un des progres les plus remarquables de la photographie sur
les dix dernieres annees. Un progres dans la precision de l'exposition au moins
aussi important que la mesure matricielle en son temps.</p>
<p>Les trois segments de l'episode sont (entre parentheses, le debut du
segment concerne) :</p>
<ol><li>(01:34) Elinchrom D-Lite, je suis particulierement enthousiaste
par l'arrivee de ces flashes electroniques de studio. Mes premieres
impressions.</li>
<li>(07:40) Histogramme, le theme principal de l'episode. Un
<a href="http://www.declencheur.com/clic/medias/2006/decl-2006-05-13.pdf"
target="_blank">complement visuel</a> est disponible.</li>
<li>(27:03) Vos commentaires, mes reactions : conseils pour la sauvegarde
et precisions sur l'impression jet d'encre. Merci de votre
soutien !</li></ol>
<p>Les liens presentes dans l'episode :</p>
<ul><li><a href="http://www.elinchrom.com"
target="_blank">Elinchrom</a></li>
<li><a href="http://www.foto-mueller.at" target="_blank">Foto
Mueller</a><br clear="right" /></li></ul>]]></description>
<pubDate>Mon, 15 May 2006 00:21:13 +0200</pubDate>
<category>numerique</category>
<category>technique</category>
<enclosure length="34722926" type="audio/mpeg"
url="http://www.declencheur.com/clic/medias/2006/decl-2006-05-14.mp3" />
<guid isPermaLink="false">histogramme</guid>
<itunes:duration>36:08</itunes:duration>
</item>
</channel>
</rss>

Syndicated Photography

Photocasting 意思是通过 RSS 提要分发照片。它与播客的原理相似,但传播的是图像而不是声音。初看起来,要用 RSS 提要分发照片,似乎使用 enclosure 元素就足够了。

聪明的照片浏览者首先下载缩略图,然后只下载用户请求的照片。但这不是 enclosure 的行为方式,因此 Pheed 只得定义包含这两个标记的扩展:photo:thumbnail(下载快的小图像)和 photo:imgsrc(完整的图像)。Pheed 是一个 RSS 聚合程序,为多媒体文档如图像提供了专门的支持。

有趣的是,照片也需要元数据,于是 Pheed 选择了 Dublin Core。因此,照片扩展建立在另一个扩展的基础上。避免了重复劳动因而提高了效率。

清单 5 是照片提要的一个例子。要注意其中声明了两个名称空间:


清单 5. 带有 Syndicated Photography 扩展的 RSS 提要
<?xml version="1.0" encoding="iso-8859-1"?>
<rss version="2.0" xmlns:photo="http://www.pheed.com/pheed/"
xmlns:dc="http://purl.org/dc/elements/1.1/"> 
<channel>
<title>Fun with photos</title>
<link>http://www.marchal.com/en/photos/</link>
<description>Photo humor.</description>
<language>en</language> 
<item>
<title>Journalist</title>
<link>http://www.marchal.com/en/photos/humour</link>
<description>He needs to fly</description>
<dc:creator>Marchal</dc:creator>
<dc:rights>Copyright 2004 Marchal</dc:rights>
<dc:format>digital</dc:format>
<dc:subject>Lego humor</dc:subject>
<photo:imgsrc>
http://www.marchal.com/en/photos/humour/phbd0001.jpg
</photo:imgsrc>
<photo:thumbnail>
http://www.marchal.com/images/shared/thbd0001.jpg
</photo:thumbnail>
</item>
</channel>
</rss>

定义自己的扩展

如果发现希望 RSS 再增加一项功能该怎么办?

  1. 要确保还不存在您需要的扩展。不要重新发明轮子,这会给 RSS 阅读器带来痛苦。
  2. 如果发现仍然需要开发自己的扩展,一定要遵循正确使用名称空间的规则。
  3. 如果根本不合适,不要害怕重新定义已有的元素(比如 itunes:image 与 RSS 自己的 image 虽然类似但不相同)。超负荷使用元素只能造成混乱。

RSS 是一种灵活的格式,但更重要的是,它可以作为很多需要广播或窄播(narrowcast)的应用程序的基础。感谢扩展机制,它的用处简直太大了。





回页首


参考资料

  • 参与论坛讨论。

  • RSS 简介(Vincent Lauria,developerWorks,2006 年 6 月):了解 RSS 和其他提要阅读器。还可以了解 RSS 如此流行的原因及其优点,以及提要阅读器的选择。

  • RSS 规范:可读性很强的规范。

  • Atom 1.0 Syndication Format 概述(James Snell,developerWorks,2005 年 6 月):Atom 可以作为 RSS 提要阅读器的替代品。

  • iTunes extensions:阅读这份简单的规范,了解准备 RSS 提要的提交过程和技术问题。

  • The Dublin Core:它是很多元数据标准的基础。

  • Pheed extension that builds on Dublin Core:了解 Pheeds —— 包含其他少数摄影相关元素的 RSS 文档。

  • IBM XML 1.1 认证:了解如何才能成为一名 IBM 认证的 XML 1.1 及相关技术的开发人员。

  • XML:developerWorks XML 专区提供了各种技术文章、技巧、教程、标准和 IBM 红皮书。

  • developerWorks 技术事件和网络广播:随时关注技术的最新进展。

 

关于作者

Benoit Marchal 的照片

Benoît Marchal 是一位顾问和作家,居住在比利时 Namur。他撰写了 XML by ExampleApplied XML SolutionsXML and the Enterprise。他创建了摄影播客 Declencheur

这篇关于使用 XML: 扩展 RSS 的能力的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/853966

相关文章

中文分词jieba库的使用与实景应用(一)

知识星球:https://articles.zsxq.com/id_fxvgc803qmr2.html 目录 一.定义: 精确模式(默认模式): 全模式: 搜索引擎模式: paddle 模式(基于深度学习的分词模式): 二 自定义词典 三.文本解析   调整词出现的频率 四. 关键词提取 A. 基于TF-IDF算法的关键词提取 B. 基于TextRank算法的关键词提取

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

Hadoop数据压缩使用介绍

一、压缩原则 (1)运算密集型的Job,少用压缩 (2)IO密集型的Job,多用压缩 二、压缩算法比较 三、压缩位置选择 四、压缩参数配置 1)为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器 2)要在Hadoop中启用压缩,可以配置如下参数

Makefile简明使用教程

文章目录 规则makefile文件的基本语法:加在命令前的特殊符号:.PHONY伪目标: Makefilev1 直观写法v2 加上中间过程v3 伪目标v4 变量 make 选项-f-n-C Make 是一种流行的构建工具,常用于将源代码转换成可执行文件或者其他形式的输出文件(如库文件、文档等)。Make 可以自动化地执行编译、链接等一系列操作。 规则 makefile文件

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个

pdfmake生成pdf的使用

实际项目中有时会有根据填写的表单数据或者其他格式的数据,将数据自动填充到pdf文件中根据固定模板生成pdf文件的需求 文章目录 利用pdfmake生成pdf文件1.下载安装pdfmake第三方包2.封装生成pdf文件的共用配置3.生成pdf文件的文件模板内容4.调用方法生成pdf 利用pdfmake生成pdf文件 1.下载安装pdfmake第三方包 npm i pdfma

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

科研绘图系列:R语言扩展物种堆积图(Extended Stacked Barplot)

介绍 R语言的扩展物种堆积图是一种数据可视化工具,它不仅展示了物种的堆积结果,还整合了不同样本分组之间的差异性分析结果。这种图形表示方法能够直观地比较不同物种在各个分组中的显著性差异,为研究者提供了一种有效的数据解读方式。 加载R包 knitr::opts_chunk$set(warning = F, message = F)library(tidyverse)library(phyl

git使用的说明总结

Git使用说明 下载安装(下载地址) macOS: Git - Downloading macOS Windows: Git - Downloading Windows Linux/Unix: Git (git-scm.com) 创建新仓库 本地创建新仓库:创建新文件夹,进入文件夹目录,执行指令 git init ,用以创建新的git 克隆仓库 执行指令用以创建一个本地仓库的