Извлечение данных из веб-ресурсов. Форматы представления данных в вебе

вторник, 22 февраля 2011, Александр Краковецкий

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

Содержание

  • Формат XML
  • Семантические форматы RDF / OWL / SPARQL
  • Форматы доставки данных RSS / Atom / OPML

XML

XML (от англ. eXtensible Markup Language — расширяемый язык разметки) — рекомендованный консорциумом W3C язык разметки. XML - это текстовый формат, предназначенный для хранения структурированных данных, а также для создания на его основе более специализированных языков разметки (XHTML, RSS, SOAP и др.). XML является упрощённым подмножеством языка SGML.

Формат XML является, пожалуй, самым распространенным форматом для хранения данных в сети.

Пример простого XML файла, описывающего страны и их столицы:

<?xml version="1.0" encoding="utf-8"?>
<Countries>
   <Country name=”Украина” capital=”Киев” />
   <Country name=”Россия” capital=”Москва” />
</Countries>

Особенности XML:

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

В .NET разбор и создание XML документов возможно одним из следующих способов.

Первый вариант - с помощью класса XmlDocument:

XmlDocument myXmlDocument = new XmlDocument();
myXmlDocument.Load ("books.xml");

Второй вариант - с помощью Linq To XML:

XDocument doc = new XDocument();
doc.Add(new XComment("This is a comment"));
doc.Add(new XElement("Root", "content"));
Console.WriteLine(doc);
// output
// <!--This is a comment-->
// <Root>content</Root>

Также можно использовать классы XmlReader и XmlTextReader.

На основании XML построены другие популярные форматы данных, которые мы рассмотрим ниже.

Семантические форматы RDF / OWL / SPARQL

Resource Description Framework (RDF) - разработанная консорциумом W3C технология семантической паутины, которое включает в себя среду описания ресурсов, определяет общую архитектуру метаданных и предназначенная для обеспечения совместимости метаданных с помощью общей семантики структуры и синтаксиса.

Пусть у нас есть некоторый текст:

Wells is the author of the book: The Invisible Man.

В формате RDF эта запись будет иметь вид:

<rdf>
  <Description about="http://www.xul.fr/Wells">
     <s:author>The Invisible Man</s:author>
  </Description>
</rdf>

Как можно увидеть, RDF - это все тот же XML формат, но который предназначен немного для других целей.

OWL (англ. Web Ontology Language) — язык описания онтологий для семантической паутины. Язык OWL позволяет описывать классы и отношения между ними, присущие для веб-документов и приложений. OWL основан на более ранних языках OIL и DAML+OIL и в настоящее время является рекомендованным консорциумом w3c.

Пример OWL разметки:

<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
         xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
         xmlns:owl="http://www.w3.org/2002/07/owl#"
         xmlns="http://www.xfront.com/owl/ontologies/camera/#"
         xmlns:camera="http://www.xfront.com/owl/ontologies/camera/#"
         xml:base="http://www.xfront.com/owl/ontologies/camera/">

    <owl:Ontology rdf:about="">
        <rdfs:comment>
        Camera OWL Ontology                           
      Author: Roger L. Costello                                   
        </rdfs:comment>
    </owl:Ontology>
</rdf:RDF>

Также необходимо упомянуть о SPARQL - языке запросов, с помощью которого можно делать запросы к семантическим хранилищам и получать данные в формате RDF.

Пусть имеем такую структуру файла:

alt text

Тогда имя автора блога можно получить с помощью такого запроса:

PREFIX foaf: <http://xmlns.com/foaf/0.1/>
SELECT ?url
FROM     <bloggers.rdf>
WHERE  {
    ?contributor foaf:name "Jon Foobar" .
    ?contributor foaf:weblog ?url .
}

Еще один пример - получение списка всех альбомов музыкальной группы:

   PREFIX mo: <http://purl.org/ontology/mo/>
   SELECT ?album
   WHERE 
   {
       ?album a mo:Record;
              mo:releaseType mo:album;
              dc:creator <http://zitgist.com/music/artist/65f4f0c5-ef9e-490c-aee3-909e7ae6b2ab>.
   }                
   ORDER BY ?album  

Еще примеры запросов можно посмотреть здесь. Также рекомендую ознакомиться с Semantic Web Development Tools.

Главной библиотекой для работы с семантическими ресурсами является библиотека LINQ to RDF. Она позволяет делать запросы к семантическим ресурсам, получать и обрабатывать данные, а также создавать собственные семантические объекты с помощью метатегов.

Пример запроса:

[Test]
public void SparqlQueryWithTheLot()
{
  var ctx = new MusicDataContext("http://musicdb.com/SparqlQuery.aspx");
  var q = (from t in qry
    where t.Year == "2006" &&
          t.GenreName == "History 5 | Fall 2006 | UC Berkeley"
    orderby t.FileLocation
    select new 
        {
          t.Title, 
          t.FileLocation
        })
    .Skip(10)
    .Take(5);

  foreach (var track in q)
  {
    Console.WriteLine(track.Title + ": " + track.FileLocation);
  }
}

Пример разметки класса:

[OwlResource(OntologyName = "Tasks", RelativeUriReference = "Project")]
public class Project : OwlInstanceSupertype
{
  [OwlResource(OntologyName = "Tasks", RelativeUriReference = "name")]
  public string Name { get; set; }
  [OwlResource(OntologyName = "Tasks", RelativeUriReference = "hasTask")]
  public EntitySet<Task> Tasks { get; set; }
  [OwlResource(OntologyName = "Tasks", RelativeUriReference = "usesResource")]
  public EntitySet<ProjectResource> ResourcesUsed { get; set; }
}

Поиск на codeplex.com показывает наличие большого количества дополнительных инструментов для работы с семантическими хранилищами и форматами. Вот несколько из них:

  • DMOZ Data Importer позволяет импортировать данные из Open Directory Project (ODP) в Microsoft SQL Server 2005;
  • NJena Semantic Web Framework - переписанная с Java библиотека для построения семантических веб-приложений, позволяет работать с форматами RDF, RDFS, OWL, языком SPARQL;
  • RTF DOM Parser позволяет строить DOM дерево на базе RTF документов.

Разработка и обработка семантических данных - непростая задача, требующая знания принципов организации семантических сетей и форматов представления данных.

RSS

В наше время трудно встретить сайты, которые не дают возможность подписаться на RSS-канал - удобное средство публикации новостей. Для чтения RSS лент написано большое количество софта - например, Google Reader, Яндекс Лента, feedly (список RSS-агрегаторов) и т.д. которые позволяют искать и читать новости, управлять своими подписками, а также комментировать и оценивать их.

В данный момент RSS расшифровывается как Really Simple Syndication и имеет версию 2.0. В более ранних версиях RSS означало:

  • Rich Site Summary (RSS 0.9x) — обогащённая сводка сайта;
  • RDF Site Summary (RSS 0.9 и 1.0) — сводка сайта с применением инфраструктуры описания ресурсов;

RSS является XML файлом, который имеет следующий формат:

<?xml version="1.0"?>
<rss version="2.0">
  <channel>
    <title>Liftoff News</title>
    <link>http://liftoff.msfc.nasa.gov/</link>
    <description>Liftoff to Space Exploration.</description>
    <language>en-us</language>
    <pubDate>Tue, 10 Jun 2003 04:00:00 GMT</pubDate>

    <lastBuildDate>Tue, 10 Jun 2003 09:41:01 GMT</lastBuildDate>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>Weblog Editor 2.0</generator>
    <managingEditor>editor@example.com</managingEditor>
    <webMaster>webmaster@example.com</webMaster>

    <item>
      <title>Star City</title>
      <link>http://liftoff.msfc.nasa.gov/news/2003/news-starcity.asp</link>
      <description>How do Americans get ready to work with Russians aboard the
        International Space Station? They take a crash course in culture, language
        and protocol at Russia's Star City.</description>
      <pubDate>Tue, 03 Jun 2003 09:39:21 GMT</pubDate>
      <guid>http://liftoff.msfc.nasa.gov/2003/06/03.html#item573</guid>
    </item>
  </channel>
</rss>

Кроме RSS популярными форматами являются Atom и OPML.

Для работы с Atom и RSS в C# предусмотрены классы SyndicationFeed, Atom10FeedFormatter, Rss20FeedFormatter:

SyndicationFeed feed = new SyndicationFeed("Feed Title", 
       "Feed Description", new Uri("http://Feed/Alternate/Link"), "FeedID", DateTime.Now);

// создание SyndicationFeed 

// сериализация в формат Atom 1.0
XmlWriter atomWriter = XmlWriter.Create("atom.xml");
Atom10FeedFormatter atomFormatter = new Atom10FeedFormatter(feed);
atomFormatter.WriteTo(atomWriter);
atomWriter.Close();

// сериализация в формат RSS 2.0
XmlWriter rssWriter = XmlWriter.Create("rss.xml");
Rss20FeedFormatter rssFormatter = new Rss20FeedFormatter(feed);
rssFormatter.WriteTo(rssWriter);
rssWriter.Close();

Для работы с RSS в ASP.NET можно также воспользоваться библиотекой ASP.NET RSS Toolkit.

В следующей статье рассмотрим форматы OData, JSON и микроформаты.

Компании из статьи


Яндекс Украина


Сайт:
http://yandex.ru/

Яндекс Украина У Яндекса в Украине три офиса — головной в Одессе, где сосредоточен управленческий аппарат и отдел продаж, и два офиса разработки — киевский, занимающийся разработкой и управлением украинскими проекта...

Microsoft Украина


Сайт:
http://www.microsoft.com/ukr/ua/

Microsoft Украина Украинское подразделение компании Microsoft.

Ищите нас в интернетах!

Комментарии

Свежие вакансии