Корневой элемент xml. XML — свободный расширяемый язык разметки. XML — это не замена HTML.

Введение

Рассмотрим простой пример XML-файла (ex01.xml).

"Заметки об XSL" Леонов Игорь Васильевич

Если мы откроем этот файл в браузере Internet Explorer, то мы увидим тот же самый текст, который приведен выше, вместе со всеми тегами и служебной информацией. Но нам не нужны теги и служебная информация! Мы хотим видеть только ту информацию, которая относится к делу, а при помощи тегов - управлять внешним видом этой информации. Эта задача решается легко и просто: необходимо к XML-файлу добавить шаблон преобразования - XSL-файл.

Этот «адресный» элемент является простым типом с ограничением. В этом примере также определяется элемент, называемый «адрес». Значение должно быть ровно восемь символов. В этом примере определяется другой элемент, называемый «пароль». Этот элемент «пароль» является простым типом с ограничением. Значение должно быть не менее пяти и не более восьми символов.

Ограничения для типов данных

Что такое сложный элемент

Существует четыре типа сложных элементов. Пустые элементы элементов, которые содержат только другие элементы, которые содержат только текстовые элементы, которые содержат как другие элементы, так и текст. Примечание. Каждый из этих элементов также может содержать атрибуты!

Перепишем наш XML-файл в следующем виде (ex01-1.xml).

"Заметки об XSL" Леонов Игорь Васильевич "Заметки об XSL" Леонов Игорь Васильевич

Как определить сложный элемент

Если вы используете метод, описанный выше, несколько элементов могут ссылаться на один и тот же сложный тип, например. Вы также можете создать элемент сложного типа в существующем сложном типе и добавить некоторые элементы. Пустой сложный элемент может содержать атрибуты; Но не может быть никакого содержимого между открытием и закрытием тегов.

Определение сложных типов для пустых элементов

Элемент «продукт» выше не имеет содержимого. Чтобы определить тип без содержимого, мы должны определить тип, который допускает только элементы в его содержимом, но мы не объявляем какой-либо элемент, например. Однако можно объявить элемент продукта более компактным, таким образом.

Создадим XSL- файл ex01-2.xsl . Текст файла приведен ниже.

Если мы теперь откроем файл ex01-2.xsl в браузере Internet Explorer, то результат будет другим.

Леонов Игорь Васильевич

Сложные типы только элементов

Комплексный тип «только элементы» содержит элемент, содержащий только другие элементы.

Определить сложные типы только с элементами

Это означает, что определенные элементы должны отображаться в этом порядке в элементе «человек». Сложные текстовые элементы. Сложный текстовый элемент может содержать как атрибуты, так и текст.

Установить сложный текстовый элемент

Смешанные типы со смешанным контентом

Элемент смешанного сложного типа может содержать атрибуты, элементы и текст. Определение сложных типов со смешанным контентом. Следующая схема объявляет элемент «письмо». Индикаторы комплексного типа. У нас есть семь типов индикаторов.

"Заметки об XSL"

Отметим теперь момент, который является ключевым для разработчиков баз данных. Информация в XML-странице появляется, как правило, в результате запроса к базе данных. Запрос к базе данных в многопользовательской среде - это весьма дорогостоящая операция. Предположим теперь, что у нас нет XML и мы формируем стандартные статические HTML-страницы. В этом случае для решения задачи простого преобразования внешнего представления информации, например, для изменения сортировки, у нас есть два способа решения проблемы: выполнить запрос и сохранить результаты в каком-либо временном буфере на сервере или каждый раз при изменении внешнего представления выполнять новый запрос и формировать HTML-страницу заново.

Индикаторы заказа используются для определения порядка, в котором происходят элементы. Индикатор указывает по умолчанию, что дочерние элементы могут отображаться в любом порядке и что каждый из них должен произойти, и только один раз. Используя индикатор, вы можете указать индикатор в 0 или 1 и может быть только 1. Индикатор указывает, что может возникнуть дочерний или другой элемент.

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

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

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

В приведенном выше примере указывается, что элемент «имя_файла» может встречаться как минимум один раз и не более десяти раз в элементе «человек». Индикатор указывает минимальное количество раз, которое может иметь элемент. Внутри этого элемента определяются несколько «личных» элементов.

Групповые индикаторы используются для определения групп связанных элементов. Элементы группы определяются с объявлением группы, например. Как только вы определили группу, вы можете ссылаться на нее в определении другой группы или сложного типа, например.

Есть и еще одно соображение, которое может быть существенным для разработчиков баз данных. Большинство современных СУБД могут форматировать результаты запроса к базе данных в виде XML-файла. То есть при построении интерфейса пользователя в рамках технологии XML и XSL мы добиваемся определенной независимости от поставщика СУБД. В части организации вывода - практически полной независимости. А эта часть весьма велика в большинстве прикладных систем, ориентированных на работу с базами данных. Конечно, помимо вывода есть еще ввод и серверная обработка бизнес-логики, но здесь вам придется искать какие-то иные решения.

Когда вы определили группу атрибутов, вы можете ссылаться на нее в определении другой группы или сложного типа, например. В этом случае мы можем это сделать, даже если автор приведенной выше схемы никогда не объявлял элемент «дети»! В этом случае мы можем это сделать, даже если автор вышеуказанной схемы никогда не объявлял никакого «гендерного» атрибута! Предположим, у нас есть пользователи из двух разных стран: Англии и Норвегии.

Блокировка элементов

Сначала мы объявляем ключевой элемент, а затем объявляем другие элементы, которые являются подстановками для ключевого элемента. Чтобы другие элементы не перекрывали определенный элемент, используйте блок. Тип элемента подстановки, чтобы увидеть тот же или полученный из типа ключевого элемента. Если тип элемента замены совпадает с типом элемента, который вам не нужно указывать.

Первые шаги

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

"Заметки об XSL" Леонов Игорь Васильевич

Первая строка информирует браузер о том, что файл имеет формат XML. Атрибут version является обязательным. Атрибут encoding не является обязательным, но если у вас в тексте есть русские буквы, то необходимо вставить этот атрибут, в противном случае XML-файл просто не будет обрабатываться, - вы получите сообщение об ошибке.

XML — свободный расширяемый язык разметки

Глобальные элементы - это те, которые являются непосредственными детьми элемента «схемы»! Локальные элементы - это элементы, вложенные в другие элементы! Вы также узнаете, что схема может быть написана по-разному. Этот элемент имеет атрибут и содержит другие элементы, поэтому мы рассматриваем его как сложный тип. Примечание: объявления атрибутов всегда должны заканчиваться.

Построение документа XML

Предыдущий метод проектирования очень прост, но его очень трудно читать и поддерживать, когда документы сложны! Вот новый вид файла схемы. Третий метод проектирования определяет классы и типы, что позволяет нам повторно использовать определение элементов.

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

Элементы могут иметь атрибуты, значения которых тоже могут обрабатываться в соответствии с шаблоном.

На верхнем уровне XML-файла всегда находится один элемент. То есть файл вида

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

Начало создания файла XML

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

"Заметки об XSL" Леонов Игорь Васильевич "Введение в CSP" Леонов Игорь Васильевич

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

"Заметки об XSL" Леонов Игорь Васильевич "Введение в CSP" Леонов Игорь Васильевич

Ограничения на строковые типы данных

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

Дата типа данных используется для указания даты. Ниже приведен пример объявления даты в схеме. Тип данных времени используется для указания времени. Все компоненты обязательны! Ниже приведен пример инструкции команды в схеме. Тип данных продолжительности используется для указания временного интервала.

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

XSL +XSLT

Перейдем теперь к шаблону преобразования - к XSL-файлу. Задача XSL-файла - преобразовать дерево XML-файла в другое дерево, которое, например, будет соответствовать формату HTML и может быть изображено на экране браузера с учетом форматирования, выбора шрифтов и т.п.

Правильно сформированные данные

Ниже приведен пример инструкции длительности в схеме. В приведенном выше примере указывается период в пять лет. В приведенном выше примере указывается период в пять лет, два месяца и десять дней. В приведенном выше примере указывается период в пять лет, два месяца, десять дней и 15 часов.

Ограничения по типам данных

В приведенном выше примере указывается период в 15 часов. В приведенном выше примере указывается период менее 10 дней. Ограничения, которые могут использоваться с типами данных даты. Для хранения чисел используются десятичные типы данных. Тип десятичных данных используется для указания числового значения.

Для того, чтобы браузер выполнил необходимое преобразование, нужно в XML-файле указать ссылку на XSL-файл

Рассмотрим теперь текст XSL-файла

Первая строка файла содержит тег элемента xsl:stylesheet . Атрибуты элемента - номер версии и ссылка на пространство имен. Эти атрибуты элемента xsl:stylesheet являются обязательными. В нашем случае пространство имен - это все имена элементов и их атрибутов, которые могут использоваться в XSL-файле. Для XSL-файлов ссылка на пространство имен является стандартной.

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

Ограничения на числовые типы данных

Элемент вашего документа может выглядеть так. Ограничения, которые могут использоваться с числовыми типами данных. Следующий пример - инструкция логического элемента в схеме. Бинарные данные используются для выражения двоичных данных. У нас есть два вида двоичных данных.

Заметим, что XSL-файл является одной из разновидностей XML-файлов. Он не содержит пользовательских данных, но формат его тот же самый. Файл содержит элемент верхнего уровня xsl:stylesheet , а далее идет дерево правил преобразования.

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

Ограничения на различные типы данных

Ограничения, которые могут использоваться с другими типами данных. Это язык: это означает, что этот формат файла предназначен для передачи информации. Это язык разметки: это означает, что данные привязаны к «тегам», которые соответствуют их контенту. Например, в Эмиле Золя, «Эмиль» будет называться как имя, а «Золя» - фамилией. Это расширяемый язык: это означает две вещи.

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

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

В первом примере мы посмотрели, как с помощью элемента xsl:value-of можно вывести в HTML-формате содержание элемента (текст, заключенный между тегами). Теперь мы посмотрим, как при помощи того же самого элемента можно вывести значение атрибута элемента.

Здесь мы имеем дело с ярлыками, о которых мы говорили, путем введения. Именно элементы и атрибуты позволяют квалифицировать данные и придать им смысл.

  • Непустой элемент начинается с открытого тега и заканчивается закрывающим тегом.
  • Пустой элемент содержит только один тег, называемый «самозакрывающимся» тегом.
  • Это пример элемента идентификации: он характеризуется тегом.
Между ярлыками открытия и закрытия непустого элемента могут быть другие элементы. Это относится к большинству элементов, таких как, например, ученый: отступы кода подчеркивают иерархическую взаимосвязь элементов.

Рассмотрим следующий XML-файл ex02-1.xml

В этом файле информация хранится не в содержании элементов, а в виде значений атрибутов. Файл ex02-1.xsl имеет вид

Эта иерархическая структура формирует древовидную структуру. Здесь это научный элемент. Когда вы хотите указать, что содержит элемент, вы можете поместить атрибут в открывающий тег. Например, элемент даты имеет два атрибута, названных рождением и смертью. Атрибут имеет имя и значение. Например, атрибут первого имени второго ученого - Исаак.

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

. , .

Обратите внимание на синтаксис ссылки на атрибут элемента - //dog/@ name . Имя элемента и имя атрибута разделены парой символов "/@ ". В остальном синтаксис тот же самый, что и для ссылки на содержание элемента.

Когда контент, вероятно, содержит несколько объектов, может быть утомительно написать их. Эти правила заключаются в следующем. Корневой элемент должен быть уникальным. . Кроме того, может быть желательно распространять тип документа, или может возникнуть необходимость в параллельной работе над данным документом. По этим причинам необходимо установить общие правила, которые точно определяют атрибуты и атрибуты, а также их иерархию, то есть правила «грамматики». Для этого есть три основных метода. такая грамматика и что она указывает это, сказано «действительна».

Результат имеет следующий вид:

Собака: Шарик. 18 кг, рыжий с черными подпалинами.

Обратим теперь внимание на следующий момент. В XSL-файле мы никак не использовали элемент tutorial . На самом деле можно было использовать полный путь. Перепишем наш XML-файл, увеличив глубину дерева (ex02-2.xml)

В этот файл добавлен шаблон преобразования ex03-1.xsl .

Рассмотрим этот шаблон подробнее. Вот его текст.

Первые две строки шаблона являются уже привычными. Следующие шесть строк - это строка, содержащая заголовки столбцов таблицы. Конструкция для извлечения текста заголовков таблицы вам уже знакома. А вот девятая строка является новой:

Этот элемент шаблона позволяет выбрать и просмотреть все группы информации, полный путь к которым задается списком тегов "tutorial/enimals/dogs/dog" . Обратите внимание - путь задается полностью, ни один из тегов опустить нельзя. Далее в ячейки таблицы помещается информация о наших собаках. В отличие от первых примеров путь к соответствующей информации тоже задается полностью. Попробуем, например, разместить информацию о кличке чуть-чуть иначе ex03-2.xml :

Шарик

Если мы в соответствующем XSL-файле поставим ссылку , то в соответствующем столбце никакой клички мы не увидим. Ссылка должна быть полной - . Вы можете самостоятельно поэкспериментировать с файлом ex03-2.xsl . Правильный результат приведен ниже.



#CCCCCC

С элементом xsl:if и с функцией position() мы уже знакомы. Оператор mod дает нам остаток от деления на 2. А элемент xsl:attribute позволяет нам динамически подставлять в файл результатов различные атрибуты. Это очень мощный элемент, мы разберем еще одно применение этого элемента в следующем параграфе. А сейчас приведем для полноты картины таблицу результатов.

Кличка

Цвет

рыжий с черными подпалинами

белый с черными пятнами

бело-серый

Кличка

Цвет

бело-серый

белый с черными пятнами

рыжий с черными подпалинами

Более интересные результаты мы получим, если попытаемся отсортировать таблицу по столбцу "Вес". Вначале попробуем сделать по аналогии с предыдущим примером - атрибут order-by="dogName" заменим на order-by="dogWeight" . Результат приведен ниже (ex03-4.xml , ex03-4.xsl).

Кличка

Цвет

белый с черными пятнами

рыжий с черными подпалинами

бело-серый

Таблица действительно отсортирована по столбцу "вес", но это не числовая, а строковая сортировка! Для того, чтобы браузер воспринял значения как числа, ему необходимо об этом сказать, - вместо order-by="dogWeight" необходимо написать order-by="number(dogWeight)" . Теперь мы получили правильный результат (ex03-5.xml , ex03-5.xsl).

Кличка

Цвет

бело-серый

белый с черными пятнами

рыжий с черными подпалинами

Приведем теперь пример сортировки по нескольким столбцам. Различные элементы в атрибуте order-by должны разделяться символом "; " - order-by="number(dogWeight); dogName" (ex03-6.xml , ex03-6.xsl). Таблица приведена ниже.

Кличка

Цвет

белый с черными пятнами

бело-серый

рыжий с черными подпалинами

Следующий пример работает только под управлением XML-парсера версии 3. В нем строки сортируются по одному столбцу - по кличке собаки. Этот пример уже приводился выше, однако теперь мы используем новый синтаксис (ex03-7.xml , ex03-7.xsl).

Отметим разницу.

При использовании нового синтаксиса используется ссылка на другое пространство имен

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

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

Кроме того, мы убрали атрибут order-by в элементе xsl:for-each и добавили другой элемент

Если элемент xsl:sort присутствует в элементе xsl:for-each , то он всегда должен стоять сразу после элемента xsl:for-each . Синтаксис элемента xsl:sort достаточно очевиден. В нем используются два атрибута: атрибут order - способ сортировки (по возрастанию или по убыванию) и атрибут select - имя поля, по которому производится сортировка. Если нам нужно отсортировать по первому элементу, как в данном примере, то вместо "dogName " можно было поставить точку - ". ", для других элементов нужно указывать его имя, например "dogColor ", если нам нужно отсортировать записи по цвету собаки. На самом деле атрибутов может быть пять - select , lang , data-type , order и case-order , но мы не будем здесь рассматривать все эти атрибуты, поскольку здесь мы не преследуем цель дать полное описание всех элементов, используемых в XSL, и их атрибутов.

Кличка

Цвет

бело-серый

белый с черными пятнами

рыжий с черными подпалинами

С использованием нового синтаксиса легко сменить сортировку по возрастанию на сортировку по убыванию (ex03-8.xml , ex03-8.xsl

Разница заключается в одной строке

Мы изменили значение атрибут order - значение ascending заменено на descending .

Таблица результатов приведена ниже.

Кличка

Цвет

рыжий с черными подпалинами

белый с черными пятнами

бело-серый

Покажем теперь сортировку по нескольким полям (ex03-9.xml , ex03-9.xsl). Этот пример работает только под управлением XML-парсера версии 3.

В этом примере у нас фигурируют две строки с элементом xsl:sort .


Строки вначале сортируются по весу собаки, а затем по их кличкам в алфавитном порядке. Обратите внимание - для того, чтобы сортировка выполнялась в числовой последовательности, в элемент xsl:sort мы добавили атрибут data-type . Таблица результатов приведена ниже.

Кличка

Цвет

Волчонок

темно-серый

белый с черными пятнами

бело-серый

рыжий с черными подпалинами

Заменив значение атрибута order by на descending , мы легко сгруппируем записи о собаках с одинаковым весом так, что клички будут идти в обратном алфавитном порядке. Соответствующий пример вы легко построите сами.






В этом примере таблица результатов полностью аналогична предыдущей.

Полностью преимущества нового синтаксиса проявляются при использовании функций.

Рассмотрим следующий пример (ex04-3.xml , ex04-3.xsl). В этом примере используется функция position() , определяющая порядковый номер фрагмента в исходном XML-файле.

Соответствующий элемент xsl:if .

< xsl : if test =" position ()<3">

Результат.

Продемонстрируем теперь использование более интересных функций - и contains(string,anySubstring) . Функция start-with(string,startSubstring) проверяет, начинается ли строка string с подстроки startSubstring . Пример - ex04-4.xml , ex04-4.xsl).

Синтаксис элемента xsl:if .

В этом элементе мы использовали переменные. Значения переменных были инициализированы ранее

< xsl : variable name =" varStartWith ">< xsl : value - of select ="// letter "/>

Переменная varStartWith

представляет собой подстроку, с которой должны начинаться требуемые нам клички. Она не меняется, поэтому инициализируется перед циклом. Переменная varDogName содержит кличку собаки, она меняется на каждом шаге цикла и, соответственно, инициализируется в теле цикла.

Элемент letter XML-файла содержит букву "Т ".

Замечание.
К сожалению, мне не удалось найти другого способа переправить в функцию start-with значения элементов XML-файла. С этим еще как-то можно смириться. Но точно так же не удалось использовать русские буквы в XSL-файлах, поэтому подстроку для сравнения пришлось формировать очень искусственным способом, извлекая ее из XML-файла. С этим смириться трудно, поэтому если мне удастся найти более элегантный способ, я изменю пример, а если такой способ найдет кто-то из читателей, - напишите, пожалуйста, мне об этом. Хотя в реальных примерах подобные подстроки обычно вводятся пользователем в формах поиска, поэтому, возможно, найденный способ вполне приемлем для практических нужд.

Результат.

Функция contains(string,anySubstring) проверяет, содержит ли строка string подстроку anySubstring . Пример - ex04-5.xml , ex04-5.xsl .

Синтаксис элемента xsl:if .

Этот пример полностью аналогичен предыдущему. Элемент letter XML-файла содержит букву "о ".

Результат.

Два элемента xsl:if , вложенные друг в друга, дают нам эффект оператора AND (ex04-6.xml , ex04-6.xsl).

Соответствующий фрагмент XSL-файла.



...

Результат.

Можно добиться и эффекта оператора OR. Для этого нам нужно включить два цикла, в каждом из которых формируется своя выборка (ex04-7.xml , ex04-7.xsl).

Соответствующий фрагмент XSL- файла.




















Результат.

Кличка

Цвет

Волчонок

темно-серый

белый с черными пятнами

рыжий с черными подпалинами

Ниже приведена строка, в которую мы внесли необходимые изменения.

xsl:for-each select="tutorial/enimals/dogs/dog " order-by="number(dogWeight); dogName;">

И таблица результатов.

Вы видите, что в таблице остались только те собаки, чей вес превышает 10 кг, причем первым стоит Шарик, чей вес меньше.

Все дальнейшие примеры в этом параграфе работают только под управлением XML-парсера версии 3.

Более гибкие возможности нам предоставляет новый синтаксис (ex04-2.xml , ex04-2.xsl). Обратите внимание - в новом синтаксисе атрибут order-by в элементе xsl:for-each не поддерживается, вместо него мы вставили два элемента xsl:sort .


Кроме того, условие фильтра у нас вынесено в отдельный элемент xsl:if .

Не забывайте указывать конечный тег элемента xsl:if .


Кличка

Цвет

бело-серый

рыжий с черными подпалинами

Если сортировка не требуется, то можно вставить два элемента xsl:if в один элемент xsl:for-each .

Элемент XSL:IF - улучшение внешнего вида таблиц

Элемент xsl:if можно применять не только для фильтрации строк выборки. Очевидно, что он может быть полезен и во многих других областях. В этом параграфе мы разберем пример использования элемента xsl:if для улучшения внешнего вида таблицы. Заодно мы продемонстрируем реальное использование функции position() . Мы будем использовать эту функцию для того, чтобы чередовать цвет четных и нечетных строк таблицы (ex04-8.xml , ex04-8.xsl).

Фрагмент XSL-файла, который отвечает за требуемое чередование.

Кличка

Цвет

рыжий с черными подпалинами

белый с черными пятнами

бело-серый

Динамическое формирование атрибутов на примере параметров ссылки в теге

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

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




DisplayDetails.html?dogName= select="dogName"/>& dogWeight=
To view some more details about click to dog name


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

И, наконец, мы ознакомились с комментариями в XSL-файлах. Это вторая строка приведенного фрагмента.

На этом мы завершим рассмотрение возможностей чистого XSLT и перейдем к последнему параграфу в этом документе - к динамическому изменению содержимого Web-страницы при помощи возможностей JavaScript и XML/XSLT без каких-либо дополнительных обращений к базе данных.

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

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

Определение языка XML

XML (eXtensible Markup Language ) – универсальный и расширяемым язык разметки данных, который не зависит от операционной системы и среды обработки. Xml служит для представления неких данных в виде структуры и эту структуру вы можете сами разработать или подстроить под ту или иную программу или какой-то сервис и именно поэтому данный язык называют расширяемый и в этом является его главное достоинство за которое его так ценят.

Как Вы знаете, языков разметки существует достаточно, например язык HTML , но все они, так или иначе, зависят от обработчика, например тот же самый html, код которого парсит браузер, является стандартизированным и не расширяемым, там есть четкие теги, синтаксис которых нельзя нарушать, а в xml Вы можете сами создавать свои теги, т.е. свою разметку. Главным отличием HTML и XML является то, что html всего лишь описывает разметку для отображения данных, а xml это абстрактная структура данных которую можно обработать и отобразить как угодно и где угодно, и в связи, с чем сравнивать эти языки не нужно, у них абсолютно разное назначение.

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

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

Также мне один раз пришлось хранить данные xml в базе MSSQL 2008, для того чтобы лучше представлять эти самые данные и обмениваться ими между сервером и клиентской частью приложения, это мы рассматривали в статье - Transact-sql – работа с xml .

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

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

Переходим к практике. И все примеры, которые мы будем рассматривать, я буду писать в Notepad++ только потому, что он очень удобен, но сейчас не будем об этом разговаривать, так как мы уже это рассматривали в статье - Чем хорош Notepad++ для начинающего разработчика.

XML теги

Язык XML для разметки использует теги (теги регистрозависимы), но не такие теги как в html, а те которые Вы придумаете сами, но у xml документа есть также четкая структура, т.е. есть открывающий тег и закрывающий, есть вложенные теги и есть, конечно, значения которые расположены в этих тегах, другими словами все, что нужно для начальных знаний xml это просто придерживаться этим правилам. Все вместе открывающий, закрывающий тег и значение называется элементом и весь xml документ состоит именно из элементов, которые в совокупности образуют структуру данных. У xml документа может быть только один корневой элемент , это запомните, так как если Вы напишите два корневых элемента, то это будет ошибка.

И пришло время привести пример xml разметки, и первый пример пока для синтаксиса:

<Начало элемента> <Начало вложенного элемента> Значение вложенного элемента

Как видите все довольно просто, и таких вложенных друг в друга элементов может быть очень много.

Теперь давайте приведем пример, настоящего xml документа:

Как видите, я здесь просто привел пример своего рода каталога книг, но я не объявлял этот документ, т.е. не писал XML декларацию, которая говорит приложению, которое будет обрабатывать эти данные, что здесь расположены данные именно xml и в какой кодировке они представлены. Также можно писать комментарии и атрибуты, так давайте приведем пример такого документа:


Книга 1 Иван Просто книга 1 Книга 2 Сергей Просто книга 2 Книга 3 Роман Просто книга 3

Где первая строка и есть объявление декларации о том, что это документ XML и его необходимо читать в кодировке UTF-8.

Эти данные без обработки будут выглядеть, например в браузере (Mozilla Firefox) следующим образом:


Надеюсь, Вы понимаете, что здесь catalog это корневой элемент, который состоит из элементов book, который в свою очередь состоит из элементов name, author и comment, также для примера я задал несколько атрибутов у элемента catalog и у элемента book.

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