Глава 1. Начинаем

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

1.1 Модель XSLT

XML перешел из рабочей группы в закрепившееся модное словечко в рекордное время. Гибкость как языка для представления структурированных данных делает его языком для обмена данных. Ранние приверженцы использовали программный интерфейс такой как DOM (Document Object Model — Объёктная Модель Документа) и Simple API for XML (SAX) для анализа и обработки XML-документов. Так XML стал тенденцией, хотя ясно, что от обычного интернетчика нельзя ожидать разработки Java, Visual Basic, Perl или Python кода для рабоыт с документами. Всё, что нужно — это гибкий, мощный, даже сравнительно простой язык, способный к преобразованию XML.

Все, что нужно — это XSLT.

XSLT (Extensible Stylesheet Language for Transformations — Язык Расширяемых Таблиц стилей для Преобразований) — это официальная рекомендация W3C (World Wide Web Consortium). Он обеспечивает хибкий, мощный язык для преобразования XML-документов во нечто другое. Чем-то другим может быть HTML-документ, другой XML-документ, PDF-файл (Portable Document Format), SVG-файл (Scalable Vector Graphics), VRML-файл (Virtual reality Modeling Language), Java код, банальный текстовый файл, JPEG файл или всё, что угодно. Вы пишете XSLT-преобразование, чтобы определить правила трансформации XML-документа, а XSLT-процессор делает его.

W3C определил два рода стандартов таблиц стилей. Самый старый и простой — CSS (Cascading Style Sheets — Каскадные Таблицы Стилей) — техника, используемая для определения различных свойств разметки элементов. Хотя CSS может использоваться вместе с XML, он гораздо чаще используется для изменения внешнего вида HTML-документов. Я могу использовать CSS-свойства для определения того, чтобы некоторые элементы отрисовались голубым, или с шрифтом в 58pt, или полужирным начертанием. Всё это хорошо, но есть множество вещей, что CSS Не может делать:

 

  • CSS не может изменить порядок, в котором элементы показываются в документе. Если вы хотите отсортировать некоторые элементы или отфильтровать элементы, основываясь на определённом правиле, CSS не сможет выполнить эту работу.
  • CSS не может осуществлять вычисления. Если вы хотите сосчитать и вывести значение (может быть вы хотите добавить числовое значение для каждого элемента в документе), CSS не сможет выполнить эту работу.
  • CSS не может объединять разнообразные документы. Если вы хотите объединить 53 накладных и распечатать сводку по всем позициям, заказанным в этих накладных, CSS не сможет выполнить эту работу.

Не рассматривайте этот параграф как критику CSS; XSLT и CSS были спроектированы для разных целей. Одно справедливо общепринятое применение XSLT — это создать HTML-документ, который содержит CSS-элементы. Посмотрите параграф 3.5 Главы 3 для примера того, как используют XSLT для создания CSS-свойств.

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

  • Таблицы преобразований XSLT должны быть XML-документом. Это значит, что вы можете писать преобразование, которое видоизменяет второе преобразование в другое преобразование (мы фактически делаем это в Главе 4). Эта разновидность рекурсивного мышления общепринята в XSLT.
  • Язык XSLT должен быть основан на шаблонном согласовании. Большинство наших преобразований состоит из правил (вызываемые темплейты в XSLT) искользуются, чтобы видоизменить документ. Каждое правило говорит «Когда ты видишь часть документа, которая выглядит как это, вот как ты переделаешь это в нечто другое.» Это наверное отлично от любого программирования, которое вы до ранее осуществляли.
  • XSLT должен быть разработан, чтобы быть свободным от сторонних эффектов. Другими словами, XSLT разработан, чтобы быть оптимизированным так, чтобы моножество различных правил преобразования могли быть применены совместно. Большущй толчок к этоиу в тои, что переменные не могут быть изменены. Однажды инициализировав переменную, вы не можете изменить её значение; если бы перменные могли бы быть изменяемыми, то обработка одного правила преобразования могло бы иметь сторонние эффекты, которые бы влияли на другие правила преобразования. Это почти основное отличие от любого программирования, которое вы до ранее осуществляли.
    XSLT существенно под влиянием разработки языков функционального программирования, таких как Lisp, Scheme и Haskell. Эти языки также отличаются неизменными переменными. Вместо определения шаблонов XSLT, языки функционального программирования определяют программы как последовательности функций, каждая из которых создаёт хорошо определённый результат (свободный от сторонних эффектов, конечно) в ответ на хорошо определённые входные данные. Цель состоит в том, чтобы осуществлять инструкции данного XSLT темплейта (шаблона) без влияния осуществления на любые другие XSLT-темплейты.
  • Вместо закольцовывания, XSLT использует итерации и рекурсии. Дано, что перменные не могут быть изменены, как же осуществлять что-то наподобии for или do-while цикла? XSLT использует две равнозначных техники: итерация и рекурсия. Итерация охначает, что вы можете написать XSLT шаблон, котороый говорит «возьми все штуки, которые выглядят так и вот, что я хочу, чтобы ты сделал с каждой из них». Хотя это отличается от do-while цикла, обычно то, что вы делаете в процедурном языке выглядит примерно так: «делай это пока есть что-нибудь ещё не обработанное». В таком случае итерация вполне делает то, что вы хотите.
    К рекурсии надо привыкнуть. Если вы должны осуществить что-то похожее на формулировку for (for i=1 to 10 do, например), рекурсия — то самое средство. Есть примеры рекурсии на протяжении книги; вы можете перейти вперёд к параграфу 4.7 в Главе 4 для подробностей.

Задав эти проектные цели, в чём сила XSLT? Здесь несколько сценариев:

  • Вашему сайту требуется отдавать информацию для множества устройств. Вам необходимо поддерживать обычные браузеры, а также пейджеры, мобильные телефоны и другие малострочные, малофункциональные устройства. Было бы великолепно, если вы могли бы задавать информацию в упорядоченном документе, потом преобразовывать этот документ во все форматы, которые вам нужны.
  • Вам необходимо обмениваться данными с вашими партнёрами, но все вы используете различные системы баз данных. Было бы великолепно, если бы вы могли задавать общий формат XML-данных, потом преобразовывать документы, написанные в этом формате, в нужные вам импортированные файлы (SQL-запросы, разделённые запятыми значения и т.д.)
  • Чтобы оставаться на переднем крае, ваш web-сайт получает полный визуальный редизайн каждые несколько месяцев. Даже такие вещи как серверные инклуды и CSS могут помочь, они не могут сделать всё. Было бы великолепно, если бы ваши данные находились в гибком формате, который мог быть преобразован в любой вид, упрощающее процесс редизайна.
  • У вас есть документы в нескольких различных форматах. Все документы машино-читаемы, но представляет трудность написать программы, чтобы разобрать и обработать всех их. Было бы великолепно, если бы вы могли объединить все документы в единственный формат, потом создать сводные документы и отчеты, основанные на этой коллекции документов. Было бы даже лучше, если отчёт мог содержать в себе вычисленные значения, автоматически сгенерированные графики и форматирование для высококачественных принтеров.

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



This entry was posted on Tuesday, February 3rd, 2009 at 5:36 pm and is filed under Модель XSLT. You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.

2 Responses to “Глава 1. Начинаем”

  1. Вадим Макишвили

    Варя, читаю и не могу понять, эту книгу пишешь ты? Или ты фиксируешь главы чьей-то книги?

    [Комментировать]

    admin Reply:

    Нет, я перевожу книжку. Она называется «XSLT», издательство O'Reilly. Мне nop@ дал в chm.

    [Комментировать]

Leave a Reply

Your comment