
- •Лекция 4-07
- •Тема 5.3. Языки xslt и xsl
- •Тема 5.3. Языки xslTиXsl
- •5.3.1. Связывание документовXmLс таблицами стилей
- •5.3.2. Язык xsLи его компоненты
- •5.3.3. Преобразование документа с помощьюXslt
- •5.3.3.1. Технология преобразования
- •5.3.3.2. Процессоры xslt
- •5.3.4. Структура документаXslt
- •5.3.4.1. Пространство именXslt
- •5.3.4.2. Корневые элементы и элементы верхнего уровня документаXslt
- •5.3.4.3. Условное включение элемента
- •5.3.4.4. Модульная структура преобразованийXslt
- •5.3.4.4.1. Включение внешних файлов
- •5.3.4.4.2. Импорт внешних файлов
- •5.3.4.4.3. Использование сущностей
- •5.3.4.4.4. Импорт схем
- •5.3.5. Совместное использование преобразований и документовXml
- •5.3.6. Управление выводом вXslt
- •5.3.6.1. Элементxsl:output
- •5.3.6.2. Метод вывода "xml"
- •5.3.6.3. Метод вывода "xhtml"
- •5.3.6.4. Метод вывода "html"
- •5.3.6.5. Метод вывода "text"
- •5.3.7. Правила шаблона вXslt
- •5.3.7.1. Образцы и шаблоны
- •5.3.7.2. Объявлениешаблона
- •5.3.7.3. Вызов неименованных правил шаблона
- •5.3.7.4. Упрощенные преобразования
- •5.3.8. Создание узлов элементов и атрибутов вXslt
- •5.3.8.1. Элементxsl:element
- •5.3.8.2. Элементxsl:attribute
- •5.3.8.3. Элементxsl:attribute-set
5.3.3.2. Процессоры xslt
Процессор XSLTможет быть как самостоятельным приложением, либо частью приложения, выполняющего обработку документовXML.
Описанные выше средства выполнения преобразований документов XMLв языкеJavaпозволяют написать собственный процессорXSLT, который можно вставить в любую программу обработки документовXML.
Для случая, когда исходный документ XMLи таблица стилейXSLнаходятся в файле и преобразованный документ также выводится в файл, фрагмент программы преобразования будет иметь следующий вид:
File xmlFile = new File (имя-файла-XML);
File xsltFile = new File(имя-файла-XSL);
Source xmlSource = new StreamSource(xmlFile);
Source xsltSource = new StreamSource(xsltFile);
try {
result = new StreamResult(
new FileOutputStream(имя-выходного-файла)
);
}
catch(IOException e) {
System.out.println("I/O Error:" + e.toString());
}
TransformerFactory transFact =
TransformerFactory.newInstance();
Transformer trans =
transFact.newTransformer(xsltSource);
trans.setOutputProperty(OutputKeys.ENCODING,
"windows-1251");
trans.transform(xmlSource, result);
Существует множество готовых процессоров XSLT, которые можно использовать как отдельно, так и в составе разрабатываемых приложений. Основными критериями выбора процессораXSLTявляются:
поддерживаемые программные или языковые платформы;
поддержка расширений;
полнота реализации;
скорость.
Наиболее популярными свободно распространяемыми процессорами XSLTявляются:
процессор MSXML (Microsoft XML Core Services);
процессор Xalan (разработчик Apache XML Project);
процессор Saxon(разработчик Майкл Кей).
Процессор MSXML(последняя версия 6.0) разработан для платформыMSWindows. В составMSXML, помимо процессораXSLT версии1.0 входят такжеSAX-анализатор,DOM-анализатор и некоторые другие компоненты. Этот процессор встроен вInternetExplorer, и, кроме того, может использоваться отдельно в виде утилиты командной строкиmsxsl.exe, которая вызывается следующим образом:
msxsl.exeфайл-XML файл-XSLT-овыходной-файл
Процессор MSXMLподдерживает пользовательские функции расширения, которые могут быть написаны на языках сценариевVBScriptиJScriptи включены непосредственно в сами преобразования.
Процессор Xalanсоздан в двух вариантах: для языковых платформJavaиC++. Он поставляется с открытым исходным кодом и открытымAPI, что делает возможным его интеграцию в другие приложения. ПроцессорXalanJavaподдерживает набор интерфейсовTrAX(TransformationAPIforXML– программный интерфейс преобразований для XML), определяющий стандартные модели и методы преобразования документов XML в программах на языкеJava. ПроцессорXalanJavaтак же можно запускать из командной строки с помощью команды:
java -jar xalan.jar org.apache.xalan.xslt.Process
-in файл-XML -xsl файл-XSLT -out выходной-файл
Процессор XalanJava, как иXalanC++, реализует дополнительную библиотеку функций (которая по сравнению сXalanC++ также намного шире). Помимо этого,XalanJavaпозволяет создавать функции и элементы расширения наJavaи других языках программирования.
Процессор Saxon, так же как иXalan, является бесплатным продуктом с открытым кодом. ПроцессорSaxonподдерживаетTrAX, а также позволяет применять пользовательские анализаторы и сериализаторы и предоставляетAPIдляJava. Так же, как и рассмотренные выше процессорыXSLT, его можно запускать из командной строки с помощью команды:
java -jar saxon.jar -овыходной-файлфайл-XMLфайл-XSLT.
Расширения для Saxonмогут быть созданы на языкеJavaв виде функций и элементов.
Кроме того, последние версии процессора Saxonподдерживают многие черты спецификацииXSLT2.0 (автор этого процессора является редактором спецификацииXSLT2.0).
В пакете программ XMLSpyпрактически полностью реализована спецификация XSLT 2.0, а также спецификацияXPath2.0.