36. XML, XSL. XHTML.

Язык HTML — с формами или без оных — никак не определяет структуру веб-страниц. Он смешивает содержимое страницы и описание средств ее форматирования. По мере роста популярности электронной коммерции и других приложений появлялась все более очевидная необходимость в структурировании веб-страниц и отделении содержимого от форматирования. Например, поисковая программа, обещающая найти в Мировой паутине книгу или компакт-диск по самой выгодной цене, должна проанализировать множество страниц, находя нужное наименование и цену. Если страница написана на обычном HTML, такой программе будет очень тяжело определить, где указано название товара, а где — его цена. По этой причине консорциум WWW (W3C) предложил расширение HTML, позволяющее структурировать страницы для облегчения их автоматической обработки. Для целей было создано два языка. Первый, XML (extensible Markup Language — Расширяемый язык разметки веб-страниц), описывает структурированное содержимое страниц, а второй, XSL (extensible Style Language — расширяемый язык стилей), описывает форматирование независимо от содержимого. И о том, и о другом можно говорить очень долго, поэтому нам приходится ограничиться лишь поверхностным описанием идей, лежащих в основе этих языков.

Рассмотрим документ XML, представленный в листинге 5.6. В нем определяется структура book_list, представляющая собой список книг. Под каждую книгу отведено три поля: название, автор и год издания. Эти структуры чрезвычайно просты. Разрешается иметь структуры с повторяющимися полями (например, несколько полей с именами авторов), необязательными полями (например, название прилагающегося компакт-диска), а также альтернативные поля (например, URL магазина, если книга еще есть в продаже, и URL аукциона, если весь тираж уже распродан).

В приведенном примере каждое поле является неделимой сущностью, однако разрешается разделять поля на подполя. Например, поле, содержащее имя автора, может быть — для улучшения возможностей поиска и форматирования — организовано следующим образом:

<author>

<first_name> Эндрю </irst_name>

<last_name> Таненбаум </last_name>

</author>

Итак, любое поле может иметь подполя неограниченной вложенности.

Код, представленный в листинге 5.6, делает лишь одно: определяет список из трех книг. Ничего не говорится о том, как должна выглядеть веб-страница на экране. Информация о форматировании страницы берется из другого файла, book_ list.xsl, содержащего определения XSL. Реально данный файл представляет собой таблицу стилей, в которой оговаривается вид страницы. (Существуют и альтернативы таблицам стилей, позволяющие, например, преобразовывать XML в HTML, однако обсуждение этой темы выходит за рамки этой книги.)

Листинг 5.6 Простой пример на XML <?xml version="1.0" ?>

<?xml-stylesheet type="text/xsl" href="book_list.xsl" ?> <book_list>

<book>

<title> Программное обеспечение сетей ЭВМ </title>

<author> И. В. Бойченко </author>

<year> 2005 </year>

</book>

<book>

<title> Архитектура вычислительных систем </title>

<author> И. В. Бойченко </author>

<year> 2004 </year>

</book>

<book>

<title> Сети ЭВМ и телекоммуникации </title>

<author> И. В. Бойченко </author>

<year> 2003 </year>

</book> </book_list>

Пример XSL-файла для форматирования страницы из листинга 5.6 приведен в листинге 5.7. За некоторыми необходимыми объявлениями, включающими, например, URL используемого стандарта XSL, следуют теги, первыми из которых являются <html> и <body>. С этого начинается любая обычная веб-страница. Затем следует определение таблицы, включающее заголовки трех столбцов. Обратите внимание на то, что в дополнение к тегам <th> поставлены закрывающие теги </th>. Раньше нам было все равно, есть они или нет. Однако спецификации XML и XSL куда строже, чем HTML. Оговаривается, что страницы с синтаксическими ошибками должны отвергаться браузерами в любом случае, даже если они в состоянии понять, что имел в виду разработчик страницы. Браузер, отображающий синтаксически некорректный код XML или XSL, будет сам по себе признан некорректным при первом же тестировании на совместимость со стандартами. Однако браузерам разрешается выявлять ошибочные места. Такие драконовские меры нужны для борьбы с несметным числом небрежно написанных страниц, которые появились в Сети за последние годы.

Листинг 5.7 Таблица стилей на XSL

<?xml version="1.0" ?>

<xsl:stylesheet      xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

<xsl:template match="/">

<html>

<body>

<table border="2">

<tr>

<th> НАЗВАНИЕ </th>

<th> АВТОР </th>

<th> ГОД </th>

</tr>

<xsl:for-each select="book_list/book">

<tr>

<td> <xsl:value-of select="title"/> </td>

<td> <xsl:value-of select="author"/> </td>

<td> <xsl:value-of select="year"/> </td>

</tr>

</xsl:for-each>

</table>

Краткие пояснения к листингу 5.7. Выражение <xsl: for-each select=”book_list/book”>

аналогично подобному выражению на языке C. С его помощью запускается цикл (ограниченный тегами <xsl :for-each>). На каждую книгу приходится одна итерация этого цикла. И каждая итерация выдает пять строк: <tr>, название, автор, год и тег </tr>. По окончании цикла выводятся закрывающие теги </body> и </html>. Результат интерпретации браузером этой таблицы стилей такой же, как если бы это была обычная страница, содержащая таблицу. Однако благодаря такому формату анализирующая программа сможет по XML-файлу легко найти, например, книги, изданные после 2000 года. Надо отметить, что, хотя наш XSL-файл сдержит нечто вроде цикла, веб-страницы на XML и XSL все равно остаются статическими, поскольку они содержат лишь инструкции, указывающие браузеру, как отображать страницу. Тем же, в принципе, занимается и HTML. Разумеется, чтобы интерпретировать XML и XSL, браузер должен поддерживать эти языки. На сегодняшний день, впрочем, большинство браузеров имеют такую возможность. До сих пор не очень понятно, заменит ли XSL традиционные таблицы стилей.

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

Одна из задач XML состояла в попытке вернуться к истокам, когда определялась только структура, а не внешний вид документа. Вместе с тем, XSL позволяет управлять тем, как выглядят страницы. Оба языка, впрочем, порой используются не по назначению. Следует иметь это в виду.

XML можно использовать не только для описания веб-страниц. Все чаще он используется в качестве языка для связи между прикладными программами. В частности, SOAP (Simple Object Access Protocol — простой протокол доступа к объектам) предоставляет возможность выполнения удаленных вызовов процедур между приложениями способом, независимым от языка и системы. Клиент формирует запрос в виде сообщения XML и отсылает его на сервер по описываемому далее протоколу HTML. Сервер отсылает назад ответ, представляющий собой форматированное XML-сообщение. Таким образом, могут общаться приложения, работающие на разнородных платформах.

XHTML — расширенный язык разметки гипертекста К языку HTML постоянно предъявляются новые требования. Многие представители этой индустрии чувствуют, что в будущем большинство устройств, связанных со Всемирной паутиной, будут представлять собой не ПК, а беспроводные портативные устройства типа PDA. У таких мини-компьютеров нет столь большого объема памяти, чтобы работать с большими браузерами, обладающими сложной эвристикой, с помощью которой они пытаются отображать синтаксически некорректные страницы. Таким образом, следующей версией после HTML 4 должен стать язык, отличающийся крайне высокой требовательностью. Он называется не HTML 5, a XHTML, поскольку, по сути дела, представляет собой HTML 4, приведенный к стандарту XML. Под этим мы подразумеваем, что теги типа <hl> не имеют существенного значения. Чтобы добиться от такого тега того эффекта, который он производит в HTML 4, необходимо написать определение на XSL в отдельном файле. XHTML — это новый веб-стандарт, который рекомендуется использовать при создании любых веб-страниц для достижения максимальной переносимости на другие платформы и независимости отображения от браузера.

Между XHTML и HTML 4 существует шесть существенных и множество мелких различий. Во-первых, страницы и браузеры стандарта XHTML должны работать в строгом соответствии со стандартом. Низкопробные страницы уже отжили свой век. Это свойство унаследовано из XML.

Во-вторых, все теги и атрибуты должны быть написаны строчными буквами. Так, тег <HTML> будет считаться некорректным в XHTML. Необходимо писать <html>. Аналогично, не-корректной записью считается такая: <1mg SRCpic001.jpg»> Она содержит имя атрибута, написанное заглавными буквами, а это запрещено.

В-третьих, всегда должны присутствовать закрывающие теги, даже для </р>. Если у тега не может быть естественного закрывающего тега (например, <bг>, <hr>, <img>), то перед закрывающей скобкой тега следует ставить косую черту, Например,

<img srcpic001.jpg» />

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

<img srcpic001.jpg» height=500 />

Число 500 должно быть заключено в двойные кавычки, как и имя JPEG-файла.

В-пятых, свойство вложенности тегов должно использоваться корректно. В прошлом это не требовалось, важно было только получить ожидаемый результат. Раньше вполне легальным было написать:

<center> <b> Летние фотографии </center> </b>

В XHTML это запрещено. Закрывающие теги должны быть написаны строго в обратном порядке по отношению к открывающим тегам.

В-шестых, в каждом документе должен быть указан его тип. Мы имели возможность в этом убедиться на примере листинга 5.7. Все серьезные и мелкие изменения, которые происходят в стандартах, обсуждаются на сайте www.w3.org.

Hosted by uCoz