XSL Transformations

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до: навігація, пошук
XSL Transformations
XSLT.svg
Розширення файлу: .xsl, .xslt
MIME тип: application/xslt+xml[1]
Розробник: World Wide Web Consortium
Тип формату: мова для описання перетворень
Розширений з: XML
Стандарт(и): 1.0 (Recommendation),
2.0 (Recommendation)

Extensible Stylesheet Language Transformations, або XSLT — функціональна повна за Тьюрінгом[2][3][4][5] мова програмування, яка використовується для програмування переробки XML документів. При цьому вихідний документ не змінюється, натомість, на основі результатів переробки створюється новий. Новий документ може бути серіалізовано (виведено) обробником в стандартний синтаксис XML, або інший формат, такий як HTML або простий текст (англ.). Найчастіше, XSLT використовується для перетворення структурованих XML документів із однієї XML схеми в іншу, або для перетворення у веб сторінки або PDF документи.

XSLT з'явився як результат розвитку технології Extensible Stylesheet Language (XSL) в W3C протягом 19981999 років. Також було створено XSL Formatting Objects (XSL-FO) та XML Path Language (XPath). Головним редактором першої версії (та, як наслідок, головним розробником мови програмування) був Джеймс Кларк (англ.). Найпоширенішою сьогодні версією є XSLT 1.0, яку було опубліковано як Recommendation (рекомендацію) W3C 16 листопада 1999 року. Значно розширена і доповнена версія 2.0, за редакцією Міхаеля Кея (англ.), отримала статус Candidate Recommendation від W3C 3 листопада 2005 року.

Принципи роботи[ред.ред. код]

Схема базових елементів та кроків XSLT перетворення.

Програма на мові програмування XSLT складається із послідовного описання шаблонів (англ. template rules). В кожному шаблоні вказується, що слід додати до результуючого дерева коли XSLT інтерпретатор, обходячи, відповідно до фіксованого алгоритму, вихідне дерево, натрапляє на вершину, яка відповідає умовам шаблону. Інструкції в правилах шаблону обробляються ніби послідовно; але, фактично, вони утворюють функціональні вирази, які представляють результати їхнього виконання — наприклад, вершини, які слід додати до результуючого дерева.

В специфікації XSLT перетворення визначаються в термінах вихідного та результуючого дерева, для уникнення обмеження реалізацій специфічними для кожної системи прикладними програмними інтерфейсами, проблемами виділення пам'яті, мережевих ресурсів, вводу-виведення даних.

В XSLT використовується мова XPath для визначення підмножин вершин вихідного дерева, та для виконання обчислень. XPath також надає низку функцій, які XSLT розширює. Такий зв'язок із XPath додає потужності та гнучкості мові програмування XSLT.

Інтерпретація правил перетворень[ред.ред. код]

Кожен інтерпретатор XSLT програм має поводитись так, наче він виконав такі кроки перед перетворенням:

  1. Прочитати XSLT програму XML аналізатором та перетворити його вміст на дерево з вершинами (англ. stylesheet tree), відповідно до моделі даних XPath. Програми XSLT можуть бути модульними, тому, всі інструкції включення (xsl:include, xsl:import) також мають бути оброблені на цьому етапі, для того, аби підставити шаблони і правила із інших XSLT документів в дерево програми.
  2. Прочитати вихідний XML документ XML аналізатором, та перетворити його вміст на дерево (вихідне дерево), відповідно до моделі даних XPath. Програма XSLT може посилатись і на інші XML документи, викликаючи підпрограму document(). Вони, як правило, обробляються під час виконання програми, так як їх знаходження, можливо, має бути обчислено, або ці виклики не будуть взагалі виконуватись.
  3. Видалити всі вершини, які містять лише пробіли із дерева програми, за виключенням тих вершин, які є підвершинами елементів xsl:text. Це дозволяє розставляти пробіли та відступи у вихідних текстах XSLT програм, не створюючи побічні ефекти.
  4. Видалити вершини, які містять лише пробіли із вихідного дерева, якщо є інструкції xsl:strip-space в програмі. Це дозволяє обробляти XML документи, ігноруючи додаткові відступи.
  5. Доповнити дерево програми трьома вбудованими правилами шаблонів які визначають стандартну поведінку для будь якого типу вершин, які можуть трапитись під час переробки. Перше правило додається для обробки корневої вершини, або довільної вершини елемента; це правило вказує інтерпретатору на продовження роботи, та необхідність обробки кожної підвершини дерева. Друге правило додається для будь якої текстової вершини або вершини атрибута; воно вказує інтерпретатору зробити копію цієї вершини до результуючого дерева. Третє правило вказується для будь якої вершини коментаря або вершини інструкції інтерпретації; це правило нічого не робить. Шаблони, явно вказані в програмах, можуть перекривати деякі, або всі ці правила. Якщо в XSLT програмі не вказано жодних явних шаблонів, обробка вбудованими шаблонами призведе до рекурсивного обходу дерева, та тільки текстові вершини будуть скопійовані до результуючого дерева (атрибутні вершини не буде скопійовано, так як вони не є підвершинами своїх елементів). Як правило, такий результат не є корисним, так як він є, всього лише, конкатенацією всіх символів, які не належать до розмітки.

Після цього, інтерпретатор виконує такі операції для побудови та серіалізації результуючого дерева:

  1. Створити вершину-корінь результуючого дерева.
  2. Обробити корінь вихідного дерева. Процедуру обробки вершин описано далі.
  3. Серіалізувати результуюче дерево, якщо необхідно, відповідно до вказівок в інструкції xsl:output.

При обробці вершини, виконуються такі кроки:

  1. Шукається шаблон, з умовою якого найкраще збігається поточна вершина. Цьому сприяє атрибут «match» кожного шаблона, та вказаний в ньому зразок (подібний до XPath вираз), який вказує вершини, до яких можна застосовувати цей шаблон. Кожному шаблону надається інтерпретатором відносний пріоритет, або порядок імпортування для полегшення розв'язання конфліктів. Порядок розташування шаблонів в вихідному тексті програми також може полегшити розв'язання конфліктів між шаблонами, яким збігаються однакові вершини, але це не впливає на порядок, в якому обробляються вершини.
  2. Починається виконання інструкцій із тіла шаблону. Інструкціями вважається елементи, які знаходяться в просторі назв XSLT (як правило, ці елементи мають префікс xsl:). Ці інструкції мають спеціальну семантику, яка вказує на те, які їх слід інтерпретувати. Деякі із інструкцій вказують на додавання нових елементів до результуючого дерева; інші впливають на виконання програми. Елементи та символи, які не належать до XSLT та знаходяться в тілі шаблону, переносяться без змін в результуюче дерево. Коментарі, та інструкції інтерпретації ігноруються.

Виконання XSLT інструкції xsl:apply-templates призводить до того, що обирається для обробки нова множина вершин. Вершини визначаються із допомогою XPath виразів. Кожна вершина обробляється у відносному порядку появи у вихідному документі.

XSLT розширює бібліотеку функцій XPath та дозволяє визначати змінні в виразах. Ці змінні мають різні області видимості в XSLT програмі, в залежності від того, де їх визначено, а їхні значення можуть походи з-за меж програми. Значення змінної не може змінюватись під час інтерпретації.

Примітки[ред.ред. код]

Див. також[ред.ред. код]

Посилання[ред.ред. код]

Документація
Бібліотеки
  • EXSLT популярна спроба спільноти розробити розширення для XSLT.
  • FXSL бібліотека, яка реалізує підтримку функцій вищого рівня в XSLT. FXSL написано на XSLT.