Современные веб-технологии

Применение элементов Семантического Веб в Интернет-магазине

Показывать лекцию целиком

Цель практического занятия: Целью данного семинара является применение технологии WebSlice в Интернет-магазине, как примера использования микроформатов, а также создание ускорителя для поиска товаров в Интернет-магазине.

Файлы к практическому занятию Вы можете скачать здесь.

22.1. Введение в ускорители

В приведенном в предыдущем практическом занятии шаблоне поискового расширения был один из опциональных тегов – ie:PreviewUrl. Он позволяет сделать предварительный просмотр результатов поиска в небольшом окне, которое отображает html-страницу с результатами поиска. Это возможно, так как на самом деле при загрузке в браузер поискового расширения оно превращается в акселератор.

Акселераторы (в дальнейшем – ускорители ) в Internet Explorer 8 – это команды контекстного меню, предоставляющие быстрый доступ к приложениям или веб-службам с какой-либо веб-страницы. Пользователи могут устанавливать ускорители из галереи дополнений Internet Explorer 8 или через любой веб-сайт, на котором они объявлены. Ускорители упрощают копирование информации с одной веб-страницы на другую.

Ускорители характеризуются следующими важными свойствами:

  • Ускорители появляются в контекстном меню (отрывается при щелчке правой кнопкой) веб-страницы в Internet Explorer. Они группируются по функциям, поэтому пользователи могут быстро вызвать нужную задачу.
  • Для ускорителей возможны два типа сценариев: пользователи могут предварительно просматривать информацию, не покидая веб-страницу, или выполнить отправку содержимого прямо в приложение или веб-службу.
  • В XML- ускорителях используется XML-файл для описания формата HTTP-запросов к веб-серверу. Данные из целевого контекста (выбранный объект, ссылка или документ) передаются в виде переменных в параметрах URL-адреса и/или данных формы.
  • Ускорители позволяют осуществлять операции с данными на веб-странице. Можно выбрать несколько строк текста и, щелкнув кнопкой мыши, отправить их в блог или послать по электронной почте. С использованием ранее установленного ускорителя эта операция "выполняет" требуемое действие, переходя к нужному веб-сайту с выбранной частью статьи, уже доступной в поле редактирования. С использованием ускорителей типа "предварительный просмотр" можно выполнять операции с данными без перехода на другой веб-сайт; например, можно перевести слово или найти адрес на карте. Чтобы открыть окно предварительного просмотра, достаточно навести указатель мыши на ускоритель (рис. 22.1).

    (рис 22.1) Пример поиска адреса на карте с помощью сервиса Live Maps

    Ускорители являются декларативными. В них используется передача данных HTTP для обеспечения связи между браузером и веб-сайтом. XML- ускорители легко создавать, тестировать и развертывать для пользователей.

    22.1.1. Категории

    Ускорители группируются по функциям, поэтому пользователи могут быстро вызвать нужную задачу. В ходе установки ускорителя или в диалоговом окне "Надстройки" можно задать ускоритель по умолчанию для конкретной категории.

    Существуют следующие категории ускорителей:

  • Добавить ( Add );
  • Опубликовать в блоге ( Blog );
  • Найти определение ( Define );
  • Найти на карте ( Map );
  • Отправить ( Send );
  • Перевести ( Translate );
  • Искать ( Find, именно к этой категории относятся поисковые провайдеры).
  • Отдельно стоит выделить категорию Share, куда принято относятся все ускорители, не попавшие ни в одну из указанных категорий.

    <activity category="Share">

    В общем, можно использовать и собственные категории. При этом принято придерживаться правила, что категория должна выражаться глаголом, который будет понятен пользователю и не связан с определенной торговой маркой или приложениями, которые могут использоваться в этой категории другими ускорителями с аналогичными функциональными возможностями. Кроме того, поскольку значение атрибута category используется в диалоговом окне "Надстройки" для объединения ускорителей в группы, оно должно быть удобочитаемым и в нем должны правильно использоваться заглавные буквы.

    22.1.2. Переменные

    Свойства документа и содержимое передаются поставщику службы ускорителя через функции HTTP-передачи данных GET и/или POST. Эти свойства выражены заменяемыми переменными, которые можно передавать в виде полей формы или параметров URL-адреса. Переменные можно указать непосредственно в атрибуте action элементов execute и preview или в элементах parameters.

    . Для сохранения состояния и учетных данных пользователя можно использовать файлы Cookie.

    Доступны переменные, перечисленные в табл. 22.1.

    Переменные
    Переменная Контекст Описание
    {documentUrl} Все Свойство href документа.
    {documentTitle} Все Свойство title документа, если доступно.
    {documentDomain} Все Действующий домен второго уровня из свойства href документа.
    {documentHost} Все Полное имя домена из свойства href документа.
    {selection} Выделение Выбранный текст.
    {link} Ссылка Свойство href выбранной ссылки.
    {linkText} Ссылка Свойство innerText выбранной ссылки.
    {linkRel} Ссылка Свойство rel выбранной ссылки, если доступно.
    {linkType} Ссылка Свойство type выбранной ссылки, если доступно.
    {linkDomain} Ссылка Действующий домен второго уровня из свойства href ссылки.
    {linkHost} Ссылка Полное имя домена из свойства href ссылки.

    О переменных необходимо помнить следующее:

  • Имена переменных всегда заключаются в фигурные скобки {} ; например {selection}. Чтобы указать в запросе сам символ фигурной скобки, используется обратная косая черта, например \{{selection}\}.
  • Если после имени переменной указывается "?", это означает, что оно необязательное; например {documentTitle?}.
  • Если какая-либо обязательная переменная в шаблоне URL-адреса недоступна (например, при попытке выполнения ускорителя, включающего {linkRel} в атрибуте action, в отношении ссылки без атрибута rel ), ускоритель выполнить нельзя и относящийся к нему пункт в контекстном меню затеняется.
  • Если какой-либо элемент parameter имеет пустое значение по любой причине, он не появляется в запросе.
  • 22.2. Описание структуры XML файла ускорителя

    В общем, описание акселератора имеет следующий вид:

    <?xml version="1.0" encoding="UTF-8"?>
    <openServiceDescription
        xmlns="http://www.microsoft.com/schemas/openservicedescription/1.0">
      <homepageUrl>http://maps.example.com</homepageUrl>
      <display>
        <name>
          Карта MyMap</os:name>
          <icon>
            http://www.example.com/favicon.ico</ icon>
            <description>Адреса на карте – с помощью MyMap.</description>
            </ display>
            < activity category="Карта">
            <activityAction context="selection">
              <preview action="http://maps.example.com/preview.php?addr={selection}" />
              <execute action="http://maps.example.com/" method="get">
                <parameter name="addr" value="{selection}" type="text" />
              </execute>
            </activityAction>
            </activity>
          </openServiceDescription>

    Рассмотрим подробно все используемые теги.

    22.2.1. openServiceDescription

    <openServiceDescription
       xmlns:os="http://www.microsoft.com/schemas/openservicedescription/1.0">

    Корневой элемент файла ускорителя OpenService – элемент openServiceDescription. Атрибут xmlns является обязательным и должен иметь значение http://www.microsoft.com/schemas/openservicedescription/1.0.

    22.2.2. homepageUrl

    <homepageUrl>http://maps.example.com</homepageUrl>

    Обязательный. Элемент homepageUrl определяет основной URL-адрес ускорителя, по которому пользователь может получить доступ к службе из веб-браузера. Во всех URL-адресах, указанных в файле ускорителя OpenService, домен должен совпадать с доменом, указанным в элементе homepageUrl.

    22.2.3. display

    <display>

    Обязательный. Элемент display описывает способ отображения ускорителя для пользователя. Он содержит элементы name и icon.

    22.2.4. name

    <name>Карта MyMap</name>

    Обязательный. Элемент name – это имя ускорителя, отображаемое в контекстном меню. Имя ускорителя должно начинаться с описательного слова, за которым должно следовать наименование поставщика услуг. Например, "Карты Windows Live" или "Найти в Encarta".

    22.2.5. icon

    <icon>http://www.example.com/favicon.ico</icon>

    Необязательный. Элемент icon содержит URL-адрес для значка (размером 16 x 16 пикселей) данного ускорителя. Имя домена должно совпадать с доменом, указанным в элементе homepageUrl.

    22.2.6. description

    <description>Адреса на карте – с помощью MyMap.</description>

    Необязательный. Элемент description содержит более длинное описание ускорителя, отображаемое в диалоговом окне Управление надстройками.

    22.2.7. activity

    <activity category="Карта">

    Обязательный. Элемент activity содержит всю функциональность ускорителя.

    Каждый элемент activity должен указывать атрибут категории для описания поддерживаемого типа функциональности. Ускорители упорядочиваются в контекстном меню браузеров по категориям, чтобы пользователи могли быстро выполнить нужную задачу. Пользователи могут выбрать ускоритель по умолчанию для каждой категории при установке ускорителя или в диалоговом окне Управление надстройками. Ускорители по умолчанию отображаются в контекстном меню браузера, а все прочие ускорители – во вложенном меню.

    22.2.8. activityAction

    <activityAction context="selection">

    Обязательный. Каждый элемент activityAction указывает ход взаимодействия с поставщиком службы на основе целевого объекта ускорителя (табл. 22.2). Необязательный атрибут контекста указывает целевой объект. Значение по умолчанию – selection.

    Контекст activityAction
    Контекст Описание
    Документ Текущий документ. Доступен всегда.
    Выделенный фрагмент Значение по умолчанию. Выделенный фрагмент текста. Ускоритель доступен только при нажатии выделенной области.
    Ссылка Гиперссылка. Ускоритель доступен только для ссылок.

    22.2.9. preview

    <preview action="http://maps.example.com/preview.php?addr={selection}" />

    Необязательный. Элемент preview определяет содержимое окна HTML, которое отображается при наведении пользователем указателя мыши на ускоритель. Этот элемент использует те же атрибуты и дочерние элементы, что и элемент execute.

    URL-адрес атрибута действия может содержать переменные, заменяемые при выполнении команд.

    22.2.10. execute

    <execute action="http://maps.example.com/" method="get">

    Обязательный. Элемент execute указывает основное действие, выполняемое при запуске ускорителя пользователем. Как и preview, этот элемент может содержать переменные замены в атрибуте действия или в виде отдельных элементов parameter.

    Следующие атрибуты определены для execute и preview (табл. 22.3).

    Атрибуты execute
    Атрибут Обязательный Описание
    action Да Шаблон URL-адреса для использования при отправке HTTP.
    method Нет Тип используемого метода HTTP ( get, post ). По умолчанию – get.
    enctype Нет Тип содержимого, отправляемого на сервер. По умолчанию – application/x-www-form-urlencoded.
    accept-charset Нет По умолчанию – utf-8.

    22.2.11. parameter

    <parameter name="addr" value="{selection}" type="text" />

    Необязательный. Элемент parameter предоставляет дополнительный способ выражения значений. Обязательные атрибуты имени и значения определяют строчные выходные данные, относящиеся к службе, и обычно относятся к переменным ускорителя.

    Необязательный атрибут типа используется для преобразования переменной {selection} в HTML или простой текст. Значение по умолчанию – text.

    22.3. Создание ускорителя для Интернет-магазина

    Добавим в корень проекта файл Accelerator.xml с описанием нового акселератора:

    <?xml version="1.0" encoding="UTF-8" ?>
    <openServiceDescription xmlns="http://www.microsoft.com/schemas/openservicedescription/1.0">
       <homepageUrl>http://localhost:31770/AWCDShop</homepageUrl>
          <display>
             <name>Find product in Adventure Works</name>
             <icon></icon>
          </display>
          <activity category="Find">
          <activityAction context="selection">
            <preview action="http://localhost:31770/AWCDShop/products/ProductsSearch.aspx?query={selection}" />
            <execute method="get" 
                action="http://localhost:31770/AWCDShop/products/ProductsSearch.aspx?query={selection}" />
          </activityAction>
       </activity>
    </openServiceDescription>

    Как видно, и в качестве страницы для перехода и в качестве страницы для предпросмотра установлена разработанная ранее страница поиска.

    22.4. Регистрация ускорителя на странице

    Для того чтобы подключить разработанный акселератор в браузер необходимо уведомить пользователя, о том, что страница предлагает установить тот или иной плагин. Когда пользователь захочет установить акселератор – ему достаточно нажать на обычную кнопку (или выполнить любое действие, которое запустит необходимый java-script код). В нашем случае привяжем код к обработчику нажатия по логотипу сайта на master.master:

    <img runat="server" alt="" height="46" width="144" 
         src="images/logo.jpg" onclick="window.external.AddService('Accelerator.xml')" />

    Теперь при нажатии на логотип пользователь получит уведомление о том, что ему будет установлен новый акселератор (рис. 22.2).

    (рис 22.2) Добавление ускорителя Adventure Works в IE8

    Теперь достаточно выделить какой-либо фрагмент текста на каком-либо сайте, перейти в контекстное меню, и выбрать Find products in Adventure Works. При этом если просто навести мышку на этот пункт меню, но не нажимать, то откроется окно предварительного просмотра (рис. 22.3).

    (рис 22.3) Предпросмотр ускорителя Adventure Works в IE8

    22.5. Микроформаты, RSS

    Микроформаты это способ семантически размечать сведения о разнообразных сущностях (событиях, организациях, людях, товарах и так далее) на веб-страницах, используя стандартные элементы языка HTML (или XHTML). Пользователь может воспринимать страницу с размеченным микроформатом как обычную веб-страницу (через браузер); в то же время программы-обработчики способны извлечь из такой страницы структурированную информацию, следуя определенным соглашениям.

    Поскольку микроформаты основаны на уже существующих стандартах (таких, как HTML и XHTML), их легко добавлять на существующие страницы в паутине.

    22.5.1. Принципы построения микроформатов

    При использовании микроформатов к существующей HTML-разметке добавляются новые составляющие, наполненные особым, заранее определенным смыслом. Например, с помощью атрибута class можно обозначить смысл того или иного HTML-элемента на странице (этот атрибут определен для всех элементов). Таким образом, люди приходят к соглашению об использовании определенных значений атрибутов (в том числе class ) для разметки определенных фрагментов информации. В дальнейшем такую разметку можно обрабатывать машинными средствами.

    Для разметки микроформатами подходят любые элементы HTML, но особое значение придается элементам, которые не имеют собственного, стандартного семантического значения – div и span. Из атрибутов в настоящее время используются в основном следующие:

  • class ;
  • rel ;
  • rev ;
  • title.
  • 22.6. Определение WebSlice

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

    Основой WebSlice ( веб-фрагмент ) является микроформат hAtom с несколькими дополнительными свойствами. В самом веб-фрагменте используется простая семантическая разметка HTML для представления части веб-страницы, на которую можно подписаться. Прямо в содержимое HTML-страницы можно добавлять заметки; для оптимизации можно использовать дополнительные файлы, но это необязательно.

    22.6.1. Пример веб-фрагмента

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

    <div class="hslice" id="slice1">
       <p class="entry-title"> Температура воздуха в Москве: 20 градусов</p>
       <div class="entry-content">
          <img src="sunny.jpg">
          <p>Auction ends: 
             <abbr class="endtime" title="2008-02-28T12:00:00-05:00">
                6 hours
             </abbr>
          </p>
       </div>
       <a rel="feedurl" href="www.weather-moscow.ru/weather.xml">
          Subscribe to Feed
       </a>
       <p>Погода обновляется каждые 
          <span class="ttl">
             15
          </span> минут.
       </p>
    </div>

    22.6.2. Основные свойства

    Основные свойства WebSlice определяют контейнер, заголовок записи и содержимое записи.

    Чтобы обнаружить веб-фрагмент на веб-странице, Internet Explorer ищет элементы с определенными именами класса и атрибутами.

    Обязательно должны присутствовать следующие свойства:

  • свойство hslice ;
  • свойство id ;
  • свойство entry-title.
  • 22.6.2.1. Свойство hslice

    Элемент hslice описывает раздел веб-страницы, на который можно оформить подписку в веб-браузере. В элементе hslice содержатся все обязательные и дополнительные свойства веб-фрагмента.

    <div class="hslice" id="score">

    В отличие от классов в традиционном стиле именам классов веб-фрагментов не требуется правило CSS в таблице стилей. Имена классов веб-фрагментов можно объединить с именами других классов в списке, разделенном пробелами.

    <div class="hslice forecast" id="weather">

    22.6.2.2. Свойство id

    Таким же образом, как и именованная привязка, атрибут id используется для идентификации веб-фрагмента в URL-адресе. Атрибут id должен присутствовать в том же самом элементе, для которого используется класс hslice.

    Значение id должно быть уникальным: если для нескольких веб-фрагментов на веб-странице используется одинаковое значение id, Internet Explorer распознает только один из них. Если значение id изменяется, Internet Explorer больше не может идентифицировать веб-фрагмент.

    22.6.2.3. Свойство entry-title

    По крайней мере, в одном дочернем элементе .

    <div class="hslice" id="main">
        <h2 class="entry-title">Температура воздуха в Москве</h2>
        ...
    </div>

    Можно объединить несколько текстовых записей и создать динамический заголовок, обновляемый веб-фрагментом. Класс entry-title можно применить к нескольким элементам; Internet Explorer сцепляет значения в том порядке, в котором они указаны в HTML.

    В приведенном ниже примере в Internet Explorer при обновлении веб-фрагмента отображается текст "Температура воздуха в Москве: На данный момент: 20o".

    <div class="hslice" id="main">
        <h2 class="entry-title"> Температура воздуха в Москве:</h2>
        <p>На данный момент: <span class="entry-title">20deg;</span>.</p>
    </div>

    Заголовки веб-фрагментов не могут содержать больше 128 символов.

    22.6.3. Управление обновлениями и уведомление

    Проверяя, нет ли обновлений, Internet Explorer сравнивает веб-фрагмент с его версией в кэше. На платформе Windows RSS новости и веб-фрагменты обновляются периодически: по умолчанию через каждые 24 часа. Однако если веб-фрагмент содержит свойство ttl, то в подсистеме загрузки веб-каналов расписание обновления настраивается с использованием указанного значения. Частоту обновления можно также настроить в диалоговом окне "Свойства веб-фрагмента ".

    Длительность и частота проверок обновлений регулируются с помощью следующих элементов веб-фрагмента:

  • свойство ttl ;
  • свойство endtime.
  • 22.6.3.1. Свойство ttl

    Срок жизни (TTL) – это количество минут, в течение которых веб-фрагмент считается актуальным. Если пользователь не изменяет интервал обновления, подсистема загрузки веб-каналов рассматривает это значение как рекомендуемую частоту обновления.

    <p>Обновление происходит каждые <span class="ttl">60</span> минут.</p>

    Минимальный интервал проверки обновлений в браузере Internet Explorer составляет 15 минут.

    22.6.3.2. Свойство endtime

    Время истечения срока действия веб-фрагмента. Дата и время указываются в атрибуте title, сохраняя внутренний текст элемента для понятного пользователю представления времени, если необходимо.

    <abbr class="endtime" title="2008-07-25T17:30:00-07:00">(friendly date format)</abbr>

    Для указания строки даты и времени используется следующий общепринятый формат: ГГГГ-ММ-ДДВчч:мм:сс[Z|(+|-)чч:мм].

  • ГГГГ – 4 цифры, обозначающие год;
  • ММ – месяц, от 01 до 12;
  • ДД – день, от 01 до 31;
  • " В " – разделитель даты и времени;
  • чч – часы, от 00 до 23;
  • мм – минуты, от 00 до 59;
  • сс – секунды, от 00 до 59 (необязательно);
  • один из следующих вариантов:
  • " Z " – всемирное координированное время (UTC) или время по Гринвичу (GMT) ("ноль");
  • ("+"|"-")чч:мм – часы и минуты смещения часового пояса.
  • 22.7. Создание страницы Новости в Интернет-магазине

    Продемонстрируем возможности web-slice на примере создания страницы новостей. Для этого добавим в masterpage 'е новый пункт меню и создадим страницу news/News.aspx.

    <asp:Content ID="Content2" ContentPlaceHolderID="column_l_placeholder" Runat="Server">
        <asp:Panel ID="PanelNews" runat="server" CssClass="hslice">
        </asp:Panel>
    </asp:Content>

    Все, что есть на странице – это панель в основной области, в качестве CSS-класса которой указан hslice. При рендеренге страницы вместо панели будет подставлен тег div с соответствующим классам. Весь остальной код поместим в бэк-код страницы. В качестве новостей будем отображать модели продуктов магазина, отсортированные по дате модификации. Такой подход применяется в связи с тем, что, как правило, на настоящих сайтах те же новости модераторы сайта вводят на специальных формах и сохраняют их в БД, а уж сам движок сайта формирует на основе БД страницу с новостями.

    protected void Page_Load(object sender, EventArgs e)
    {
      DataClassesDataContext dcdc =
        new DataClassesDataContext("Data Source=localhost;Initial Catalog=AdventureWorks;Integrated Security=True");
      var query = from productModel in dcdc.ProductModels orderby productModel.ModifiedDate select productModel;
      var newquery = query.Take(6);
      foreach (ProductModel pm in newquery)
      {
        LiteralControl lc = new LiteralControl
         ("<p class ='entry-title'><b>"+
          pm.Name+"</b></p>"+"<div class='entry-content'>"+
          ((pm.ProductModelProductDescriptionCultures.Count>0) ? 
            pm.ProductModelProductDescriptionCultures[0].ProductDescription.Description : "")+
          "</div>");
        PanelNews.Controls.Add(lc);
      }
    }

    В нашу панель с новостями мы динамически добавляем LiteralControl 'ы, которые при отрисовки страницы просто превращаются указанную в их конструкторе разметку. В данном случае, для каждого из товаров будет отображен заголовок с названием и его описание, если оно есть. При этом параграфам с заголовками задан класс " entry-title ", а div 'у – " entry-content ". Теперь перейдем на страницу новостей и наведем мышкой на текст – он будет обведен рамкой и появится копка добавления web-slice в браузер (рис. 22.4).

    (рис 22.4) Отображение веб-фрагмента Новости на странице Adventure Works в IE8

    После добавления, в панели инструментов появится новый раздел (рис. 22.5).

    (рис 22.5) Отображение содержимого веб-фрагмента Adventure Works в панели избранного в IE8

    В нем можно увидеть последние новости, обновить их или перейти на страницу с новостями, причем для работы не обязательно находится в данный момент на самом сайте. Частота автоматического обновления – раз в сутки, но ее можно легко изменить. Для этого надо нажать правой кнопкой мыши по панели с web-slice, и выбрать меню "Свойства". В открывшемся окне можно указать необходимую частоту обновления (рис. 22.6).

    (рис 22.6) Свойства веб-фрагмента Adventure Works в IE8

    Для программной установки частоты, как уже отмечалось, необходимо где-либо внутри div 'а с классом hslice вставить код:

    <span class="ttl">15</span>

    Класс ttl указывает браузеру, что число, указанное в теге <span> – время обновления, в данном случае – 15 минут.

    22.8. Ключевые термины

    Акселератор, Ускоритель, Микроформат, WebSlice, Веб-фрагмент, hAtom.

    22.9. Краткие итоги

    Данное практическое занятие рассматривает следующие темы:

  • Введение в ускорители:
  • Описание структуры XML файла ускорителя ;
  • Используемые теги;
  • Создание ускорителя для Интернет-магазина и регистрация ускорителя на странице;
  • Микроформаты:
  • Принципы построения микроформатов ;
  • Определение и основные свойства WebSlice ;
  • Управление обновлениями и уведомление;
  • Создание страницы Новости с применением WebSlice.
  • Вернуться к учебному плану