Про неймспейсах взагалі і їх беспрефіксной формі ми поговорили в минулий раз. Сьогодні ж ми докладніше розглянемо неймспейси з префіксом. Необхідність в них може виникнути, коли у вхідному 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-файлі є допоміжними і не повинні бути використані зовні: