Что такое RSS?
RSS - это формат, предназначенный для публикации новостей на новостных и аналогичных им сайтах, начиная от таких ведущих новостных сайтов, как Wired, Slashdot, и кончая собственными сетевыми дневниками (weblog-ами). Но по сути, публиковать можно не лишь новости. буквально любой материал, который можно поделить на отдельные части, можно публиковать с поддержкой RSS: например, объявления о последних публикациях в "wiki", информация об обновлениях в CVS, история изменений, внесенных в книгу. в последствии того, как информация преобразована в формат RSS, программа, понимающая данный формат, может вытягивать сведения о внесенных изменениях и в зависимости от результата, например, автоматически предпринимать какие-либо действия.
Программы, умеющие работать с RSS, называются агрегаторами, и они слишком популярны между людей, ведущих сетевые дневники (weblog-и). кое-какие программы-дневники даже дают возможность другим делать комментарии к записям. И очень многие дневники умеют публиковать записи в формате RSS. Программа-агрегатор разрешает вам собирать все эти публикации вместе, и вы получаете вероятность одновременно наблюдать за появлением новых новостей на всех сайтах незамедлительно и декламировать их короткое содержание, не посещая каждый интернет-сайт в отдельности.
Программисты, будьте бдительны! Под термином "RSS" скрывается формат, который развалился на некоторое количество различных версий как минимум 2-х различных (но существующих одновременно) форматов. Исходный RSS, версию 0.90, разработали в фирмы Netscape. Это был формат, предназначенный для создания новостных порталов ведущих новостных компаний. Так как очень многие посчитали его чересчур сложным, фирма Netscape разработала больше простую версию - 0.91, которую, впрочем, забросила, потеряв любой интерес к бизнесу порталов. Но версия 0.91 была передана на поруки фирмы UserLand Software, которая намеревается использовать данный формат как основу для своих weblog-продуктов и иных web-приложений.
Тем временем, третья, уже некоммерческая организация, отколовшись от общего течения, сотворила новый формат, который, как полагалось, соответствует духу и принципам исходного формата RSS 0.90 (т.е. до того, как он был упрощен до 0.91). данный формат, основанный на языке RDF, назвали RSS 1.0. К сожалению, фирма UserLand не принимала участия в разработке этого нового формата, и как адвокат упрощенной версии 0.90 она не была счастлива, когда явился формат RSS 1.0. Вместо принятия этого формата UserLand решила взростить ветку 0.9х и сотворила версии 0.92, затем 0.93, 0.94 и в конце концов 2.0.
Вот такой винегрет.
Итак, есть 7 - лишь подумайте "7!" - разных форматов, и все они называются RSS. Как программисту, пишущему программу-агрегатор, вам будет необходимо сражаться со всеми этими форматами. Ну а какой формат избрать пользователю, публикующему свои новости в формате RSS?
Скажем, вы захотели составить программу, которая считывает новости в формате RSS, чтобы, например, публиковать заголовки новостей на своем сайте, или же чтобы сделать портал новостей и так далее. Как смотрится RSS-файл? Все зависит от того, о какой версии RSS идет речь. Вот образчик файла в формате RSS 0.91 (урезанная версия новостей с www.Xml.Com):
http://www.Xml.Com/
http://www.Xml.Com/pub/a/2002/12/04/normalizing.Html
http://www.Xml.Com/pub/a/2002/12/04/som.Html
http://www.Xml.Com/pub/a/2002/12/04/svg.Html
Все просто, правда? Блок новостей (channel) состоит из заголовка, ссылки, данных о языке новостей и описания. в последствии этого идет перечень самих новостей, где в каждом пункте указывается заголовок, гиперссылка и короткое описание новости.
Теперь давайте взглянем, как та же самая информация смотрится в формате RSS 1.0:
xmlns:rdf="http://www.W3.Org/1999/02/22-rdf-syntax-ns#" xmlns="http://purl.Org/rss/1.0/" xmlns:dc="http://purl.Org/dc/elements/1.1/" >
http://www.Xml.Com/
http://www.Xml.Com/pub/a/2002/12/04/normalizing.Html
http://www.Xml.Com/pub/a/2002/12/04/som.Html
http://www.Xml.Com/pub/a/2002/12/04/svg.Html
Довольно многословно, не так ли? Те, кто знаком с RDF, незамедлительно узнают, что данный файл - RDF-документ, сохраненный в XML. Остальные, разберутся, что в файле представлена вся та же информация, что и в первом примере. Мы лишь добавили ещё некоторую дополнительную информацию, как, например, авторство всякой новости, и дату публикации, коих нет в RSS 0.91.
Несмотря на то, что RSS 1.0 является смесью RDF и XML, структурно он схож с предыдущими версиями RSS - схож достаточно, дабы мы рассматривали его как обыкновенный XML-файл. следственно мы можем составить одну программу, которая умеет извлекать информацию из обоих форматов: и из RSS 0.91 и из RSS 1.0. впрочем есть все же некоторые различия, о коих ваша программа обязана знать:
В RSS 1.0 применяются пространства имен (namespaces). Пространство имен для RSS 1.0 смотрится так http://purl.Org/rss/1.0/. И это пространство имен принимается по умолчанию. помимо того в файле применяются пространства имен http://www.W3.Org/1999/02/22-rdf-syntax-ns# для элементов, специфичных для RDF (мы их также можем игнорировать), и http://purl.Org/dc/elements/1.1/ (Dublin Core) для дополнительных метаданных об авторах статей и датах публикаций.
Вы можете пойти двумя путями: в случае если ваш XML-парсер не осознает пространства имен, вы можете элементарно считать, что в файле применяются элементы с префиксами и слепо искать в них составляющие items и dc:creator. Такой метод сработает в множестве случаев, так как в новостях формата RSS 1.0 чаще всего применяется только пространство имен, принятое по умолчанию, и пространство имён Dublin Core. Конечно, этот способ - не элегантен, так как нет никаких гарантий, что в каких-нибудь новостях не станет использовано какое-либо другое пространство имен (что весьма легально с точки зрения RDF и XML). И ваш парсер пропустит все новости.
Если же ваш XML-парсер осознает пространства имен, вы можете построить больше изящное решение, которое сможет разобрать новости и формате 0.91 и в формате 1.0.
А как смотрится формат RSS 2.0? К счастью, для программ, понимающих форматы RSS 0.91 и 1.0, формат RSS 2.0 станет проще пареной репы.
http://www.Xml.Com/
http://www.Xml.Com/pub/a/2002/12/04/normalizing.Html
http://www.Xml.Com/pub/a/2002/12/04/som.Html
http://www.Xml.Com/pub/a/2002/12/04/svg.Html
Как демонстрирует данный пример, в RSS 2.0 также используются пространства имен, как и в RSS 1.0. Но это не RDF. Как и в RSS 0.91, нет пространства имен, принятого по умолчанию, а новости (в элементах item) помещены опять в элементе channel.
Перевод: Александр Качанов