про xmlns

Про неймспейсах взагалі і їх беспрефіксной формі ми поговорили в минулий раз. Сьогодні ж ми докладніше розглянемо неймспейси з префіксом. Необхідність в них може виникнути, коли у вхідному XML є елементи, які самі знаходяться в якомусь неймспейсе. Скажімо, у нас є такий входить XML:

І на виході ми отримаємо наступне:

Щоб побороти цю маленьку проблемку, потрібно використовувати атрибут exclude-result-prefixes у елемента :

Все, тепер на виході отримуємо чистий HTML:

А ось інша ситуація, коли в XSL можуть знадобитися неймспейси з префіксом: ми хочемо використовувати функції якогось XSL-розширення (наприклад, EXSLT), і для цього нам потрібно оголосити його неймспейс. Розглянемо приклад генерації випадкового числа:

Напевно, ви вже визнали себе прокажених - триклятий xmlns невідступно слідує за нами. Побороти його можна вже описаним способом, за допомогою exclude-result-prefixes. Однак XSL-специфікація передбачає для таких випадків інший атрибут - extension-element-prefixes. який якраз призначений для ліквідації префіксів розширень:

Знову наша взяла - кришталевої чистоти результат:

Якщо потрібно прибрати не один, а кілька префіксів, то їх необхідно розділяти пропуском:

Константа $ UTILS_ALPHABET потрібна тільки цим шаблоном utils.xsl, проте не дивлячись на свій префікс вона засмічує глобальну область видимості. Це можна виправити, замінивши префікс на неймспейс:

Повернемося до нашого прикладу. Ми дали префікс utils змінної, і це було основною метою. Тепер в будь-якому шаблоні, який імпортує наш utils.xsl, змінна $ utils: ALPHABET буде не видна.

Такий же фінт можна виконати і з шаблонами-матчами, а також іменованими шаблонами, які в XSL-файлі є допоміжними і не повинні бути використані зовні: