Коротко про простори імен (XML Namespaces) - Секрети Інтернету

Подібні пости

При створенні документа XML ми можемо зіткнутися з тим, що різні за змістом елементи матимуть однакове ім'я. Ви можете побачити приклад у статті «10 головних помилок RSS» у пункті 5 «Неправильне розширення RSS».

Розберемо приклад, явно «притягнутий за вуха», проте простий для розуміння. Нам необхідно зробити вибірку із двох таблиць бази даних, що стосуються творчості якогось музичного колективу та сформувати каталог у вигляді XML-документу. В одній таблиці бази даних міститься інформація про аудіо записи колективу, в іншій - інформація про книги присвячені його творчості. З якоїсь причини (незрозуміло якою, але дуже важливою), і опис аудіо записів та опис книг має міститися в елементі «item». З тієї ж причини, і назви записів та назви книг повинні міститися в елементі "title". В результаті отримуємо щось на кшталт цього:

Простір імен для елементів

Вказівка ​​на те, до якого простору імен відноситься той чи інший елемент, записується перед початком імені елемента з роздільником у вигляді двокрапки:

Виходячи з вищевикладеного, в принципі можна оголосити простір імен для кожного елемента, який використовується в документі:

Простір імен, оголошений для будь-якого елемента, є таким для всіх вкладених у нього елементів, якщо для них не оголошено інших просторів імен.

Можна зробити ще простіше — оголосити всі простори імен за один раз у кореневому елементі:

Однак слід пам'ятати, що ідентифікатором простору імен є значення атрибуту xmlns, а не його назва-префікс. У наступному прикладі всі елементи належать одному простору (значення атрибуту дорівнює «http://ininfo.biz/group») хоча і мають різні імена-префікси (« music » та « book »):

Допускається і зворотне – елементи мають різні простори імен, але використовують однакові імена-префікси:

Можна обійтися без імен-префіксів. Для цього треба задати простір імен за замовчуванням. У цьому випадку цей простір буде використовуватися для елемента, в якому він зустрічається і для всіх його дочірніх елементів.

Для того, щоб скасувати простір імен заданий за замовчуванням, необхідно присвоїти атрибуту xmlns значення порожнього рядка:

Простір імен для атрибутів елементів

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

Однак простір імен за замовчуванням на атрибути не розповсюджується. Якщо атрибут не має префіксу, то він не належить до жодного простору імен:

Вищевикладене вірно і випадку, коли простір імен заданий для елемента, якого належить атрибут, наприклад:

* У громадянина Україна унікальним ідентифікатором може вважатися його ІПН. Не номер паспорта — паспорт тричі змінюється і у разі втрати виписується новий.