Войти

Неймспейсы в XSLT

Для начала уясним, что вообще делают эти конструкции, начинающиеся с xmlns. У всесильного W3C на эту тему тоже есть свой документ, озаглавленный «Неймспейсы в XML». Почитав его (перед сном это делать не рекомендуется), мы узнаем, что основной причиной возникновения неймспейсов явилась необходимость отличать XML-элементы, обладающие одним и тем же именем, но имеющие разный смысл и предназначение, относящиеся к разным словарям разметки.

Атрибут version является обязательным, равно как и объявление XSL-неймспейса xmlns:xsl="http://www.w3.org/1999/XSL/Transform" (иначе было бы неясно, где в шаблоне сам XSL-код). А вот зачем нам нужна запись xmlns="http://www.w3.org/1999/xhtml", не очень понятно.

Хорошим примером такого разделения может служить как раз милый нашему сердцу XSL. Скажем, элемент <xsl:text> имеет неймспейс xsl и является управляющим XSL-кодом, тогда как элемент <text> неймспейса не имеет и просто отправляется на вывод, несмотря на то что имя у него тоже text.

Чтобы использовать какой-то неймспейс в своем XML (а XSL есть XML), его надо сначала объявить. Продолжая изучать вышеозначенный документ, мы обнаруживаем, что существуют два способа объявления неймспейсов: с префиксом и без префикса.

Следует также понимать, что XML-процессоры не «ходят» в интернет, чтобы по этому адресу чего-то скачать. Это всего лишь уникальный идентификатор. Однако здесь возникает вопрос: а что же он тогда выглядит как адрес в интернете? Почему вместо http://www.w3.org/1999/XSL/Transform не писать, например, «у-вас-ус-отклеился»? Ответ прост: когда-то условились, что по этому адресу URI в интернете должна висеть маленькая страничка, в двух словах рассказывающая, что это за URI и какой цели служит. И страничка эта предназначена для человека, а не для машины.

Итак, объявив неймспейс с префиксом, мы теперь можем его использовать — писать элементы, имеющие этот неймспейс. Как это делать, вы наверняка знаете:

Ровно так все делают в XSL-коде, когда хотят использовать какой-то XSL-элемент, например <xsl:template>. Как я уже сказал, префикс может быть любым, поэтому можно писать и так:

Но все привыкли использовать xsl — это коротко и удобно.

Элемент <html> и все его потомки законно получают XHTML-неймспейс. Но у абзацев-то он null (ибо в их файле import.xsl xmlns не указан), поэтому абзацы бунтуют и говорят нам: «Не хотим наследовать ваш XHTML. У нас свой неймспейс null». Это выражается в записи xmlns="" у каждого абзаца, которая как раз и означает, что неймспейс этого элемента null.

Вывод: надо или во всех XSL-файлах объявлять неймспейс по умолчанию, или во всех не объявлять. Лучше всего не объявлять — так создаётся меньше суеты в коде.

И на закуску еще одно интересное применение неймспейсов с префиксом — объявление приватных переменных и шаблонов. Всем нам иногда нужны глобальные переменные. Например, когда хочется объявить какую-нибудь константу в шаблоне, решающем определенную задачу. Импортирование такого шаблона с глобальной переменной неминуемо ведет к тому, что эта переменная будет видна везде в импортирующих шаблонах. Поэтому хорошим тоном является использование префикса в имени переменной. Такой же финт можно проделать и с шаблонами-матчами, а также именованными шаблонами, которые в XSL-файле являются вспомогательными и не должны быть использованы снаружи.


Оцените статью
0
Полезно
0
Интересно
0
Средне
0
Плохо

Смотрите также

Гид для школьников: 28 способов заработать первые деньги

Гид для школьников: 28 способов заработать первые деньги

Сегодня всё больше школьников стремятся к финансовой независимости и ищут способы заработка уже в подростковом возрасте. В статье разобраны официальные правила трудоустройства с 14 лет, варианты по...
Как открыть бизнес в ОАЭ: пошаговая инструкция регистраци...

Как открыть бизнес в ОАЭ: пошаговая инструкция регистрации компании в Дубае

Разбираем пошагово, как открыть бизнес в ОАЭ: от выбора юрисдикции и регистрации торгового названия до получения лицензии, визы и открытия банковского счёта. Понятная инструкция для тех, кто планир...
Массовый франчайзинг умер: 3 ключевых тренда 2026 года

Массовый франчайзинг умер: 3 ключевых тренда 2026 года

Франчайзинг в 2026 году уходит от массовых моделей к нишевым форматам, привязанным к образу жизни потребителей. На рынке формируются три ключевых направления: автокафе, премиальные франшизы и пет-ф...
LEVITA объединит управление 300 студиями в единой цифрово...

LEVITA объединит управление 300 студиями в единой цифровой среде

Сеть студий балета и растяжки LEVITA представила собственную ИТ-платформу для управления франчайзинговой сетью. Новый цифровой инструмент объединяет ключевые бизнес-процессы в единой среде, помогая...

Комментарии •0

Пожаловаться на комментарий