Обзор XML: Firefox 2.0 и XML (исходники)

Уче Огбуйи (Uche Ogbuji)

На текущий момент Web-браузеры являются, пожалуй, наиболее распространенным типом программного обеспечения, выступая в роли платформы для работы других приложений. Мы наблюдаем всплеск активности по разработке приложений, в частности, вновь вернувшихся к использованию динамических HTML-технологий, таких как Асинхронный JavaScript и XML (Ajax), а также возобновление работы над Microsoft Internet Explorer. В серии статей developerWorks, посвященной поддержке XML в Firefox, были представлены функции версии 1.5, созданной на основе движка Mozilla Gecko 1.8. С тех пор, благодаря жесткой конкуренции в мире браузеров, появился Firefox 2.0 на основе Gecko 1.8.1. В новом релизе были затронуты и функции для работы с XML. О новинках мы расскажем в данной статье, а также подробно остановимся на одной потенциальной проблеме, о которой должны помнить разработчики.

Ослабленный контроль за Web-каналами

Одно из изменений в Firefox 2.0 несколько испугало пользователей. При публикации Web-канала, например RSS или Atom, можно добавить ссылку на страницу XSLT, которую браузер должен применить к XML-данным для отображения их в виде, удобном для пользователя. Пример использования XSLT-преобразования в канале Atom показан в листинге 1.

Листинг 1. Канал Atom со ссылкой на таблицу стилей XSLT

<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xml" href="atom2html.xslt"?>
<feed xmlns="http://www.w3.org/2005/Atom"
      xml:lang="en"
      xml:base="http://www.example.org">
  <id>http://www.example.org/myfeed</id>
  <title>Простая лента</title>
  <updated>2005-07-15T12:00:00Z</updated>
  <link href="/blog" />
  <link rel="self" href="/myfeed" />
  <author><name>Юч Огбуджи</name></author>
  <entry>
    <id>http://www.example.org/entries/1</id>
    <title>Простая запись в блоге</title>
    <link href="/blog/2005/07/1" />
    <updated>2005-07-14T12:00:00Z</updated>
    <summary>Это простая запись в блоге</summary>
  </entry>
  <entry>
    <id>http://www.example.org/entries/2</id>
    <title />
    <link href="/blog/2005/07/2" />
    <updated>2005-07-15T12:00:00Z</updated>
    <summary>Это простая запись без заголовка</summary>
  </entry>
</feed>

Ключевой является вторая строка, в которой содержатся инструкции по обработке (PI) - ссылка на страницу XSLT. Если загрузить данный канал в Firefox 1.5, то браузер честно загрузит atom2html.xslt и отобразит результаты преобразования. При этом, чтобы посмотреть XML-представление данных, вам придется загрузить исходный код страницы, как описывается во второй статье нашей серии. Отличие Firefox 2.0 заключается в том, что браузер игнорирует PI и всегда использует специальную страницу Firefox для отображения ленты. Пример такой страницы в Firefox 2.0.0.6 на Mac OS X показан на рисунке 1.

Рисунок 1. Отображение Web-канала в Firefox 2.0
 Editing session on Wikipedia, using WikEd

Единственный способ обойти данную проблему - это "обмануть" простой эвристический тест, который использует Firefox для проверки, являются ли данные Web-лентой. Для этого приходится подменять первые 512 байт файла и убирать оттуда строку "rss" или "feed". Зачастую можно просто вставить комментарий, как показано в листинге 2:

Листинг 2. Решение проблемы игнорирования XSLT в канале Atom для Firefox 2.0 и Internet Explorer 7

        
<?xml version="1.0" encoding="utf-8"?>
<!-- Firefox 2.0 и Internet Explorer 7 используют простой
 тест для обнаружения Web-лент и изменения желаемого отображения
 данных. Поэтому приходится использовать данный комментарий,
 что, к сожалению, расходует трафик. Комментарий необходим для
 того, чтобы новые версии этих браузеров применили XSLT-преобразование
 к XML-данным. Больше о данной проблеме можно узнать по следующей ссылке:
https://bugzilla.mozilla.org/show_bug.cgi?id=338621
-->
<?xml-stylesheet type="text/xml" href="atom2html.xslt"?>
<feed xmlns="http://www.w3.org/2005/Atom"
      xml:lang="en"
      xml:base="http://www.example.org">
<!-- Далее содержимое идентично приведенному в листинге 1 -->
</feed>

Эта проблема вызвала горячие споры среди пользователей. В итоге разработчики Firefox решили не менять данное решение, и подобное поведение браузера должно сохраниться в следующих версиях. Лично мне оно не нравится, но вы можете сформировать собственное мнение, прочитав обсуждение проблемы. Стоит также упомянуть, что подобным образом себя ведут браузеры Internet Explorer и Apple Safari.

Микрозаголовки

Микрозаголовки (Microsummaries или Live Titles) - это новая возможность Firefox 2.0, с помощью которой можно задавать инструкции для замены заголовков на фрагменты содержимого Web-страниц, например из закладок. Например, используя микрозаголовки c сайта IBM developerWorks, можно заменять статичный текст "developerWorks : IBM's resource for developers" на заголовок последней избранной статьи. Микрозаголовки могут предоставляться самим Web-сайтом или создаваться пользователем. Последний вариант, известный также под названием "генерация микрозаголовков", представляет особый интерес в контексте данной статьи, так как пользователю приходится самостоятельно использовать XML и XSL или же запускать ранее созданные генераторы. Пример такого генератора, извлекающего заголовок последней избранной статьи на developerWorks, показан в листинге 3.

Листинг 3. Генератор микрозаголовков для вставки названия избранной статьи на сайте IBM developerWorks

        
<?xml version="1.0" encoding="UTF-8"?>
<generator xmlns="http://www.mozilla.org/microsummaries/0.1" 
  name="IBM developerWorks featured article">
  <template>
    <xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
        xmlns:html="http://www.w3.org/1999/xhtml">
      <xsl:output method="text"/>
      <xsl:template match="/">
        <xsl:text>Featured article:</xsl:text>
        <!--  Если сайт широко использует идентификаторы,
         то данное выражение можно переписать в целях повышения
         эффективности -->
        <xsl:value-of select="//html:a[@class='feature'][1]"/>
      </xsl:template>
    </xsl:transform>
  </template>
  <pages>
    <include>http://www.ibm.com/developerworks/[a-zA-Z0-9]*/?</include>
  </pages>
</generator>

Код генератора содержит две секции: шаблон и информацию о странице. Шаблон представляет собой XSLT, применяемую к Web-странице для извлечения микрозаголовков. Сами страницы задаются с помощью элемента <pages>. Микрозаголовки - это не что иное, как обычный текст, поэтому и результатом применения XSLT будет также текст. Центральным местом в генераторе является XPath-выражение //html:a[@class='feature'][1], с помощью которого находится элемент, содержащий последнюю избранную статью. В секции pages используется регулярное выражение, благодаря которому поиск производится с главной страницы, содержащей ссылки на зоны, посвященные конкретным тематикам.

В настоящее время микрозаголовки поддерживаются только в браузерах Mozilla.

SAX и не только

Из функций, которые могут заинтересовать разработчиков модулей расширений к браузерам Mozilla, можно выделить SAX-парсер, относящийся к компонентной системе XPCOM. Таким образом, можно создавать расширения, эффективно обрабатывающие XML-данные в случае, если недоступны более высокоуровневые средства. Интеграция с XPCOM означает, что SAX-события можно теперь обрабатывать на C++, JavaScript, а также на любом языке, совместимом с XPCOM.

OpenSearch

OpenSearch - это стандарт XML, разработанный в инкубаторе Amazon A9. Он определяет несколько форматов XML и другие правила, позволяющие описывать и использовать поисковые сервисы. Firefox всегда предоставлял поддержку расширений поисковых движков, а благодаря поддержке OpenSearch в Firefox 2.0 возможности поиска могут быть дополнены средствами также совместимыми с Internet Explorer и другими браузерами.

В настоящее время Firefox поддерживает OpenSearch 1.1, который пока находится в фазе бета-тестирования, поэтому возможно понадобятся обновления, для обеспечения дальнейшей совместимости Firefox и OpenSearch. В листинге 4 показан пример документа OpenSearch, описывающего поиск на сайте IBM developerWorks.

Листинг 4. XML-документ, описывающий поиск на сайте IBM developerWorks с помощью OpenSearch

        
<?xml version="1.0" encoding="UTF-8"?>
<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/">
      <ShortName>IBM developerWorks search</ShortName>
      <Description>Search IBM developerWorks zones</Description>
      <Tags>xml java architecture</Tags>
      <InputEncoding>utf-8</InputEncoding>
      <Contact>https://www.ibm.com/developerworks/secure/feedback.jsp</Contact>
      <!-- Значение атрибута template перенесено на следующую строку
           после символа ? в целях форматирования -->
      <Url type="text/html" 
       template="http://www.ibm.com/developerworks/views/xml/libraryview.jsp?
search_by={searchTerms}"/>
      <Attribution>All content Copyright 2007, IBM developerWorks</Attribution>
</OpenSearchDescription>

В документе сказано, что поиск на сайте IBM developerWorks находится по адресу

http://www.ibm.com/developerworks/views/xml/libraryview.jsp?search_by={searchTerms}
 

При этом {searchTerms} является параметром шаблона, который при поиске должен заменяться на ключевые слова. Таким образом, для поиска по словам "Firefox XML" должен использоваться следующий URL:

http://www.ibm.com/developerworks/views/xml/libraryview.jsp?search_by=Firefox+XML
 

Система URL-шаблонов определена в спецификации OpenSearch. Кроме этого, спецификация определяет правила выдачи результатов поиска в виде лент RSS 2.0 или Atom 1.0, а также нескольких специальных расширений. В настоящее время Firefox не поддерживает такую возможность, поэтому любое описание поискового сервиса, не содержащее элемент Url с типом содержимого type="text/html", приведет к ошибке. Данное ограничение несколько разочаровывает, но, скорее всего, является простым следствием того, что большинство пользователей по-прежнему используют поиск через HTML-формы и страницы результатов, нежели с помощью механизмов Web 2.0.

В Firefox 2.0 описания OpenSearch, подобные примеру в Listing 4, выступают в роли полноценного модуля расширения поиска. Описания могут предоставляться Web-сайтами с помощью ссылок в заголовках страниц, таких как:

<link rel="search" type="application/opensearchdescription+xml" 
title="IBM developerWorks" 
href="/path/to/opensearch/description/document.xml"/>

Замечание: Каждый из трех приведенных выше примеров обычно помещается в одной строке. Они разбиты на несколько строк только в целях удобства просмотра и печати.

Заключение

Еще более захватывающие возможности по XML-обработке ожидают нас в Firefox 3.0, который пока проходит альфа-тестирование и должен быть выпущен в первой половине 2008 г. Он будет сочетать новые возможности и исправления серьезных ошибок, и я расскажу о них, как только он станет основным релизом Firefox, доступным для широкого использования. Кроме этого, развивается XML-инструментарий Mozilla, которым могут пользовать как разработчики, так и пользователи, работающие с XML-технологиями. В данной серии мы продолжим подробное освещение возможностей последних версий Firefox, так как именно браузер является лицом обработки XML-данных с точки зрения большинства пользователей и программистов.


Страница сайта http://www.interface.ru
Оригинал находится по адресу http://www.interface.ru/home.asp?artId=17716