On the Net since 1992
Eng
Услуги
Домой  
XML

Простір імен в XML

World Wide Web Консорціум, 14 січня 1999 року

Даний документ являє собою переклад специфікації Namespaces in XML (W3C Recommendation) українською мовою. При цьому нормативним документом вважається оригінальна специфікація англійською мовою, яку можна знайти за адресою:

http://www.w3.org/TR/REC-xml-names

Переклад специфікації українською мовою розміщено за адресою:

http://www.bold.com.ua

 

Переклад виконала Панченко Наталія, Bold Endeavours

Дана версія:

http://www.w3.org/TR/1999/REC-xml-names-19990114

http://www.w3.org/TR/1999/REC-xml-names-19990114/xml-names.xml

http://www.w3.org/TR/1999/REC-xml-names-19990114/Overview.html

Остання версія:

http://www.w3.org/TR/REC-xml-names

Попередня версія:

http://www.w3.org/TR/1998/PR-xml-names-19981117

Редактори:

Tim Bray (Textuality) mailto:tbray@textuality.com

Dave Hollander (Hewlett-Packard Company) mailto:dmh@corp.hp.com

Andrew Layman (Microsoft) mailto:andrewl@microsoft.com

Статус даного документу

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

Резюме

Простір імен XML забезпечує просту методику отримання назв для елементів і атрибутів  в документах, які використовують мову розмітки, що розширюється. Це здійснюється шляхом прив’язування останніх до просторів імен, які ідентифікуються за допомогою посилань URL.

Зміст

1.        Причини виникнення і короткий опис

1.1.         Зауваження по нотації та використанню

2.        Декларування простору імен

3.        Повні імена

4.        Використання повних імен

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

5.1.         Область дії простору імен

5.2.         Простір імен за умовчанням

5.3.         Унікальність атрибутів

6.        Узгодженість документів

 

Додатки

І. Внутрішня структура простору імен XML (обговорення стандарту)

1. Недолік звичайного простору імен

2. Розділи простору імен XML

3. Розширені типи елементів та назви атрибутів

ІІ. Подяки (обговорення стандарту)

ІІІ. Посилання

ІV. Словник

 

1.   ПРИЧИНИ ВИНИКНЕННЯ І КОРОТКИЙ ОПИС

Ми передбачаємо появу такого додатку для обробки розширеної мови розмітки (XML), коли в одному XML документі (звичайно називається «словник розмітки») зібрані елементи і атрибути, які обумовлені та використовуються в багатьох програмних модулях. Привід для появи такої модульності: якщо є зрозумілий словник розмітки і є програмне забезпечення, що використовує його, то простіше використовувати таку розмітку ще раз, ніж займатися винахідництвом для її нової обробки.

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

Подібні роздуми виводять певні вимоги, щоб конструкції документа використовували універсальні імена, область дії яких виходить за рамки того документа, де вони були визначені. Дана специфікація описує механізм – простору імен XML, який дозволяє виконати цю умову.

(Визначення:) Простір імен XML – це ідентифікуюча з допомогою посилання URL (RFC 2396) колекція імен, які використовуються в XML документах для визначення типів елементів та іменування атрибутів. Простір імен XML відрізняється від тих «просторів імен», які зазвичай використовуються в комп’ютерних дисциплінах тим, що у варіанті для XML воно має внутрішню структуру, і, з математичної точки зору, набором не є. Дані  питання обговорюється в Додатку «І. Внутрішня структура простору імен XML (обговорення стандарту)».

(Визначення:) Посилання URL, що використовуються для ідентифікації просторів імен, вважаються  ідентичними, якщо вони співпадають з точністю до символу. Зауважимо, що посилання URL, які не являються ідентичними за вказаним змістом, в дійсності по функціональності можуть бути еквівалентними. Прикладом можуть стати посилання, які відрізняються тільки регістром, а також посилання в зовнішніх сутностях, які мають іншу базову адресу URL.

Назви в просторі імен XML можуть бути представлені у вигляді повних імен (qualified names), які містять єдиний символ двокрапки, що ділить таке ім’я на префікс простору імен і локальну частину. За допомогою префікса, який прив’язаний до посилання URL, здійснюється вибір простору імен. Поєднання URL простору імен і власного простору імен документу, що оброблюється одноманітно, формує ідентифікатор, унікальний усюди. Даються методика визначення області видимості префікса і значення за умовчанням.

Посилання URL може мати в собі символи, які є недопустимими для імен, тому саме посилання не можна використовувати в якості префікса простору імен. Таким чином, префікс простору імен служить замінювачем посилання URL. Далі описується побудований на атрибутах синтаксис, який дозволяє декларувати зв’язок префікса простору імен з посиланням URL. Програмне забезпечення, що підтримує вказаний сценарій використання імен, повинне вміти аналізувати і використовувати описані вище декларації та префікси.

1.1.         Зауваження по нотації та використанню

Відмітимо, що багато використовувані в сценаріях цієї специфікації нетермінальні конструкції визначаються не тут, а в специфікаціях XML[XML]. Якщо визначена тут нетермінальна конструкція має те ж саме ім’я, що було визначене для нетермінала в специфікації XML, то множина рядків, які відповідають даному сценарію тут, є лише підмножиною всіх рядків, які відповідають сценарію там.

В сценаріях цього документу абревіатура NSC розшифровується як «Namespace Constraint» (обмеження на простір імен), одне з правил, якому повинні слідувати документи, що відповідають потребам даної специфікації.

Відмітимо, що всі використані в прикладах назви доменів Internet (за виключенням w3.org) вибрані випадково і їх не слід сприймати за джерело інформації.

2.   ДЕКЛАРУВАННЯ ПРОСТОРУ

(Визначення:) Простір імен декларується за допомогою набору зарезервованих атрибутів. Назвою такого атрибуту повинно бути xmlns, або воно повинно використовуватись в якості префікса xmlns:

Вказані атрибути, як і будь-які інші атрибути XML, можуть бути вказані явно, або за умовчанням.

Назва атрибутів для декларації простору імен

[1]

NSAttName

::=

PrefixedAttName

 

 

 

 

DefaultAttName

 

[2]

PrefixedAttName

::=

'xmlns:' NCName

[ NSC: Начальный "XML" ]

[3]

DefaultAttName

::=

'xmlns'

 

[4]

NCName

::=

(Letter | '_') (NCNameChar)*

/* Имя XML за вычетом ":" */

[5]

NCNameChar

::=

Letter Digit | '.' | '-' | '_' | CombiningChar Extender

 

 

(Визначення:) Значенням атрибута для посилання URL є назва простору імен, яке використовується для його ідентифікації. Щоб назва простору імен могла служити для вказаної цілі, вона повинна мати властивості унікальності і постійності. Не ставляться завдання безпосереднього отримання по цьому імені схеми відображення (якщо така існує). Прикладом синтаксису, побудованого з подібними цілями, може служити синтаксис Uniform Resource Names [RF 2141]. Однак слід зауважити, що і звичайними адресами URL можна точно таким чином маніпулювати для досягнення тих же цілей.

(Визначення:) Якщо назва атрибута відповідає сценарію PrefixedAttName, то поле NCName визначає префікс простору імен. В область видимості того елемента, в якому ця декларація була дана, вказаний префікс використовується для прив’язки імен елементів та атрибутів до назви простору імен, вказаній в значенні атрибуту, що декларується. В таких деклараціях назва простору імен пустою не може бути.

(Визначення:) Якщо назва атрибуту відповідає сценарію DefaultAttName, то вказане в значенні атрибута назва простору імен в область видимості того елемента, де ця декларація була подана, стає назва простору імен за умовчанням. В декларації по умовчанню значення атрибута може бути нульовим. Простори імен за умовчанням і перевизначенням декларацій обговорюються в розділі «5. Простір імен для елементів та атрибутів».

Приклад декларації, що зв’язує префікс edi з простором імен, що має назву http://ecommerce.org/schema:

<x xmlns:edi='http://ecommerce.org/schema'>
  <!- для элемента "x" и его содержимого
       префикс "edi" связан с http://ecommerce.org/schema
  -->
</
x>

 

Обмеження для простору імен: Початковий XML

Префікси, які починаються з послідовності трьох літер x,m,l (в будь-якому регістрі), зарезервовані для використання в XML і пов’язаних з ним специфікаціях.

3.   ПОВНІ НАЗВИ

(Визначення:) В XML документах, які відповідають вимогам даної специфікації, частина імен (конструкцій, які відповідають нетермінальному Name) може бути представлено у вигляді повних імен (qualified names), які визначаються наступним чином:

Повне ім’я

[6]  QName ::= (Prefix ':')? LocalPart

[7]  Prefix ::= NCName

[8]  LocalPart ::= NCName

 

Поле Prefix визначає в повному імені префікс простору імен і повинне бути пов’язаним з посиланням URL в декларації простору. (Визначення:) Поле LocalPart визначає локальну частину (local part) повного імені.

Зауважимо, що префікс використовується тільки для збереження назви простору імен. При побудові імен, область дії яких виходить за рамки початкового документа, додатки повинні використовувати назву простору імен, а не префікс.

4.   ВИКОРИСТАННЯ ПОВНИХ ІМЕН

В XML документах, які відповідають потребам даної специфікації, повні імена даються для наступних типів елементів:

Типи елементів

[9]  STag ::= '<' QName (S Attribute)* S? '>' [ NSC: Декларированный префикс ]

[10]  ETag ::= '</' QName S? '>' [ NSC: Декларированный префикс ]

[11]  EmptyElemTag ::= '<' QName (S Attribute)* S? '/>' [ NSC: Декларированный префикс ]

 

Приклад використання повного імені в якості типу елементу:

<x xmlns:edi='http://ecommerce.org/schema'>
  <!-- пространство имен элемента 'price' - http://ecommerce.org/schema -->
  <edi:price units='Euro'>32.18</edi:price>
</
x>

 

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

Атрибут

[12]  Attribute ::= NSAttName Eq AttValue

                                        | QName Eq AttValue [ NSC: Декларированный префикс ]

 

Приклад використання повного імені в якості назви атрибута:

<x xmlns:edi='http://ecommerce.org/schema'>
  <!-- пространство имен атрибута 'taxClass' - http://ecommerce.org/schema -->
  <lineItem edi:taxClass="exempt">Baby food</lineItem>
</
x>

 

 

Обмеження простору імен: Декларований префікс

Префікс простору імен, якщо це не xml та xmlns, повинен бути об’явлений в атрибуті, який декларує простір імен і знаходиться в початковому тегі або того елемента, де цей префікс використовується, або елемента, який являється його предком (тобто знаходиться в елементі, у вмісті якого діє префіксна розмітка). Префікс xml за визначенням пов’язаний з назвою простору імен http://www.w3.org/XML/1998/namespace. Префікс xmlns використовується тільки для прив’язки до простору імен, але самостійно з якою-небудь назвою простору імен не пов’язується.

Таке обмеження може призвести до труднощів у роботі, якщо атрибут, який декларує простір імен, не був представлений безпосередньо в сутності документа XML, а був декларований у зовнішній сутності як атрибут за умовчанням. Подібні декларації можуть бути недоступними для програм, які використовують неперевіряючий XML процесор. Багато XML додатків, очевидно включаючи і ті, які залежать від простору імен, не можуть використовувати перевіряючий процесор. Для того, щоб такі додатки працювали коректно, декларації просторів імен повинні даватися або безпосередньо, або через атрибути за умовчанням, об’явлені у внутрішньому наборі DTD.

Якщо назва елемента або тип атрибутів зявляються в деклараціях DTD, то вони можуть бути представлені при цьому у вигляді повного імені.

Повні імена в деклараціях

[13]

[14]

[15]

[16]

[17]

[18]

doctypedecl ::= '<!DOCTYPE' S QName (