root.elima.ru
Мертвечина
Статьи и книгиИнтернет-технологии и сетевое программирование

Спецификация RSS 2.0

(перевод RSS 2.0 Specification)

Алексей Бешенов

Этот текст является неофициальным вольным переводом стандарта и не имеет той же силы, что и оригинал.

Это – версия 2.0.9 спецификации RSS, опубликованной 5 июня 2007 года RSS Advisory Board. Последняя версия будет всегда доступна по адресу http://www.rssboard.org/rss-specification, также доступен список изменений и других версий.

1. Что такое RSS?

RSS – формат передачи веб-контента. Название технологии – акроним «Really Simple Syndication», то есть, «по-настоящему простая передача информации». Сводную историю формата можно найти по адресу http://www.rssboard.org/rss-history.

RSS – диалект XML. Все файлы RSS обязаны соответствовать спецификации XML 1.0, опубликованной на веб-сайте консорциума WWW (W3C).

На высшем уровне документ RSS представляет собой элемент <rss> с обязательным атрибутом version, указывающим версию RSS. Если документ соответствует этой спецификации, значение этого атрибута должно быть «2.0». Дочерний элемент <rss> – один элемент <channel>, который включает информацию о канале (метаданные) и его содержимое.

2. Примеры файлов

С сайта RSS Board доступны примеры файлов для RSS 0.91, 0.92 и 2.0.

Отметим, что примеры файлов могут указывать на документы и сервисы, которые более не существуют.

3. Об этом документе

Этот документ представляет статус RSS на конец 2002 года – версию 2.0.1.

Описаны все изменения и добавления, начиная с основной спецификации RSS 0.91 (июнь 2000 г.), и новые возможности, появившиеся в RSS 0.92 (декабрь 2000 г.) и RSS 0.94 (август 2002 г.).

Заметки об изменениях можно найти по адресу http://www.rssboard.org/rss-change-notes.

Для начала мы опишем обязательные и необязательные дочерние элементы <channel>, далее – дочерние элементы <item>. Завершающие разделы отвечают на распространенные вопросы, рассказывают о планах на последующие версии и дают рекомендации по расширению RSS.

4. Элементы канала

Обязательные элементы канала

title
Название канала, по которому люди будут ссылаться на сервис. Если у вас есть веб-сайт, который содержит ту же информацию, что и RSS-файл, элемент title канала должен совпадать с title заглавной веб-страницы.
(Заголовки новостей GoUpstate.com)
link
URL веб-сайта, связанного с каналом.
(http://www.goupstate.com/)
description
Фраза или предложение для описания канала.
(Последние новости GoUpstate.com, веб-сайта Spartanburg Herald-Journal.)

Необязательные элементы канала

language
Язык, на котором написан канал. Позволяет сборщикам, к примеру, объединить на одной странице все сайты на итальянском. Перечень допустимых значений элемента, предоставленный Netscape – http://www.rssboard.org/rss-language-codes. Также можно использовать значения, определенные W3C.
(en-us)
copyright
Информация об авторском праве на канал.
(Copyright 2002, Spartanburg Herald-Journal)
managingEditor
Адрес электронной почты человека, ответственного за редакторский текст.
(geo@herald.com (Джордж Матеский))
webMaster
Адрес электронной почты человека, ответственного за технические аспекты канала.
(betty@herald.com (Бетти Гернси))
pubDate
Дата публикации текста в канале. Например, «New York Times» выходит ежедневно и дата публикации меняется каждые 24 часа, тогда и меняется pubDate канала. Дата и время в RSS соответствуют спецификации RFC 822, за исключением того, что год может представляться двумя или четырьмя цифрами (последнее предпочтительно).
(Sat, 07 Sep 2002 00:00:01 GMT)
lastBuildDate
Время Последнего изменения содержимого канала.
(Sat, 07 Sep 2002 09:42:31 GMT)
category
Указывает одну и более категорию, к которой относится канал. Следует тем же правилам, что и элемент category в <item>.
(<category>Newspapers</category>)
generator
Строка определяет использованную для создания канала программу.
(MightyInHouse Content System v2.3)
docs
URL, указывающий на документацию для использованного в файле RSS формата (например, на данную страницу). Это для людей, которые могут столкнуться через 25 лет с RSS-файлом на веб-сервере и захотят узнать, что же это такое.
(http://www.rssboard.org/rss-specification)
cloud
Указывает веб-сервис, поддерживающий интерфейс rssCloud.
(<cloud domain="rpc.sys.com" port="80" path="/RPC2" registerProcedure="pingMe" protocol="soap"/>)
ttl
Время жизни; количество минут, на которые канал может кешироваться перед обновлением с ресурса.
(<ttl>60</ttl>)
image
Изображение GIF, JPEG или PNG, которое может отображаться с каналом.
rating
Рейтинг канала PICS.
textInput
Поле текстового ввода, которое может отображаться с каналом.
skipHours
Совет сборщикам каналов о том, какие часы можно пропустить.
skipDays
Совет сборщикам каналов о том, какие дни можно пропустить.

4.1. <image>

<image> – дочерний элемент <channel>, содержащий три обязательных и три дополнительных элемента.

<url>
URL изображения GIF, JPEG или PNG, представляющего канал.
<title>
Описание изображения, которое будет использовано в атрибуте alt элемента HTML img, когда канал будет показан в гипертексте.
<link>
URL сайта; изображение канала будет служить ссылкой на этот сайт. (Как правило, <title> и <link> изображения должны совпадать с <title> и <link> канала.

Необязательные элементы – <width> и <height>, задающие ширину и высоту изображения в пикселях. <description> содержит текст, включаемый в атрибут title ссылки, сформированной вокруг изображения в HTML-отображении.

Максимальная ширина – 144, по умолчанию – 88.

Максимальная высота – 400, по умолчанию – 31.

4.2. <cloud>

<cloud> указывает веб-сервис, поддерживающий интерфейс rssCloud, который может реализовываться через HTTP-POST, XML-RPC или SOAP 1.1 и реализует подписку на обновления канала.

<cloud domain="rpc.sys.com" port="80" path="/RPC2"
registerProcedure="myCloud.rssPleaseNotify" protocol="xml-rpc" />

В этом примере для запроса уведомления нужно отправить сообщение XML-RPC на rpc.sys.com, порт 80, путь /RPC2. Вызываемая процедура – myCloud.rssPleaseNotify.

Полное объяснение этого элемента и интерфейса rssCloud: http://www.rssboard.org/rsscloud-interface.

4.3. <ttl>

ttl указывает количество минут, на которые канал может кешироваться до следующего обновления из источника. Это позволяет ресурсам RSS управляться сетями файлообмена вроде Gnutella.

Пример:

<ttl>60</ttl>

4.4. <textInput>

Элемент канала может содержать необязательный элемент <textInput>, в свою очередь состоящий из четырех обязательных элементов.

<title>
Заголовок кнопки отправки текста из поля ввода.
<description>
Описание поля ввода.
<name>
Название текстового объекта в поле ввода.
<link>
URL CGI-скрипта, который обрабатывает запросы текстового ввода.

Назначение элемента <textInput> загадочно; его можно использовать, чтобы вставить строку поиска или читательских отзывов, но большинство сборщиков его игнорируют.

5. Элементы <item>

Канал может содержать любое количество статей, элементов <item>. Статья во многом похожа на публикацию в газете или журнале, <description> – это ее краткое изложение, а <link> указывает на полный текст. Статья может быть самодостаточной, в таком случае <description> содержит текст (можно использовать экранированную сущностями HTML-разметку, см. примеры), а ссылка (<link>) и заголовок (<title>) могут опускаться. Все элементы <item> являются необязательными, однако по крайней мере <title> или <description> должен существовать.

title
Заголовок сообщения.
(Venice Film Festival Tries to Quit Sinking)
link
URL сообщения.
(http://nytimes.com/2004/12/07FEST.html)
description
Краткий обзор сообщения.
(<description>Some of the most heated chatter at the Venice Film Festival this week was about the way that the arrival of the stars at the Palazzo del Cinema was being staged.</description>)
author
Адрес электронной почты автора сообщения.
category
Включает сообщение в одну или более категорий.
comments
URL страницы для комментариев, относящихся к сообщению.
enclosure
Описывает медиа-объект, прикрепленный к сообщению.
guid
Строка, уникальным образом идентифицирующая сообщение.
pubDate
Показывает, когда сообщение было опубликовано.
source
RSS-канал, из которого получено сообщение.

5.1. <source>

<source> содержит название канала-источника сообщения, полученное из его <title>. Имеет обязательный атрибут URL, ссылку на источник.

<source url="http://www.tomalak.org/links2.xml">Tomalak's
Realm</source>

Этот элемент должен передавать источники ссылок и новостей. Может использоваться в команде отправки сообщений в канал и должен автоматически генерироваться, когда сообщение пересылается от сборщика к средству редактирования блога.

5.2. <enclosure>

Имеет три обязательных атрибута

url
Адрес приложения, обязательно HTTP URL
length
размер приложения в байтах
type
тип приложения MIME
<enclosure url="http://www.scripting.com/mp3s/weatherReportSuite.mp3"
length="12216320" type="audio/mpeg" />

Пример использования элемента: http://www.thetwowayweb.com/payloadsforrss.

5.3. <category>

Необязательный атрибут <category> domain указывает на ресурс с классификацией.

Значение элемента – разделенная прямыми слэшами строка, определяющая иерархическое положение в указанной классификации. Процессоры могут устанавливать соглашения по интерпретации категорий.

<category>Grateful Dead</category>
<category domain="http://www.fool.com/cusips">MSFT</category>

Допускается произвольное число элементов для различных доменов и перекрестные ссылки в различных частях одного домена.

5.4. <pubDate>

Дата, задающая, когда сообщение было опубликовано. Если дата относится к будущему, то сообщение может не показываться до ее наступления.

<pubDate>Sun, 19 May 2002 15:21:36 GMT</pubDate>

5.5. <guid>

guid – уникальный на уровне канала строковый идентификатор статьи. Сборщик может использовать идентификаторы для выявления новых статей.

<guid>http://some.server.com/weblogItem3207</guid>

Синтаксис guid не определен.

Если для guid необязательный атрибут isPermaLink имеет значение true, то идентификатор рассматривается как постоянная ссылка на полную статью, описанную в элементе <item>:

<guid isPermaLink="true">http://inessential.com/2002/09/01.php#a2</guid>

По умолчанию значение isPermaLink равно true; если указано false, то guid не может рассматриваться как URL.

5.6. <comments>

Если элемент указан, то он содержит URL с комментариями к статье.

<comments>http://ekzemplo.com/entry/4403/comments</comments>

Дополнительная информация: http://backend.userland.com/weblogComments.

5.7. <author>

Элемент указывает адрес электронной почты автора сообщения. Для газет и журналов, распространяющих информацию в RSS, автором считается человек, написавший статью, которую описывает <item>. Для коллективных блогов author должен отличаться от контактов управляющего редактора или веб-мастера. Для блога с одним автором элемент author лучше опустить.

<author>lawyer@boyer.net (Lawyer Boyer)</author>

6. Примечания

RSS вводит ограничения на первые непробельные символы в данных элементов <link> и <url>. Данные должны начинаться с утвержденной IANA схемы URI, такой как http://, https://, news://, mailto: и ftp://. До RSS 2.0 спецификация позволяла только http:// и ftp://, но на деле другие схемы использовались авторами контента и поддерживались программным обеспечением. Сборщики могут иметь ограничения на поддерживаемые схемы URI. Разработчики контента не должны полагать, что всё ПО поддерживает любую схему.

В RSS 0.91 различные элементы ограничивались до 500 или 100 символов. Кроме того, в <channel> не могло быть более 15 сообщений <item>. Ограничения на длины строк отсутствуют, начиная с RSS 0.92. Процессоры могут налагать свои ограничения, а генераторы могут иметь опции, ограничивающие количество <item> в канале, либо длины строк.

В RSS 2.0 предусмотрено связывание канала со своим идентификатором в системе каталогизации при помощи элемента category, описанного выше. Например, чтобы связать канал с его идентификатором Syndic8, включите в <channel> элемент category со свойством domain="Syndic8", и значение идентификатора канала в базе данных Syndic8:

<category domain="Syndic8">1765</category>

Часто возникает вопрос касательно элементов <guid>: это не одно и то же, что и <link>? В некоторых системах, предоставляющих контент, это так, в других – нет. В ряде систем <link> является постоянной ссылкой на запись блога; в других – ссылкой на полный текст (если в <item> содержится краткое изложение), а на запись в блоге ведет <guid>. В любом случае, рекомендуется, чтобы вы указывали guid, и, если возможно, он был постоянной ссылкой. Это позволяет сборщикам не повторять записи, даже если они редактировались.

Если у вас есть вопросы о формате RSS 2.0, вы можете задать их в списке рассылки RSS Advisory Board RSS-Public, который служит для поддержки пользователей, авторов и разработчиков.

7. Расширение RSS

RSS, появившийся в 1999 г., стремился стать простым и легким для понимания форматом с относительно простыми целями. После того, как он приобрел популярность, разработчики пожелали расширить его модулями, определенными в пространствах имен XML.

Канал RSS 2.0 может содержать элементы и атрибуты, не упомянутые на этой странице, только если они определены в пространствах имен.

Элементы из этого документа не являются членами пространств имен, так что RSS 2.0 сохраняет совместимость с прежними версиями: файл версии 0.91 или 0.92 является валидным файлом версии 2.0. Если бы элементы RSS 2.0 включались в пространство имен, это ограничение не выполнялось бы, файл RSS 0.9x не был бы верным файлом RSS 2.0.

8. Планы

RSS не является идеальным форматом, но он очень распространен и широко поддерживается. Долгое время RSS нуждался в установившейся спецификации. Данная работа призвана помочь формату стать неизменным, дабы стимулировать рост рынка связанных разработок и расчистить путь для новшеств в более современных форматах передачи контента. Мы ожидаем выхода дальнейших версий спецификации только для внесения ясности в текст, но не добавления в формат новых возможностей. Последующая работа связана с модулями, использующими пространства имен и совершенно иными форматами с другими названиями.