Но это порождает проблему: если вы обрабатываете таблицу стилей, полную таких элементов, как и , которые вы хотите видеть в результирующем документе — поскольку результирующий документ сам является таблицей стилей — как XSLT сможет отличить эти элементы буквального результата от элементов XSLT, которые он должен обработать?
Тут на помощь приходит элемент , поскольку он позволяет использовать новое пространство имен для элементов в исходном документе и преобразовывать это пространство имен обратно в правильное в результирующем документе. У элемента два атрибута:
• stylesheet-prefix
(обязательный). Префикс пространства имен, используемый в таблице стилей. Устанавливается в NCName или «#default»;
• result-prefix
(обязательный). Префикс, URI которого вы хотите присвоить пространству имен в результирующем документе. Устанавливается в NCName или «#default».
Следующий пример пояснит сказанное. Представьте, что вам нужно создать такую таблицу стилей:
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.1">
|
|
|
|
Заметьте, что здесь много элементов XSLT с префиксом «xsl», — значит, если вы попытаетесь создать их при помощи XSLT-преобразования, процессор XSLT попытается выполнить эти элементы. Чтобы избежать такой ситуации, я задал им новый префикс пространства имен, «xslt». Ниже показано, как это выглядит в таблице стилей, производящей предыдущую таблицу стилей (листинг 9.4). Заметьте, что нижеследующая таблица стилей просто выбирает корневой элемент исходного документа, чтобы она могла начать работать; она не использует исходный документ ни для каких других целей.
Листинг 9.4. Применение
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xslt="http://xslt">
|
|
|
|
.
.
.
Здесь я использую пространство имен "http://xslt" для префикса "xslt", но я смогу изменить его в выходном документе на правильное пространство имен XSLT, "http://www.w3.org/1999/XSL/Transform", воспользовавшись элементом :
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xslt="http://xslt">
|
|
|
|
Вот результат. Заметьте, что здесь все еще используется префикс пространства имен « xslt
», но это пространство имен теперь соответствует правильному пространству имен XSLT:
xmlns:xslt="http://www.w3.org/1999/XSL/Transform" version="1.1">
|
|
|
|
На этом глава завершается. В следующей главе мы рассмотрим, как работать с XSLT в коде.
Глава 10
Работа с API процессоров XSLT
Как вы видели на протяжении всей книги, при работе с XSLT вам не требовалось никакого программирования. Но все процессоры XSLT, с которыми мы работали до сих пор, — Xalan, Saxon, XT, Oracle и MSXML — разработаны так, что при желании к ним можно обращаться и из кода программы. Здесь мы рассмотрим, как работать с этими процессорами в прикладной программе. Можете спокойно пропустить эту главу, если вы не программист или не собираетесь им становиться. Но если вы не будете использовать возможности программного интерфейса, вы потеряете довольно много, в том числе поддержку XSLT на web-серверах. В этой главе будет также показано, как преобразовывать XML в реляционную базу данных.
Для взаимодействия с различными прикладными программными интерфейсами (API, Application Programming Interface) процессоров XSLT я буду применять Java и JavaScript. С различными процессорами XSLT можно работать и при помощи таких языков, как С++ или Visual Basic, но до сих пор подавляющее большинство программистов выбирало Java, а язык JavaScript удобен для обработки преобразований в Internet Explorer. Кроме того, используемые вами процессоры XSLT специально разработаны для взаимодействия с Java, хотя с процессором MSXML3 можно работать из программы как с СОМ-объектом. Как я говорил, с процессором MSXML в Internet Explorer можно работать при помощи JavaScript, такой пример был показан еще в главе 1. И, как я обещал в главе 1, здесь я рассмотрю его более подробно.
ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ДЛЯ РАБОТЫ С XSLT ИЗМЕНЯЕТСЯ ОЧЕНЬ БЫСТРО!
Будьте внимательны! Программное обеспечение для работы с XSLT изменяется очень быстро, зачастую ежемесячно, поэтому ко времени, когда вы будете читать книгу, оно частично может уже устареть. Тут уж ничего не поделаешь, и вам нужно за ним следить. Все примеры в этой главе были тщательно проверены по крайней мере тремя людьми — мной и двумя техническими редакторами, работавшими независимо, и на момент написания книги все примеры работали. Если у вас что-то не заработает, проверьте, конечно, такие элементы, как путь к классам Java, но также сверьтесь и с документацией по вашему процессору XSLT на предмет возможных изменений.
Читать дальше