Работа с RSS и Atom
139C# и .NET --- Сетевое программирование --- Работа с RSS и Atom
Часто возникает желание публиковать какие-то структурированные данные, которые время от времени изменяются. Сегодня на многих веб-сайтах присутствуют значки RSS (Really Simple Syndication — действительно простая синдикация) и Atom (Another Syndication Format — еще один формат синдикации), которые позволяют подписываться на чтение каналов (и наш сайт не исключение). RSS представляет собой формат XML, позволяющий выполнять синдикацию (объединение) информации. Блоги сделали RSS очень популярным. На эту XML-информацию очень просто подписаться с использованием специальных средств для чтения RSS.
В наши дни RSS применяется не только с блогами, но и со многими другими источниками данных, такими как онлайновые журналы новостей. Любые данные, которые изменяются с течением времени, могут предоставляться посредством RSS или появившегося после него протокола Atom. Продукты Microsoft Internet Explorer и Microsoft Outlook обладают встроенными инструментами для чтения данных RSS и Atom.
Пространство имен System.ServiceModel.Syndication
Пространство имен System.ServiceModel.Syndication является частью Windows Communication Foundation (WCF) и содержит расширение для поддержки средств синдикации. В этом пространстве имен предлагаются классы, служащие для чтения и записи каналов RSS и Atom.
Технология RSS получила свое нынешнее название лишь после выхода версии RSS 2.0. В предыдущих версиях она называлась Resource Description Framework (RDF) Site Summary и Rich Site Summary. Первая версия RDF была создана компанией Netscape для описания содержимого ее портального сайта. Она прославилась тогда, когда в издательстве New York Times в 2002 г. с ее помощью начали предлагать читателям возможность подписываться на RSS-каналы новостей.
Формат синдикации Atom был разработан после RSS, и предложен в качестве стандарта в документе RFC 4287. Главное отличие между RSS и Atom связано с видом содержимого, которое может определяться вместе с элементом.
В RSS внутри элемента описания может содержаться как простой текст, так и текст в формате HTML, тип которого не играет никакой роли для считывающего приложения. В Atom для содержимого должен быть определен конкретный тип с помощью атрибута типа, а также разрешено использовать XML-содержимое с определенными пространствами имен.
На рисунке ниже показан логотип, который применяется для представления каналов RSS и Atom. Если на веб-сайте присутствует такой логотип, значит, на нем предлагается какой-нибудь канал RSS или Atom:
В следующей таблице перечислены классы и элементы, которые можно применять для создания синдицируемого канала. Эти классы не зависят от типа синдикации, RSS или Atom:
Класс | Описание |
---|---|
SyndicationFeed | Класс SyndicationFeed представляет элемент самого высокого уровня в канале. В случае Atom таковым является <feed>, а в случае RSS — элемент <rss>. Статический метод Load() позволяет читать канал с использованием XmlReader. Свойства этого класса, такие как Authors, Categories, Contributors, Copyright, Description, ImageUrl, Links, Title и Items, позволяют определять дочерние элементы. |
SyndicationPerson | Класс SyndicationPerson представляет персону с помощью свойств Name, Email и Uri, которая может быть присвоена коллекциям Authors и Contributors. |
SyndicationItem | Любой канал состоит из множества элементов. Свойства элемента включают Authors, Contributors, Copyright и Content. |
SyndicationLink | Класс SyndicationLink представляет ссылку внутри канала или элемента. Имеет свойства Title и Uri. |
SyndicationCategory | Элементы в канале могут группироваться по категориям. Ключевые слова категории могут быть установлены в свойствах Name и Label класса SyndicationCategory. |
SyndicationContent | SyndicationContent — это абстрактный базовый класс, который описывает содержимое элемента. Содержимым может быть HTML, простой текст, XHTML, XML или URL. Содержимое описывается с помощью конкретных классов TextSyndicationContent, UrlSyndicationContent и XmlSyndicationContent. |
SyndicationElementExtension | С помощью элемента расширения можно добавлять дополнительное содержимое. Класс SyndicationElementExtension может использоваться для добавления информации в канал, категорию, объект, персону, ссылку и элемент. |
Для назначения каналу формата RSS и Atom можно использовать классы, унаследованные от SyndicationFeedFormatter и SyndicationItemFormatter. В .NET 4 для форматирования каналов предназначены классы Atom10FeedFormatter и Rss20FeedFormatter, а для форматирования содержащихся в них элементов — классы Atom10ItemFormatter и Rss20ItemFormatter.