5 Розширювана мова стилевих специфікацій XSL
XSL-таблиці стилів: відображення XML-документа
Основи використання XSL-таблиць стилів
XSL-таблиця стилів (eXtensible Stylesheet Language - розширювана мова таблиць стилів) зв'язується з XML-документом і повідомляє браузеру, як відображати дані XML. XSL дозволяє відкривати XML-документ безпосередньо в браузері без посередництва HTML-сторінки. XSL дозволяє здійснювати відбір і сортування даних XML при їх відображенні, надає доступ до всіх компонентів XML (елементам, атрибутам, коментарям та інструкцій по обробці), дає можливість включати в таблицю стилів сценарії. Існують два основні кроки для відображення XML-документа при використанні XSL-таблиці стилів: Створення файлу XSL-таблиці стилів. XSL є додатком XML, тобто XSL-таблиця являє собою коректно сформований XML-документ, який відповідає правилам XSL. Зв'язування XSL-таблиці стилів з XML-документом. У XML-документ включається інструкція по обробці xml-stylesheet, яка має наступну форму запису:
<? xml-stylesheet type = "text / xsl" href = xslFileURL?> Тут "xslFileURL" - URL файлу XSL-таблиці стилів. Якщо ви використовуєте повний (не відносний) URL, таблиця стилів повинна розміщуватися в тому ж домені, що й сам XML-документ. Інструкція по обробці xml-stylesheet додається в пролог XML-документа слідом за оголошенням XML. Якщо ви пов'язуєте з XML-документом більше однієї XSL-таблиці стилів, браузер використовує першу таблицю і ігнорує всі інші. Якщо ви пов'язуєте з XML-документом одночасно CSS-таблицю і XSL-таблицю стилів, браузер використовує тільки XSL-таблицю стилів. Якщо XML-документ не пов'язаний ні з CSS-таблицею, ні з XSL-таблицею стилів, Internet Explorer відобразить документ за допомогою вбудованої XSL-таблиці, яка використовується за замовчуванням. Ця таблиця розташована на вашому локальному комп'ютері за такою адресою:
res :/ / msxml3.dll/defaultss.xsl
Ви можете переглянути цю таблицю, ввівши зазначений URL в адресний рядок браузера Internet Explorer. XSL-таблиця включає один або кілька шаблонів, кожний з яких містить інформацію для відображення певної гілки елементів у XML-документі. XSL-таблиця повинна мати кореневий елемент xsl: stylesheet, що містить всі шаблони і має наступну форму запису:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl"> <! - Один або декілька елементів шаблонів ... -> </ Xsl: stylesheet>
Елемент xsl: stylesheet служить не лише сховищем всіх інших елементів, але також ідентифікує документ як XSL-таблицю стилів. Всі XSL-елементи належать простору імен xsl - тобто ім'я кожного елемента випереджається префіксом xsl. Це простір імен визначено в початковому тегу елемента xsl: stylesheet. Шаблони мають наступну форму:
<xsl:template match="/"> <! - Дочірні елементи ... -> </ Xsl: template>
Браузер використовує кожен шаблон для відображення певної гілки елементів в ієрархії XML-документа. Атрибут match шаблону вказує на певну гілку і аналогічний селектору в правилі CSS. Значення атрибута match називається зразком (pattern). Зразок у наведеному вище прикладі ("/") представляє "елемент", для якого є дочірнім кореневий елемент XML-документа (тобто представляє "сам" XML-документ). Цей шаблон буде таким чином служити для відображення всього документа XML. Кожна XSL-таблиця стилів повинна містити один і тільки один шаблон із зразком "/". Ви також можете включити один або кілька додаткових шаблонів для відображення певних підлеглих гілок XML-документа. Шаблон може містити два види XML-елементів: XML-елементи, що представляють HTML-розмітку, наприклад:
<h2> Каталог товарів </h2>
Браузер просто скопіює кожен HTML-елемент безпосередньо на вихід HTML. Кожен з елементів, що представляють HTML-розмітку, повинен бути коректно сформованим XML-елементом. Наприклад, щоб задати переклад рядка в HTML, ви повинні використовувати тег порожнього елемента
.
Власне XML-елементи, наприклад:
<xsl:value-of select="PRODUCT/TITLE" />
Браузер відрізняє XML-елемент від HTML-елемента, оскільки перший має префікс xsl. XSL-елемент value-of додає текстовий вміст певного XML-елемента і всіх його дочірніх елементів у вихідний модуль HTML. Ви вказуєте певний XML-елемент завданням зразка, який привласнюєте атрибуту select елементу value-of. XML-елемент у зразку задається за допомогою оператора шляху (у прикладі - "PRODUCT / TITLE"). Оператор шляху аналогічний неповного шляху до файлу, задающему місцезнаходження файлу щодо поточної робочої папки. Поточним елементом ("поточною папкою") є значення атрибута match самого шаблону. Якщо ви опустіть атрибут select для XSL-елемента value-of, буде використовуватися цей поточний елемент. Порядок проходження елементів value-of в шаблоні визначає порядок виведення інформації. Таким чином, можна сказати, що XSL-таблиця стилів має перевагу перед CSS-таблицею стилів, яка виводить дані завжди тільки в тому порядку, в якому вони слідують у XML-документі. Вам не потрібно включати в XSL-шаблон HTML-елементи "HTML" і "BODY", оскільки вони будуть сформовані автоматично. Щоб відобразити всі відповідальні зразком XML-елементи, а не тільки перший з них, слід використовувати XSL-елемент for-each, наприклад:
<xsl:template match="/"> <H2> Заголовок </ H2> <xsl:for-each select="PRODUCTS/PRODUCT"> <SPAN> Найменування: </ SPAN> <xsl:value-of select="TITLE" /> <! - Інші елементи шаблону ... -> </ Xsl: for-each> </ Xsl: template>
Атрибут select елемента for-each задає поточний елемент, тому всередині елемента for-each всі зразки (шляхи до елементів в атрибутах select) задаються вже щодо цього поточного елемента. Інший спосіб відображення всіх відповідальних зразком XML-елементів, а не тільки першого з них, полягає у використанні XSL-елемента apply-templates:
<xsl:template match="/">
<H2> Заголовок </ H2>
<xsl:apply-templates select="PRODUCTS/PRODUCT" />
</ Xsl: template>
<xsl:template match="PRODUCT">
Найменування: </ SPAN>
<xsl:value-of select="TITLE" />
<! - Інші елементи шаблону ... ->
</ Xsl: template>
У наведеному вище прикладі XSL-елемент apply-templates повідомляє браузеру, що для кожного елемента PRODUCT всередині кореневого елемента PRODUCTS він повинен обробляти шаблон, для атрибута match якого встановлено значення "PRODUCT". Якщо ви не вкажете атрибут select для елемента apply-templates, браузер буде обробляти відповідний шаблон (якщо такий є) для кожного дочірнього елемента поточного елемента. XSL трактує будь-який атрибут, який належить будь-якого елементу в XML-документі, як дочірній елемент. Однак, коли ви посилаєтеся на атрибути, ви повинні випереджати ім'я атрибута символом @. Наприклад, ось так може виглядати посилання на атрибут import елемента PRODUCT:
<xsl:value-of select="PRODUCT/@import" />