XSL Transformations

XSL Transformations
Розширення файлу: .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] мова програмування, яка використовується для програмування переробки 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, за редакцією Міхаеля Кея[en], отримала статус 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-програмі, в залежності від того, де їх визначено, а їхні значення можуть походи з-за меж програми. Значення змінної не може змінюватись під час інтерпретації.

Джерела[ред. | ред. код]

  1. XSL Transformations (XSLT) Version 2.0. Архів оригіналу за 13 червня 2006. Процитовано 21 липня 2006.
  2. Kepser, Stephan (2004), A Simple Proof for the Turing-Completeness of XSLT and XQuery (англ.), International Digital Enterprise Alliance, архів оригіналу за 27 вересня 2007, процитовано 2 квітня 2008
  3. Universal Turing Machine in XSLT. Архів оригіналу за 9 січня 2019. Процитовано 2 квітня 2008.
  4. index. Архів оригіналу за 11 травня 2008. Процитовано 2 квітня 2008.

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

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

Документація
Бібліотеки