на Головну: Новости на reginfrom.net

W3C

Увага !

Рекомендації W3C 16 Серпня 2006 р., часткове редагування вiд 29 Вересеня 2006 г.

Дана версія:
http://www.w3.org/TR/2006/REC-xml11-20060816
Остання версія:
http://www.w3.org/TR/xml11
Попередня версія:
http://www.w3.org/TR/2006/PER-xml11-20060614
Редактори:
Tim Bray, Textuality та Netscape <tbray@textuality.com>
Jean Paoli, Microsoft <jeanpa@microsoft.com>
C. M. Sperberg-McQueen, W3C <cmsmcq@w3.org>
Eve Maler, Sun Microsystems, Inc. <eve.maler@east.sun.com>
François Yergeau
John Cowan <cowan@ccil.org>
Тарас Склепко - переклад українською мовою <taras.sklepko@gmail.com> (за пiдтримки авто базар rstcars).

Резюме

Розширювана Мова Розмітки (The Extensible Markup Language - XML) - це підмножина SGML, котра цілком описана в цьому документі. Її мета полягає в тому, щоб обслуговувати, отримувати та обробляти в Інтернеті загальний SGML, так само, як і HTML на теперешній час. XML був розроблений для зручності і для здійснення взаємодії з SGML та HTML.

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

Цей розділ описує статус даного документа на момент його публікації. Інші документи можуть заміняти цей документ. Список поточних W3C публікації та останнього перегляду цього технічного звіту можна знайти в індексі технічних доповідей W3C на http://www.w3.org/TR/.

Цей документ визначає синтаксис, створений на підрозділах існуючих та широко використовуючих міжнародних стандартыв обробки тексту (Standard Generalized Markup Language, ISO 8879:1986 (E) з внесеними поправками і виправленнями) для використання в World Wide Web. Цей документ є частиною XML Core Working Group як частина XML Activity.

29 вересня 2006 року цей документ був відредагований з метою усунути ряд помилок і можливих оманливих ситуацій.

Англійська версія цієї специфікації є єдиною нормативною версією. Перекладу даного документа, см. http://www.w3.org/2003/03/Translations/byTechnology?technology=xml11.

Цей документ - це Рекомендація W3C. Друге видання не є новою версією XML. Для зручності читачів, він включає в себе зміни накопичених помилок (http://www.w3.org/XML/xml-V11-1e-errata) в першому виданні XML 1.1, від 4 лютого 2004 року. Крім того, введене уточнення, коли розпоряджаючі ключові слова використовуються у формальному сенсі, це визначено в [IETF RFC 2119], що було змінено для кращої відповідності цілям [IETF RFC 2119]. Це видання замінює попередню Рекомендацію W3C від 4 лютого 2004.

Будь-ласка повідомляйте про помилки в цьому документі, за адресою xml-editor@w3.org, також є архів, або перекладачу за адресою <taras.sklepko@gmail.com>. Для зручності читачів, в XHTML версії з кольоровим переглядом показників також передбачено, що кожна версія висвітлює зміни помилок, що опубліковані в список друкарських помилок, а також посилання на конкретний недолік в цьому списку. Велика частина виправлень в направляєтся в службовий список з обгрунтуваннями для зміни. Всі помилки для цього видання доступні за адресою http://www.w3.org/XML/xml-V11-2e-errata.

Здійснена доповідь досяжна для ознайомитися на http://www.w3.org/XML/2006/06/xml11-2e-implementation.html. А набір для випробувань допомогає підтримуватися оцінки відповідності цієї специфікації.

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

Цей документ грунтується на 24 січня 2002 CPP з поправками, внесеними W3C Patent Policy Transition Procedure/Патентна політика W3C процедури переходу. W3C веде публічний список якого-небудь поясненя патенту у зв'язку з результатами діяльності цієї групи, також ця сторінка містить інструкції для розкриття патенту. Будь хто має основні претензії повинен розкрити інформацію по ним згідно з 6 розділом W3C Patent Policy/патентної політики W3C.

Зміст

1 Вступ
    1.1 Походження та цілі створення
    1.2 Термінологія
    1.3 Обгрунтування і список змін у XML 1.1
2 Документація
    2.1 Правильно сформовані документи XML
    2.2 Символи
    2.3 Загальні синтаксичні конструкції
    2.4 Символьні дані та розмітки
    2.5 Коментарі
    2.6 Інструкції по обробці
    2.7 Розділи CDATA
    2.8 Пролог і декларація типу документа
    2.9 Відокремлена декларація Документу
    2.10 Обробка пробілів
    2.11 Обробка кінця рядка
    2.12 Визначення мови
    2.13 Перевірка цілосності
3 Логічні структури
    3.1 Початкові, кінцеві теги та теги з порожніми Елементами
    3.2 Визначення типу елемента
        3.2.1 Зміст елементу
        3.2.2 Змішаний зміст
    3.3 Визначення списку атрибутів
        3.3.1 Типи атрибутів
        3.3.2 Типи атрибуту за замовчуванням
        3.3.3 Нормалізація значення атрибуту
    3.4 Розділи умов
4 Фізичні структури
    4.1 Посилання символів і екземплярів
    4.2 Визначення примірників
        4.2.1 Внутрішні примірники
        4.2.2 Зовнішні примірники
    4.3 Аналіз та перегляд примірників
        4.3.1 Визначення тексту
        4.3.2 Правильно сформовані проаналізовані та переглядені примірники
        4.3.3 Кодування символів примірників
        4.3.4 Данні про версію примірників
    4.4 Обробка XML процесором примірників і посилань
        4.4.1 Not Recognized/Не розпізнаеться
        4.4.2 Included/Увімкнений
        4.4.3 Included If Validating/Увімкнений при перевірці
        4.4.4 Forbidden/Заборонено
        4.4.5 Included in Literal/Увімкнений у ряд символів
        4.4.6 Notify/Повідомлення
        4.4.7 Bypassed/Пропустити
        4.4.8 Included as PE/Увімкнений як Екземпляр параметру
        4.4.9 Error/Помилка
    4.5 Конструкція виміщаючого тексту для Внутрішнього примірника
    4.6 Попередньовизначені примірники
    4.7 Визначення нотації
    4.8 Примірник документу
5 Відповідність
    5.1 Перевіряючі і неперевіряючі процесори
    5.2 Використання XML процесорів
6 Нотації

Додаток

A Посилання
    A.1 Нормативні посилання
    A.2 Інші посилання
B Визначення характеру Нормалізації
C Розгортання посилань на символи і примірники (ненормативно)
D Детерміністичні моделі змісту (ненормативно)
E Автовизначення кодувань символів (ненормативно)
    E.1 Визначення без зовнішньої інформації про кодування
    E.2 Пріоритети при наявності зовнішньої інформації про кодування
F W3C XML Working Group/Робоча група W3C XML (ненормативно)
G W3C XML Core Working Group/Робоча група W3C XML Core (ненормативно)
H Нотатки випуску (ненормативно)
I Пропозиції XML імен (ненормативно)


1 Вступ

Розширювана мова розмітки (Extensible Markup Language), скорочено XML описує клас об'єктів даних, що є XML документами і частково описує поведінку комп'ютерних програм, які їх обробляють. XML є застосуванням частковості або обмеженої форми SGML - Стандартна узагальнена мова розмітки (Standard Generalized Markup Language) [ISO 8879]. За структурою, документи XML є відповідними документами SGML.

XML документи складаються з одиниць зберігання закликав суб'єкти, які містять або розбору або unparsed даних. Синтаксичний аналіз даних складається з символів, деякі з яких форма характер даних, і деякі з яких форма розмітки. Markup кодує опис документа формат зберігання і логічної структури. XML забезпечує механізм вводити обмеження на формат зберігання і логічної структури.

XML documents are made up of storage units called entities, which contain either parsed or unparsed data. Parsed data is made up of characters, some of which form character data, and some of which form markup. Markup encodes a description of the document's storage layout and logical structure. XML provides a mechanism to impose constraints on the storage layout and logical structure.

[Визначення: A software module called an XML processor is used to read XML documents and provide access to their content and structure.] [Визначення: It is assumed that an XML processor is doing its work on behalf of another module, called the application.] This specification describes the required behavior of an XML processor in terms of how it must read XML data and the information it must provide to the application.

1.1 Походження та цілі створення

XML був розроблений XML Working Group (раніше відома як SGML Editorial Review Board), сформованої під керівництвом World Wide Web Consortium (W3C) у 1996 році. Її очолив Jon Bosak з Sun Microsystems за активної участі XML Special Interest Group (раніше відомої як SGML Working Group), також організованої W3C. Члени XML Working Group вказані в розділі Додаток. Dan Connolly є зв'язковим робочої групи з W3C.

Цілі створення XML:

  1. XML буде широко поширений в Internet.

  2. XML буде підтримувати великий діапазон додатків в структурі.

  3. XML буде сумісний з SGML.

  4. Він буде легким для написання програм, що обробляють документи XML.

  5. Кількість властивостей за вибором (optional) в XML буде зведена до абсолютного мінімуму, в ідеалі - до нуля.

  6. Документи XML повинні бути розбірливими та зрозумілими за змістом.

  7. Розробка XML повинна виконуватися швидко.

  8. Розробка XML повинна бути формальною і короткою.

  9. Документи XML повинні легко створюватися.

  10. Стислість в вигляді XML має мінімальне значення.

Ця специфікація, разом з відповідними стандартами (Unicode [Unicode] та ISO / IEC 10646 [ISO/IEC 10646] для символів, Internet RFC 3066 [IETF RFC 3066] міток ідентифікації мови, ISO 639 [ISO 639] за для кодів назв мови, та ISO 3166 [ISO 3166] за для кодів назв країн), надає всю інформацію, необхідну для розуміння XML версії 1.1 і побудови комп'ютерної програми для його обробки.

Ця версія специфікації XML може поширюватися вільно, оскільки всі тексти та юридичні повідомлення залишаються незмінними.

1.2 Термінологія

Термінологія, яка використовується для опису XML документів, визначених в тілі цієї специфікації. Ключові слова ПОВИННІ, НЕ ПОВИННІ, НАЛЕЖИТЬ, РЕКОМЕНДОВАНО, МОЖЕ, і НЕОБОВ'ЯЗКОВО, при підкресленні, повинні тлумачитись, як описано в [IETF RFC 2119]. Крім того, терміни, визначені в наступному списку, використовуються в будівництві цих визначень і при описі дій в XML процесора:

error/помилка

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

fatal error/фатальна помилка

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

at user option/на визначення користувача

[Визначення: Відповідні програми можуть або зобов'язані (залежно від модального дієслова у реченні) вести себе так, як описано; якщо це відбувається, користувачам обов'язково має бути представлений засіб включити або відключити пильнування поведінки.]

validity constraint/обмеження дії

[Визначення: норма, яка застосовується до всіх дійсних XML документів. Порушення обмежень правильності є помилкою; вона зобов'язана, за вибором користувача, видавати повідомлення процесорами XML перевірки.]

well-formedness/обмеження правильного формування

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

match/співпадає

[Визначення: (Для рядків або імен) Два рядки або імені порівнюються як ідентичні. Символи з безліччю можливих уявлень в Unicode (наприклад, символи, що мають попередньовизначену або "база + діакрітіческій знак" форми) співпадають тільки тоді, коли вони мають такі ж самі співпадіння в обох рядках. Приведення регістра не виконується. (Для рядків та правил граматики:) Рядок збігається з граматичним об'єктом, якщо він належить до мови, що генерується цим об'єктом. (Для вмісту і моделей вмісту:) Елемент збігається зі своїм оголошенням, якщо він відповідає за формою опису в обмеженні [VC: Дійсний елемент].]

for compatibility/для сумісності

[Визначення: Позначає пропозицію, що описує властивість XML, увімкнена тільки для того, щоб упевнитися, що XML залишається сумісним з SGML.]

for interoperability/для забезпечення взаємодії

[Визначення: Позначає пропозицію, що описує зобов'язующі рекомендації, включені для того, щоб збільшити шанси того, що документи XML можуть бути оброблені існуючою встановленою базою процесорів SGML, які існували до WebSGML Adaptations Annex /Адаптивного доповнення до ISO 8879.]

1.3 Обгрунтування і список змін у XML 1.1

Рекомендація стосовно XML 1.0 від W3C була вперше опублікована у 1998 році, і, незважаючи на видачу багатьох помилок кульмінацією в Третій Версії від 2004 року, так само (у намірі) без змін у зв'язку з тим, що добре сформований XML, а що ні. Тим не менш, стандарт Unicode, на який XML 1.0 спирається як характер специфікації не залишався незмінним, еволюціонуючи від версії 2.0 до версії 4.0 і в наступний період. Символи, які не присутні в Unicode 2.0, можливо, вже використовуються в характері даних XML 1.0. Тим не менш, вони не допускаються в імена XML, такі як тип елементу назви, імена атрибутів, перерахованих атрибутів цінності, обробка задач навчання, і так далі. Крім того, деякі символи, які повинні були бути вирішені в іменах XML не були через недоліки і невідповідності в Unicode 2.0.

Загальна філософія імен змінилася з XML 1.0. Якщо в XML 1.0 передбачено жорстке визначення імен, в якому все, що не дозволено було заборонено, в XML 1.1 імена спроектовані таким чином, що все, що не заборонено (для конкретного завдання) не допускається. Оскільки модернізація Unicode буде продовжуватись відносно останньої версії 4.0, подальших змін в XML можна уникнути, дозволивши, майже, будь-якого характеру, так само ї тих, які ще не визначено, в назвах.

Крім того, у спробах XML 1.0 пристосуватися до кінця лінії конвенцій різних сучасних операційних систем, але дискримінація по відношенню до конвенцій, що використовуються на IBM і IBM-сумісних ЕОМ. Як результат цього, XML документи на ЕОМ не є текстовими файлами у відповідності з місцевою конвенцією. Документи XML 1.0, складені на ЕОМ, повинні або порушувати кінець місцевих ліній конвенцій, або використовувати іншим чином, непотрібним перекладу в етапах до та після розбору покоління. Дозвіл простої взаємодії особливо важливий, коли дані зберігаються роздільно між ЕОМ і не ЕОМ системами (на відміну від копіювання з одного на інший). Тому XML 1.1 додає NEL (#x85) у список на кінець рядка символів. Для повноти, в Unicode рядок роздільник символу # x2028, також підтримуються.

Нарешті, існує значна потреба у визначенні стандартного представлення довільних символів Unicode в документах XML. Таким чином, XML 1.1 дозволяє використовувати символ посилання на контроль символи #x1 через #x1F, більшість з яких заборонені в XML 1.0. З міркувань надійності, однак, ці символи все ще не можуть бути використані безпосередньо в документи. З метою підвищення надійності кодування, виявлення додаткового контролю символів #x7F через #x9F, які вільно допускаються в документах XML 1.0, зараз також повинен з'явитись тільки як символ посилання. (Пробіли персонажів, звичайно, звільняються.) Невеличкі жертви за для забезпечення сумісності вважаються незначними. Через можливі проблеми з API, #x0 раніше заборонені як безпосередньо, так і в якості символу ведення.

Нарешті, XML 1.1 визначає ряд обмежень так званої "повної нормалізації" на XML документи, що творцеві документа слід дотримуватися, а також процесори документу повинні перевірити. Використання повністю нормалізованих документів забезпечує ідентичність зіставлення імен, значення атрибутів, а також характеру змісту можна зробити правильним шляхом простого бінарного порівняння Unicode рядків.

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

2 Документація

[Визначення: Об'єкт являє собою XML документ, якщо він добре сформований, як це визначено в цій специфікації. Крім того, XML-документ є дійсним, якщо він відповідає певним подальшим труднощям при перевірці.]

Кожен XML документ має логічну і фізичну структуру. Фізично документ складається з підрозділів закликів суб'єктів. Суб'єкт може передати іншим організаціям причину їх включення в цей документ. Документ починається з елементу "корінь" ("root"). Логічно, що документ складається з декларацій, елементів, коментарів, характеру літератури, а також обробки інструкцій, які чітко зазначені в документі розмітки. Логічні та фізичні структури мають засад правилів, як зазначено в 4.3.2 Правильно сформовані проаналізовані та переглядені примірники.

2.1 Правильно сформовані документи XML

[Визначення: Текстовий об'єкт є правильно сформованим документом XML, якщо:]

  1. Взятий в цілому, він збігається з документом, позначеним граматичним об'єктом.

  2. Він задовольняє всім обмеженням правильного формування, даними в цій специфікації.

  3. Кожен з розбираємих примірників, на які є пряме або непряме посилання в документі, є правильно сформованими.

Документ
[1]    document   ::=    (prolog element Misc*) - (Char* RestrictedChar Char*)

Збіг з об'єктом документа передбачає, що:

  1. Він містить один або більше елементів.

  2. [Визначення: Є тільки один елемент, який називається root, або елемент документа, ніяка частина якого не з'являється у вмісті будь-якого іншого елемента.] Для всіх інших елементів: якщо початкова мітка (тег) знаходиться всередині іншого елемента, то кінцевий тег знаходиться всередині того ж самого елементу. Простіше кажучи, елементи, обмежені початковою і кінцевою мітками (тегами), вкладаються відповідним чином один в інший.

[Визначення: Як наслідок цього, для кожного некорневого елемента C в документі є елемент P в такому документі, що C знаходиться у вмісті елементу P, але не у вмісті будь-якого іншого елемента, який знаходиться у вмісті P. P називається parent/батьком C, а C - child/нащадком P.]

2.2 Символи

[Визначення: Розбираємий екземпляр містить текст, послідовність символів, яка може представляти символьні дані або розмітку.] [Визначення: character/символ це атомарна (первинна) одиниця тексту, як спеціфіціїовано в ISO/IEC 10646 [ISO/IEC 10646] (див. також [ISO/IEC 10646-2000]). Дозволеними символами є символи табуляції, повернення каретки, переведення рядка і всі допустимі символи Unicode і ISO/IEC 10646. Версії цих стандартів, зазначені в A.1 Нормативні посилання, що діяли на момент створення цього документа. Нові символи можуть бути додані до цих стандартів у доповненнях і нових редакціях. Отже, процесори XML зобов'язані приймати будь-які символи в діапазоні, специфицированном для Char. Використання "символів сумісності", як зазначено в розділі 6.8 [Unicode] (див. також D21 в розділі 3.6 [Unicode3]), не рекомендовано.]

Character Range/Діапазон символів
[2]    Char    ::=    [#x1-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF] /* будь-який символ Unicode, виключаючи об'єднані блоки, FFFE і FFFF. */
[2a]    RestrictedChar    ::=    [#x1-#x8] | [#xB-#xC] | [#xE-#x1F] | [#x7F-#x84] | [#x86-#x9F]

Механізм кодування кодових точок символів всередині бітовий послідовностей може варіюватися від екземпляра до примірника. Всі процесори XML зобов'язані приймати кодування UTF-8 та UTF-16 з Unicode [Unicode]. Механізм позначення того, яка з двох кодувань використовується, і підключення інших кодувань обговорюється пізніше в розділі 4.3.3 Кодування символів примірників.

Примітка:

Авторам документу рекомендується уникати "сумісністності знаків", як це визначено в Unicode [Unicode]. Набір символів, визначених в наступних діапазонах, також заохочується. Вони або контрольовані символи або постійно невизначені Unicode символи:

[#x1-#x8], [#xB-#xC], [#xE-#x1F], [#x7F-#x84], [#x86-#x9F], [#xFDD0-#xFDDF], [#x1FFFE-#x1FFFF], [#x2FFFE-#x2FFFF], [#x3FFFE-#x3FFFF], [#x4FFFE-#x4FFFF], [#x5FFFE-#x5FFFF], [#x6FFFE-#x6FFFF], [#x7FFFE-#x7FFFF], [#x8FFFE-#x8FFFF], [#x9FFFE-#x9FFFF], [#xAFFFE-#xAFFFF], [#xBFFFE-#xBFFFF], [#xCFFFE-#xCFFFF], [#xDFFFE-#xDFFFF], [#xEFFFE-#xEFFFF], [#xFFFFE-#xFFFFF], [#x10FFFE-#x10FFFF].

2.3 Загальні синтаксичні конструкції

Цей розділ визначає деякі символи широко використовуються в граматиці.

S (пробіл), складається з одного або декількох порожніх (#x20) символів, повернення каретки, рядока стрічки чи вкладок.

Пробіл
[3]    S    ::=    (#x20 | #x9 | #xD | #xA)+

Примітка:

Присутність #xD у вищевказаних примірниках ведеться тільки для зворотної сумісності з Першим виданням. Як пояснюється в 2.11 Обробка кінця рядка, всі символи #xD буквально в XML-документі, або вилучені або замінені #xA символів до будь-якої іншої обробки є зробленими. Єдиний спосіб отримати #xD символ це сумістцтво цього та використання символу посиланням на буквальне значення.

[Визначення: Name/Ім'я це лексична одиниця, що починається буквою або одним із символів пунктуації та триваюча літерами, цифрами, дефісом, символами підкреслення, двокрапкою або full stops, відомими як символи іменування.] Імена, що починаються рядком "xml" або будь-яким рядком, збігається з (('X'|'x') ('M'|'m') ('L'|'l')), зарезервовані для цілей стандартизації в цій або наступних версіях даної специфікації.

Примітка:

У просторі імен в Рекомендації XML [XML Names/Імена XML] присвоює значення імен, що містять символи стовпців. Таким чином, авторам не слід використовувати двокрапки в XML іменах, за винятком імен мети, але, взагалі, XML процесори повинні погодитися з двокрапкою в якості імені символу.

У Nmtoken (знаку найменування) є будь-яке поєднання символів імені.

Перший символ в імені повинен бути NameStartChar, а також будь-які інші символи повинні бути NameChars; цей механізм використовується для запобігання іменам, починаючи з Європейського (ASCII) або цифр з основними поєднаннями символів. Практично всі символи дозволені в іменах, за винятком тих, які або знаходяться, або розумно могли бути використані як роздільники. Мета полягає в тому, щоб бути всеосяжним, а не ексклюзивним, так що написання систем поки ще не в кодуванні Unicode можна використовувати для імен XML. Див. Пропозиції за назвами XML для пропозицій щодо створення назв.

Авторам документу рекомендується використовувати імена, які мають сенс слова або поєднання слів у природних мовах, і, щоб уникнути символічних або білих символів в іменах. Зауважимо, що двокрапкою, дефіс-мінус, крапку (період), LOW LINE (підкреслення) та Близький DOT допускаються.

У ASCII символів і знаків пунктуації, також досить велика група Unicode символів, виключених з назв, оскільки вони є більш корисними як розділювачі в контекстах, де імена XML використовуються поза XML документами; работа ціеї групи дає умови жорстких гарантій про те, що не може бути елементом XML ім'я. Символ #x037E, грецький знак питання, не є сумісним, тому що коли воно стає нормалізованою комою, яка може змінити зміст об'єкта літери.

Names and Tokens/Імена та лексеми
[4]    NameStartChar    ::=    ":" | [A-Z] | "_" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]
[4a]    NameChar    ::=    NameStartChar | "-" | "." | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040]
[5]    Name    ::=    NameStartChar (NameChar)*
[6]    Names    ::=    Name (#x20 Name)*
[7]    Nmtoken    ::=    (NameChar)+
[8]    Nmtokens    ::=    Nmtoken (#x20 Nmtoken)*

Примітка

У Names/Імен та Nmtokens при виробництві використовуються для визначення обгрунтованості значення атрибута після нормалізації (див. 3.3.1 Типи атрибутів).

Літеральні дані це будь-який рядок, укладений в лапки і не містить знаків лапок, які використовуються в якості обмежувачів цього рядка. Літери використовуються для спеціфікації вмісту внутрішніх примірників/internal entities (EntityValue), значень атрибутів (AttValue) і зовнішніх ідентифікаторів (SystemLiteral). Зверніть увагу, що SystemLiteral може бути розібраний без сканування розмітки.

Literals/Літери
[9]   EntityValue   ::=   '"' ([^%&"] | PEReference | Reference)* '"'
|  "'" ([^%&'] | PEReference | Reference)* "'"
[10]   AttValue   ::=   '"' ([^<&"] | Reference)* '"'
|  "'" ([^<&'] | Reference)* "'"
[11]   SystemLiteral   ::=   ('"' [^"]* '"') | ("'" [^']* "'")
[12]   PubidLiteral   ::=   '"' PubidChar* '"' | "'" (PubidChar - "'")* "'"
[13]   PubidChar   ::=   #x20 | #xD | #xA | [a-zA-Z0-9] | [-'()+,./:=?;!*#@$_%]

Примітка:

Хоча продукт EntityValue допускає визначення примірника, що складається з одинного < в літералі (напр., <!ENTITY mylt "<">), рекомендується виключити таке використання, оскільки будь-яке звернення до такого примірника викличе помилку "правильності формування" (well-formedness).

2.4 Символьні дані та розмітки

Текст складається з суміші символьних даних та розмітки. [Визначення: Розмітка вводиться у вигляді стартових міток (тегів), кінцевих міток (тегів), міток (тегів) порожніх елементів, посилань на екземпляри, символьних мнемонік, коментарів, обмежувачів розділів CDATA, оголошень типу документа, інструкцій процесу, оголошень XML, текстових об'яв та будь-яких прогалин у верхньому рівні примірника документа (тобто поза елементом документа і не усередині іншої розмітки).]

[Визначення: Весь текст, який не є розміткою, утворює символьні дані документа.]

Символ амперсанда (&) і ліва кутова дужка (<) можуть з'являтися у своїй літеральній формі тільки при використанні в якості обмежувачів розмітки або в коментарях, інструкціях процесу або розділах CDATA. Якщо їх необхідно використати ще де-небудь, вони зобов'язані вводитись у вигляді послідовності, з використанням цифрової мнемонікі або рядка "&amp;" і "&lt;" відповідно. Права кутова дужка (>) може бути представлена рядком "&gt;" і зобов'язана, для забезпечення сумісності, вводитись за допомогою бігучої-послідовності "&gt;" або символьної мнемонікі, якщо з'являється в рядку "]]>" всередині вмісту, і якщо цей рядок не означає кінець розділу CDATA.

Символьні дані у вмісті елементів - це будь-який рядок символів, що не містить початкових обмежувачів або іншої розмітки. У розділі CDATA символьних дані - це будь-який рядок символів, не включи закриваючий ограничуючий розділ CDATA - "&quot;".

Для того, щоб значення атрибутів могли містити одинарні та подвійні лапки, апостроф, або символ одинарної лапки(') може бути представлений у вигляді "&apos;", а символ подвійної лапки (") - як "&quot;".

Character Data/Символьні Дані
[14]   CharData   ::=   [^<&]* - ([^<&]* ']]>' [^<&]*)

2.5 Коментарі

[Визначення: Коментарі можуть з'являтися в будь-якому місці документа поза розміткою; крім того, вони можуть з'являтися всередині оголошення типу документа в тих місцях, які допускаються граматикою. Вони не є частиною символьних даних документа: процесор XML може, але не повинен давати програмі можливість запитувати текст коментарів. Для забезпечення сумісності рядок "--" (double-hyphen/подвійний дефіс) зобов'язаний не з'являтися всередині коментарів.] Посилання на примірники параметрів не розпізнається всередині коментарів.

Коментарі
[15]   Comment   ::=   '<!--' ((Char - '-') | ('-' (Char - '-')))* '-->'

Приклад коментарю:

<!-- оголошення <head> & <body> -->

Зауважте, що граматика не допускає закінчувати коментарі поєднанням --->. Наступний приклад сформований неправильно.

<!-- B+, B, or B--->

2.6 Інструкції по обробці

[Визначення: Інструкції по обробці (PIs) allow documents to contain instructions for applications.]

Processing Instructions/Інструкції по обробці
[16]   PI   ::=   '<?' PITarget (S (Char* - (Char* '?>' Char*)))? '?>'
[17]   PITarget   ::=    Name - (('X' | 'x') ('M' | 'm') ('L' | 'l'))

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

2.7 Розділи CDATA

[Визначення: Розділи CDATA можуть з'являтися там же, де і символьних дані; вони використовуються для втечі-блоків тексту, що містить символи, які інакше будуть розпізнаватися як розмітка. Розділи CDATA починаються рядком "<![CDATA[" і закінчуються рядком "]]>":]

Розділи CDATA
[18]   CDSect   ::=    CDStart CData CDEnd
[19]   CDStart   ::=   '<![CDATA['
[20]   CData   ::=   (Char* - (Char* ']]>' Char*))
[21]   CDEnd   ::=   ']]>'

Внутри раздела CDATA только строка CDEnd распознаётся как разметка, так что амперсанд и левая угловая скобка могут появляться в своей литеральной форме: они не должны (и не могут) быть указаны в escape-последовательности с использованием "&lt;" и "&amp;". Раздел CDATA не может вкладываться.

В якості прикладу в розділі CDATA, де "<greeting>" і "</greeting>" розпізнаються як символьних дані, а не розмітка:

<![CDATA[<greeting>Hello, world!</greeting>]]> 

2.8 Пролог і декларація типу документа

[Визначення: документи XML 1.1 повинні починатися з декларації XML, що визначає версію XML що використовується.] Наприклад, нижче наводиться повний документ XML 1.1, добре сформований, але не дійсний:

<?xml version="1.1"?>
<greeting>Hello, world!</greeting>

Але нижче поданий документ XML 1.0, оскільки він не має XML формування:

<greeting>Hello, world!</greeting>

Функція розбівки в XML документі полягає в тому, щоб описати його структуру зберігання і логічну структуру і об'єднати парні атрибути "ім'я-значення" з його логічною структурою. XML надає механізм (декларація типу документа) для визначення перешкоди на логічну структуру і підтримання використання заздалегідь визначених одиниць зберігання. [Визначення: XML документ є дійсним, якщо він пов'язаний декларацією типу документа і якщо цей документ у відповідності з обмеженнями, виражений в ній.]

The document type declaration MUST appear before the first element in the document.

Пролог
[22]   prolog   ::=    XMLDecl Misc* (doctypedecl Misc*)?
[23]   XMLDecl   ::=   '<?xml' VersionInfo EncodingDecl? SDDecl? S? '?>'
[24]   VersionInfo   ::=    S 'version' Eq ("'" VersionNum "'" | '"' VersionNum '"')
[25]   Eq   ::=    S? '=' S?
[26]   VersionNum   ::=   '1.1'
[27]   Misc   ::=    Comment | PI | S

[Визначення: оголошення типу документа XML містить або вказує на оголошення розмітки, що надає грамматику для класу документів. Ця граматика відома як визначення типу документа або DTD. Оголошення типу документа може вказувати на зовнішній піднабір (особливий вид зовнішнього примірника), що містить оголошення розмітки, чи може безпосередньо містити об'яви розмітки у внутрішньому піднаборі, або може мати і те, і інше. DTD документа складається із двох з'єднаних піднаборів.]

[Визначення: оголошення розмітки це оголошення типу елемента, оголошення списку атрибутів та оголошення примірника, або оголошення нотації.] Ці оголошення можуть повністю або частково міститись всередині примірників параметрів, як описано нижче в розділах про правильне формування та обмеження правильності. Додаткову інформацію див. в 4 Фізичні структури.

Document Type Definition/Визначення типу документа
[28]   doctypedecl   ::=   '<!DOCTYPE' S Name (S ExternalID)? S? ('[' intSubset ']' S?)? '>'[VC: Root Element Type]
[WFC: External Subset]
[28a]   DeclSep   ::=    PEReference | S [WFC: PE Between Declarations]
[28b]   intSubset   ::=   (markupdecl | DeclSep)*
[29]   markupdecl   ::=    elementdecl | AttlistDecl | EntityDecl | NotationDecl | PI | Comment [VC: Proper Declaration/PE Nesting]
[WFC: PEs in Internal Subset]

Майте на увазі, що можна побудувати добре сформований документ, що містить doctypedecl що ні містить точок на зовнішній підмножині ні містить внутрішньої підмножини.

Оголошення розмітки можуть бути виконані повністю або частково шляхом заміщення тексту примірників параметрів. Далі в цій специфікації продукти окремих терміналів (elementdecl, AttlistDecl і т.д.) описують оголошення після всіх примірників параметрів, які були включені.

Посилання на примірники параметрів розпізнаються в будь-якому місці DTD (зовнішніх або внутрішніх поднаборах і зовнішніх примірниках параметрів), крім літералів, інструкції процесів, коментарів та вмістів ігнорування умовних секцій (див. 3.4 Розділи умов). Вони розпізнаються також у літералах значення екземпляра. Використання примірників параметрів у внутрішньому поднаборі обмежено так, як описано нижче.

Обмеження правильності: Тип кореневого елемента

Ім'я в оголошенні типу документа зобов'язане співпадати з типом елемента кореневого елементу.

Обмеження правильності: Відповідне Оголошення/PE Вкладення

Заміщуючий текст примірника параметра зобов'язаний правильно вкладатися в оголошення розмітки. Тобто, якщо перший або останній символ оголошення розмітки (markupdecl вище по тексту) міститься в заміщає тексті для посилання на PE, то обидва вони повинні бути в одному й тому ж заміщаючому тексті.

Обмеження правильної сформованості: PE у внутрішньому піднаборі

У внутрішньому піднаборі DTD, посилання на PE можуть з'являтися тільки там, де можуть з'являтися оголошення розмітки, але не усередині оголошень розмітки. (Це не відноситься до посилань, що з'являються у зовнішніх PE, або до зовнішніх піднаборів.)

Подібно до внутрішнього піднабору, зовнішній поднабор і будь-який зовнішній PE, на який є посилання в DeclSep, повинен складатися з серії повних оголошень розмітки типів, допустимих нетермінальной символьне markupdecl, перемежаемих пробілами або посиланнями на PE. Однак частини вмісту зовнішнього поднабора чи цих зовнішніх PE можуть умовно ігноруватися шляхом використання конструкцій розділів умов; це не допускається у внутрішньому піднаборі.

External Subset/Зовнішній Піднабір
[30]   extSubset   ::=    TextDecl? extSubsetDecl
[31]   extSubsetDecl   ::=   ( markupdecl | conditionalSect | DeclSep)*

Зовнішній піднабір і зовнішній PE відрізняються також від внутрішнього піднабора тим, що посилання на дозволені PE всередині оголошень розмітки, а не тільки між оголошеннями розмітки.

Приклад документа XML з оголошенням типу документа:

<?xml version="1.1"?>
<!DOCTYPE greeting SYSTEM "hello.dtd">
<greeting>Hello, world!</greeting> 

Системний ідентифікатор "hello.dtd" задає адреса (посилання URI) на DTD для даного документа.

Оголошення може бути також дано місцево, як у наступному прикладі:

<?xml version="1.1" encoding="UTF-8" ?>
<!DOCTYPE greeting [
<!ELEMENT greeting (#PCDATA)>
]>
<greeting>Hello, world!</greeting>

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

Якщо документ є добре сформованим або дійсним XML 1.0, і за умови, що вона не містить будь-яких символів в діапазоні [#x7F-#x9F], окрім як символ втечі, він може бути добре сформованим або дійсним XML 1.1, відповідно, просто шляхом зміни номера версії.

2.9 Відокремлена декларація Документу

Оголошення розмітки можуть впливати на зміст документа при передачі його від процесора XML програмі; прикладами можуть служити значення атрибутів за замовчуванням і оголошення примірників. Окреме оголошення документа, який може з'являтися як компонент оголошення XML, сигналізує про те, є чи ні такі оголошення, які є зовнішніми по відношенню до примірнику документа або примірника параметрів. [Визначення: зовнішнє оголошення розмітки визначено як оголошення розмітки, що з'являється у зовнішньому піднаборі або в EP (зовнішньому або внутрішньому, останній включається, оскільки від неревіряючих процесорів не потрібно їх читати).]

Standalone Document Declaration/Окреме Оголошення Документа
[32]   SDDecl   ::=    S 'standalone' Eq (("'" ('yes' | 'no') "'") | ('"' ('yes' | 'no') '"')) [VC: Standalone Document Declaration]

В окремому оголошенні документа, значення "yes" означає відсутність зовнішніх оголошень розмітки, що впливають на інформацію, віддану від процесора XML програмі. Значення "no" означає, що є або можуть бути такі зовнішні оголошення розмітки. Зауважте, що окреме оголошення документа означає лише існування зовнішніх оголошень. Існування в документі посилань на зовнішні примірники, якщо ці примірники оголошені всередині, не змінює їх окремий статус.

Якщо зовнішні оголошення розмітки відсутні, окреме оголошення документа не має сенсу. Якщо є зовнішні оголошення розмітки, але відсутні окремі оголошення документа, приймається значення "no".

Будь-який документ XML, в якому standalone="no", може бути конвертований за алгоритмом в окремий документ, що може бути необхідно для деяких мережевих програм.

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

Оголошення окремого документа зобов'язана мати значення "no", якщо будь-який із зовнішніх оголошень розмітки містить оголошення:

  • атрибутів зі значеннями за замовчуванням, якщо елементи, до яких застосовуються ці атрибути, з'являються в документі без специфікацій значень цих атрибутів, або

  • примірників (відмінних від amp, lt, gt, apos, quot), якщо посилання на ці екземпляри з'являються в документі, або

  • атрибутів зі значеннями, що є суб'єктами нормалізації, де атрибут з'являється в документі зі значенням, яке буде змінюватися в результаті нормалізації, або

  • типів елементів з вмістом елементу, якщо пробіл з'являється безпосередньо всередині об'єкта цих типів.

Приклад оголошення XML з оголошенням окремого документа:

<?xml version="1.1" standalone='yes'?>

2.10 Обробка пробілів

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

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

Спеціальний атрибут, званий xml:space, може бути приєднаний до елементу для того, щоб сигналізувати про намір зберегти пробіл в даному елементі для використання додатком. У valid/правильних документах цей атрибут, як і деякі інші, зобов'язаний бути оголошений, якщо він використовується. Якщо оголошений, він зобов'язаний бути даним як тип перераховування, значення якого - одне або обидва - "default" і "preserve". Наприклад:

<!ATTLIST poem  xml:space (default|preserve) 'preserve'>
<!ATTLIST pre xml:space (preserve) #FIXED 'preserve'>

Значення "за замовчуванням" ("default") означає, що додаток за замовчуванням в режимі обробки білого простору є прийнятним для даного елемента, а значення "зберегти" ("preserve"), вказує на намір про те, що программи повинні зберегти весь білий простір. Це оголошуе намір поширюватися на всі елементи змісту цього елемента в якому він визначений, якщо не переписане іншим, наприклад, у xml:space атрибуті. Ця специфікація не надає сенсу будь-якому значенню xml:space не "за замовчуванням" ("default") і "зберегти" ("preserve"). Подібна ситуація є помилкою, що буде вказано для інших значень, також XML процесор може повідомити про помилку, або може стягнути ігноруючий атрибут специфікації, або подання (помилкової) вартості заявки. Заявки можуть ігнорувати або відкидати помилкові значення.

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

2.11 Обробка кінця рядка

Звичайно XML структується елементами розподіленими на рядки, за для крашого редагування, та розпоширюються компьютерними програмами. Ці рядки, як правило, розділені деякими комбінаціями символів повернення каретки/CARRIAGE RETURN (#xD) і рядок/LINE FEED (#xA).

За для спрощення завдання програмі, XML процесори повинні діяти так, якби він нормалізовано розбирався зі всіх строк у зовнішніх суб'єктів (у тому числі документ особи) на вході, до розбору, шляхом переведення всіх наступних на один символ #xA:

  1. дві послідовності символів #xD #xA

  2. дві послідовності символів #xD #x85

  3. єдиний символ #x85

  4. єдиний символ #x2028

  5. будь-які #xD, що йдуть не відразу після #xA або #x85.

Символи #x85 і #x2028 не можуть бути визнані і достовірно переведені до тих пір, поки особа кодування декларації (якщо вона існує) не була прочитана. Таким чином, це є фатальною помилкою, використовувати їх в XML заяві чи тексті декларації.

2.12 Визначення мови

При обробці документа часто використовується ідентифікація природної або формальної мови, на якій написано вміст. Спеціальний атрибут, званий xml:lang, може бути вставлений до документа, щоб визначити мову, що використовується у вмісті і значеннях атрибутів будь-якого елемента в XML документі. У правильних документах цей атрибут, як і деякі інші, зобов'язаний бути оголошений, якщо використовується. Значеннями атрибута є ідентифікацією мови, як це визначено в [IETF RFC 3066], Tags for the Identification of Languages, або його наступника, крім того, порожний рядок може бути вказаний.

(Випуски з 33 по 38 вилучені.)

Наприклад:

<p xml:lang="en">The quick brown fox jumps over the lazy dog.</p>
<p xml:lang="en-GB">What colour is it?</p>
<p xml:lang="en-US">What color is it?</p>
<sp who="Faust" desc='leise' xml:lang="de">
<l>Habe nun, ach! Philosophie,</l>
<l>Juristerei, und Medizin</l>
<l>und leider auch Theologie</l>
<l>durchaus studiert mit hei&#xDF;em Bem&#xFC;h'n.</l>
</sp>

Формулювання зазначеного xml:lang відноситься до елементу, коли він визначається (у тому числі значення його атрибутів), і всі елементи його змісту, якщо перевизначено з іншого екземпляру xml:lang. Зокрема, порожні значення xml:lang використовуються елементи B для перевизначення специфікації xml:lang за яким додається елемент, без вказівки на іншу мову. У B, то вважається, що немає мови наявної інформації, так само, як якщо xml:lang не був зазначений в B або будь-якому з його предків. Застосування визначає, які елементи в атрибуті є значенням і які його частини є характером вмісту, якщо це розглядається в якості значення залежної мови та описується xml:lang.

Примітка:

Інформація про мову також може бути надана зовнішніми транспортними протоколами (наприклад, HTTP або MIME). При наявності цієї інформації може бути використана XML програма, але більше місцевої інформації, представлено в xml:lang та слід розглядати його перекриття.

Проста декларація з xml:lang може приймати форму

xml:lang CDATA #IMPLIED

однак конкретні значення за замовчуванням також можуть бути надані, якщо це доречні. У колекції французьких віршів Англійська для студентів, зазначає на Англійській, з xml:lang атрибут може бути оголошений таким чином:

<!ATTLIST poem   xml:lang CDATA 'fr'>
<!ATTLIST gloss  xml:lang CDATA 'en'>
<!ATTLIST note   xml:lang CDATA 'en'>

2.13 Перевірка цілосності

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

  1. На заміну тексту всіх структур обробки

  2. Всі тексти, що відповідають, у зв'язку з одним з таких виробництв:

    1. CData

    2. CharData

    3. content

    4. Name

    5. Nmtoken

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

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

Примітка:

У складанні символу всі символи Unicode є ненульовим класом об'єднання, а також невеликим числом класів нуль символів, які, тим не менш, беруть участь у якості не-початковий символ Unicode в деяких канонічних розкладаннях. Оскільки ці символи означало слідують бази символів, обмежуючи відповідних конструкцій (у тому числі зміст), почавши зі складання символу НЕ значимо зменшує виразність XML.

Якщо при перевірці повної нормалізації, процесор стикається з персонажами, для яких перша не може бути визначена, нормалізації властивостей (наприклад, символи введені у версії Unicode [Unicode] пізніше, ніж той, що використовується у вживаному процесорі), то процесор може, на користувачів опції, ігнорувати будь-які можливі ненормалізованого виду викликані цими символами. Можливість ігнорувати ці ненормалізовані види НЕ ПОВИННА бути обрана шляхом застосування, коли надійність і безпека є найважливішими.

XML процесори НЕ повинні перетворювати вхідні дані щоб бути в повній мірі нормалізованими. XML програми, які створюють на виході XML 1.1 з будь-якої XML 1.1 і XML 1.0 внутрішньої побудови, повинен забезпечити повну нормалізацію на виході, але не є необхідною для внутрішньої обробки бланків щоб бути повністю нормалізованими.

Мета цього розділу полягає в тому, щоб закликати до рішучіх процесорів XML для забезпечення того, щоб розробники XML документів належним чином їх унормалізовували, так що XML програми можуть зробити тести, такі, як особистість порівняння рядків, не турбуючись про різні можливі "написання" поєднань Unicode, що дозволяється.

Коли суб'єкти передині не в Unicode кодуванні, якщо процесор перекодовує їх в Unicode, то слід використовувати нормалізації Транскодер.

3 Логічноі структури

[Визначення: кожен документ XML містить один або більше елементів, обмежених або початковими і кінцевими тегами, або, для порожніх елементів, тегами порожніх елементів. Кожен елемент має тип, який ідентифікується по імені, яке іноді називається "generic identifier" (GI) - родовий ідентифікатор, і може мати набір специфікацій атрибутів.] Кожна специфікація атрибутів має ім'я і значення.

Element
[39]   element   ::=    EmptyElemTag
| STag content ETag [ОПВ: Збіг типу елементу]
[ВП: Вірний елемент]

Ця специфікація не вводить семантичних обмежень, використання або (синтаксичного) іменування типів і атрибутів елементів, за винятком того, що імена починаються з (('X'|'x')('M'|'m')('L'|'l')), зарезервовані для цілей стандартизації цієї і наступних версій даної специфікації.

Обмеження правильної сформованості: Відповідність Типа елемента

Name в закриваючим теге елемента зобов'язаний відповідати типу елемента у початковому тегу.

Обмеження правильності: Елемент вірний

Елемент є вірним, якщо є оголошення, що відповідає elementdecl (статуту щодо декларації елемента), де Name відповідає типу елемента і витримується одне з наступних умов:

  1. Декларація збігаеться з Порожнім значенням і елемент не має вмісту (навіть не особа посилання, коментарі, НІ або пробіл).

  2. Декларація збігається з дітячими-елементами та послідовностями елементів, дитина відноситься до мови, породженої регулярним виразом у змістовній моделі з опціональною прогалиною, коментарі та PIs (тобто розмітки відповідні до випуску [27] Різне) між тегами початку є перші дочірні елементи, між елементами або між останніми елементами дитини та в кінці тега. Зауважимо, що розділ CDATA, що містить лише білий-простір або посилання на суб'єкт, чи характер заміни тексту літератури розширення до білого-простору не відповідають nonterminal S, і, отже, не може з'являтися на цих позиціях, однак, посилання на внутрішні органи з буквальним значенням, що складаються із символів посилання розширення до білого-простору, не відповідають S, так як заміна тексту його білим-простором в результаті розширення характеру літератури.

  3. У декларації збігів змішаної,, зміст (після заміни будь-якої особи посилання з їх заміни тексту), що складається з символів даних (у тому числі розділи CDATA), коментарі, PIs і дитячих елементів, чиї імена збігаються видами зі змістом моделі.

  4. Декларація відповідності будь-чого, і зміст (після заміни будь-якого особи посилання з їх заміна тексту), що складається з символів даних, розділи CDATA, коментарі, PIs і дитячої елементи якого типів були оголошені.

3.1 Початкові і кінцеві теги, теги порожніх елементів

[Визначення: На початку кожного непорожній XML елемент характеризується початковий тег.]

Тег початку
[40]   STag   ::=   '<' Name (S Attribute)* S? '>'[ОПВ: Унікальний Att Spec]
[41]   Attribute   ::=    Name Eq AttValue [ВП: Тип значення атрибуту]
[ОПВ: Ні Посилань на Зовнішні Об'єкти]
[ОПВ: Ні < в значення атрибуту]

Name у початковому і кінцевому тегах задає тип елементу. [Визначення: Пари Name-AttValue (Ім'я-Значення атрибута) називаються специфікаціями атрибутів елемента], [Визначення: з Name в кожній парі, званим ім'ям атрибута] і [Визначення: вмістом AttValue (текстом між обмежники ' або ") в якості значення атрибуту.] Зверніть увагу, що порядок специфікації атрибутів у початковому теге або в теге порожнього елемента не має значення.

Обмеження правильної сформованості: Ні < в значення атрибуту

Заміщуючих текст будь-якого об'єкта, що викликається прямо або опосередковано в значенні атрибуту, не зобов'язаний містити <.

Приклад початкового тега:

<termdef id="dt-dog" term="dog">

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

End-tag/Кінцевий Тег
[42]   ETag   ::=   '</' Name S? '>'

Приклад кінцевого тега:

</termdef>

[Визначення: : Текст між початковим і кінцевим тегамі називається вмістом елемента:]

Content of Elements/Вміст елементу
[43]   content   ::=    CharData? ((element | Reference | CDSect | PI | Comment) CharData?)*

[Визначення: Елемент без вмісту називається порожнім.] Пустой елемент представлений або початковим тегом, після якого безпосередньо слід кінцевий тег, або тегом порожнього елементу. [Визначення: Тег порожнього елемента має особливу форму:]

Tags for Empty Elements/Теги порожніх Елементів
[44]   EmptyElemTag   ::=   '<' Name (S Attribute)* S? '/>'[ОПВ: Унікальний Att Spec]

Теги порожнього елемента ожуть використовуватися для будь-якого елемента, що не має вмісту, незалежно від того, оголошений він ключовим словом EMPTY чи ні. Для цілей взаємодії тег порожнього елемента повинен використовуватися (і тільки він повинен використовуватися) для тих елементів, які оголошені як EMPTY.

Examples of empty elements/Приклади порожніх елементів:

<IMG align="left"
src="http://www.w3.org/Icons/WWW/w3c_home" />
<br></br>
<br/>

3.2 Визначення типу елемента

Структура елемента XML документа може, для цілей перевірки, бути обмежена шляхом використання оголошень типу елемента і списку атрибутів. Оголошення типу елемента обмежує вміст елемента.

Оголошення типу елемента часто обмежують типи елементів, які можуть з'являтися як нащадків елемента. Процесор XML, за вибором користувача, може видавати попередження, якщо в рекламі згадується тип елемента, для якого відсутня реклама, але це не є помилкою.

[Визначення: Оголошення Типа елемента має форму:]

Element Type Declaration/Оголошення Типу елементу
[45]   elementdecl   ::=   '<!ELEMENT' S Name S contentspec S? '>'[ВП: Унікальне Оголошення Типа елемента]
[46]   contentspec   ::=   'EMPTY' | 'ANY' | Mixed | children

де Name задає тип оголошуємо елементу.

Приклади оголошень типів елементів:

<!ELEMENT br EMPTY>
<!ELEMENT p (#PCDATA|emph)* >
<!ELEMENT %name.para; %content.para; >
<!ELEMENT container ANY>

3.2.1 Зміст елементу

[Визначення: Елемент типу має елемент змісту, якщо елементи цього типу повинні містити тільки дитина елементів (немає характеру даних), опціонально, розділених пробілами (символів, що відповідає nonterminal S).] [Визначення: В даному випадку, обмеження включає в себе модель Змісту простої граматики, що регулюють допустимий типів дитини елементів і порядок, в якому вони можуть з'явитися.] Граматика побудована на вміст часток (CP), який складається з імен, списків вибору змісту частинок, або Послідовність списків вмісту частинок:

Element-content Models/Моделі вмісту елемента
[47]   children   ::=   (choice | seq) ('?' | '*' | '+')?
[48]   cp   ::=   (Name | choice | seq) ('?' | '*' | '+')?
[49]   choice   ::=   '(' S? cp ( S? '|' S? cp )+ S? ')'[ВП: Відповідне Вкладення Груп / Екземплярів Параметрів]
[50]   seq   ::=   '(' S? cp ( S? ',' S? cp )* S? ')'[ВП: Відповідне Вкладення Груп / Екземплярів Параметрів]

де кожне Name - це тип елемента, який може з'являтися як дочірній. Будь-яка частка вмісту у списку вибору може з'являтися у вмісті елементу в тому місці, де список вибору з'являється в граматиці; частинки вмісту, що з'являються в списку послідовностей, зобов'язані з'являтися у вмісті елементу в тому порядку, в якому вони дані в списку. Необов'язкові символи після імені або списку керують тим, чи може елемент або частинки вмісту в списку з'являтися один або більше разів (+), нуль або більше (*) або нуль або один (?) Раз. Відсутність такого оператора означає, що елемент або частка вмісту зобов'язаний / а з'явитися тільки один раз. Цей синтаксис і значення ідентичні таким, що використовуються в продуктах / productions в цiй специфікації.

Вміст елемента збігається з моделлю вмісту, якщо і тільки якщо, є можливість трасування шляху в моделі вмісту, підкоряючись операторам послідовності, вибору і повторення, і кожен елемент вмісту відповідає типу елемента в моделі вмісту. Для сумісності, вважається помилкою, якщо елемент у документі може відповідати більш ніж одному появи типу елемента в моделі вмісту. Додатково див. D Детерміністичні Моделі вмісту.

Обмеження правильності: Відповідне вкладення Груп / Екземплярів Параметрів

Заміщуючих текст примірника параметра зобов'язаний бути вкладений відповідним чином за допомогою груп дужок. Можна сказати, що, якщо закривають або відкривають дужки конструкцій choice, seq або Mixed містяться в заміщає тексті примірника параметра, то обидва (тега) зобов'язані бути в одному й тому ж заміщає тексті.

Для цілей взаємодії, якщо посилання на примірник параметра з'являється в конструкції choice, seq, або Mixed його заміщуючих текст повинен містити як мінімум один непробельний символ, і ні перше, ні останній непробельний символ заміщає тексту не повинен бути коннектором (| або ,).

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

<!ELEMENT spec (front, body, back?)>
<!ELEMENT div1 (head, (p | list | note)*, div2*)>
<!ELEMENT dictionary-body (%div.mix; | %dict.mix;)*>

3.2.2 Змішаний зміст

[Визначення : Тип елемента має змішаний вміст, якщо елементи цього типу можуть містити символьних дані, перемежаемие дочірніми (необов'язковими) елементами.] У цьому випадку можуть бути обмежені типи дочірніх елементів, але не їх порядок або кількість появи:

Mixed-content Declaration/Оголошення змішаного вмісту
[51]   Mixed   ::=   '(' S? '#PCDATA' (S? '|' S? Name)* S? ')*'
| '(' S? '#PCDATA' S? ')' [ВП: Відповідне Вкладення Груп / Екземплярів Параметрів]
[ВП: Відсутність дублікатів Типів]

Name задаёт тип элемента, который может появляться в качестве потомка. Ключевое слово #PCDATA исторически произошло от термина "parsed character data/разбираемые символьные данные."

Приклади оголошень змішаного вмісту:

<!ELEMENT p (#PCDATA|a|ul|b|i|em)*>
<!ELEMENT p (#PCDATA | %font; | %phrase; | %special; | %form;)* >
<!ELEMENT b (#PCDATA)>

3.3 Визначення списку атрибутів

Атрибути використовуються для ассоціірованія пар ім'я-значення з елементами. Специфікації атрибутів можуть з'являтися тільки в початкових тегах і тегах порожніх елементів, тому продукції / productions, що використовуються для їх розпізнавання, з'являються в розділі 3.1 Початкові і кінцеві теги, теги порожніх елементів. Оголошення списків атрибутів можуть використовуватися:

[Визначення: Оголошення списку атрибутів визначають ім'я, тип даних і значення за замовчуванням (якщо є) кожного атрибуту, асоційованого з даним типом елемента:]

Attribute-list Declaration/Оголошення Списку атрибутів
[52]   AttlistDecl   ::=   '<!ATTLIST' S Name AttDef* S? '>'
[53]   AttDef   ::=    S Name S AttType S DefaultDecl

Name в правилі AttlistDecl - це тип елемента. За вибором користувача, процесор XML може видавати попередження, якщо атрибути оголошуються для типу елемента, який сам не визначений, але це не є помилкою. Name в правилі AttDef - це ім'я атрибута.

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

3.3.1 Типи атрибутів

Є три різновиди типів XML атрибутів: string / рядковий, набір лексемних типів і перераховує типи. Тип string може приймати в якості значення будь-які символьних рядка; лексемние типи мають різні лексичні та семантичні обмеження. Обмеження правильності, позначені в граматиці, застосовуються після нормалізації значення атрибуту, як описано в 3.3.3 оголошення списку атрибутів.

Attribute Types/Типи атрибутів
[54]   AttType   ::=    StringType | TokenizedType | EnumeratedType
[55]   StringType   ::=   'CDATA'
[56]   TokenizedType   ::=   'ID'[VC: ID]
[VC: One ID per Element Type]
[VC: ID Attribute Default]
| 'IDREF'[VC: IDREF]
| 'IDREFS'[VC: IDREF]
| 'ENTITY'[VC: Entity Name]
| 'ENTITIES'[VC: Entity Name]
| 'NMTOKEN'[VC: Name Token]
| 'NMTOKENS'[VC: Name Token]

Обмеження правильності: ID

Значення типу ID зобов'язані відповідати продукції Name. Ім'я не зобов'язана з'являтися більше одного разу в документі XML як значення даного типу; тобто значення ID зобов'язані унікально ідентифікувати елементи.

Обмеження правильності: Ім'я примірника

Значення типу ENTITY зобов'язані відповідати продукції Name, значення типу ENTITIES зобов'язані відповідати Іменами; кожне Name зобов'язана відповідати імені неразбіраемого примірники, оголошеного в DTD.

[Визначення: Enumerated attributes/Перелічувані Атрибути можуть приймати одне значення зі списку значень, що надаються в оголошенні]. Є два види перераховуємих типів:

Enumerated Attribute Types/Типи атрибутів переліку
[57]   EnumeratedType   ::=    NotationType | Enumeration
[58]   NotationType   ::=   'NOTATION' S '(' S? Name (S? '|' S? Name)* S? ')' [VC: Notation Attributes]
[VC: One Notation Per Element Type]
[VC: No Notation on Empty Element]
[VC: No Duplicate Tokens]
[59]   Enumeration   ::=   '(' S? Nmtoken (S? '|' S? Nmtoken)* S? ')'[VC: Enumeration]
[VC: No Duplicate Tokens]

Атрибут NOTATION ідентифікує нотацию, оголошену в ОТД з асоційованими системними та / або публічними ідентифікаторами, які використовуються для інтерпретації елемента, до якого атрибут приєднано.

Обмеження дійсності: Позначення Атрибутів

Значення цього типу повинні відповідати одному з нотацій імен включенних в декларацію, всі нотації імен в заяві повинні бути оголошені.

Обмеження дійсності: немає запису в порожній елемент

Для сумісності, атрибут типу нотації НЕ ПОВИНЕН бути оголошеним на порожньому елементі.

Обмеження дійсності: немає повторюваних лексем

Запис імен в одному NotationType атрибут декларації, а також NmToken в одному перерахуванні атрибутів декларації, повинні бути різні.

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

3.3.2 Типи атрибуту за замовчуванням

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

Attribute Defaults/Значення за замовчуванням
[60]   DefaultDecl   ::=   '#REQUIRED' | '#IMPLIED'
| (('#FIXED' S)? AttValue)[VC: Required Attribute]
[VC: Attribute Default Value Syntactically Correct]
[WFC: No < in Attribute Values]
[VC: Fixed Attribute Default]
[WFC: No External Entity References]

В оголошенні атрибуту, #REQUIRED означає, що атрибут завжди повинен бути наданий, #IMPLIED - що значення за замовчуванням не надається. [Визначення: Якщо в оголошенні не вказано ні #REQUIRED, ні #IMPLIED, тоді значення AttValue містить оголошене значення default; ключове слово #FIXED встановлює, що атрибут зобов'язаний завжди мати значення за замовчуванням. Якщо значення за замовчуванням оголошується тоді, коли XML процесор вирахував відсутній атрибут, поведінка буде такою, якби атрибут був представлений з оголошеним значенням за замовчуванням.]

Обмеження дійсності: Атрибут Значення за замовчуванням що є синтаксично коректним

Оголошений замовчуванням атрибут повинен відповідати синтаксичним обмеженям оголошеного атрибуту типу. Тобто, значенню атрибуту замовчуванням:

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

Приклади оголошень списку атрибутів:

<!ATTLIST termdef
id      ID      #REQUIRED
name    CDATA   #IMPLIED>
<!ATTLIST list
type    (bullets|ordered|glossary)  "ordered">
<!ATTLIST form
method  CDATA   #FIXED "POST">

3.3.3 Attribute-Value Normalization

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

  1. Всі розриви рядки повинні бути нормалізовано при введенні до #xA, як описано в розділі 2.11 Обробка кінця рядка, щоб надалі алгоритм оперував текстом, нормалізовано таким способом.

  2. Почати з нормалізовано значення, що складається з порожній рядка.

  3. Для кожного символу, посилання на об'єкт або мнемонікі символу в ненормалізованном значенні атрибуту - з першого до останнього, виконати наступне

    • Для мнемонікі символу - приєднати мнемоніку до нормалізовано значенням.

    • Для посилання на об'єкт - розширення застосовувати крок 3 даного алгоритму до заміщає тексту об'єкта.

    • Для пробельного символу (#x20, #xD, #xA, #x9) - приєднати символ пробілу (#x20) до нормалізовано значенням.

    • Для інших символів - приєднати символ до нормалізовано значенням.

Якщо тип атрибута - не CDATA, то процесор XML зобов'язаний далі обробляти нормалізовано значення атрибуту, відкидаючи ведучі та ведені пробiли (#x20) і замінюючи послідовності пробельних символів (#x20) поодиноким символом пробілу (#x20).

Зауважимо, що якщо ненормалізоване значення атрибута містить символ посиланням на білий символ, крім простору (#x20), нормовані значення містяться посилання характеру сам (#xD, #xA or #x9). Це контрастує з тим випадком, коли ненормалізоване значення містить символ пробілу (не посилання), який замінюється на символ пробілу (#x20) в нормовані значення, а також відрізняється у випадку, коли значення ненормалізаціі містить посилання, чиї особи Заміна тексту містить білий символ, час розширення обробляються, білий символ замінюється на символ пробілу (#x20) в нормовані значення.

Всі атрибути, для яких не була прочитана декларація, слід розглядувати через неперевіряючий процесор так само, якби було оголошене CDATA.

Це помилка, якщо значення атрибуту містить посилання на особу, для якого немає декларації було читати.

Нижче наведені приклади атрибутів нормалізації. З огляду на наступні заяви:

<!ENTITY d "&#xD;">
<!ENTITY a "&#xA;">
<!ENTITY da "&#xD;&#xA;">

специфікації атрибутів в лівій колонці нижче можуть бути нормалізовано до символьних послідовностей в середній колонці, якщо атрибут a оголошений NMTOKENS, і до послідовностей в правій колонці, якщо a оголошений як CDATA.

Специфікація атрибутаa у значенні NMTOKENSa як CDATA
a="
xyz"
x y z
#x20 #x20 x y z
a="&d;&d;A&a;&#x20;&a;B&da;"
A #x20 B
#x20 #x20 A #x20 #x20 #x20 B #x20 #x20
a=
"&#xd;&#xd;A&#xa;&#xa;B&#xd;&#xa;"
#xD #xD A #xA #xA B #xD #xA
#xD #xD A #xA #xA B #xD #xA

Зверніть увагу на те, що останній приклад невірний (але правильно сформований), якщо a оголошений типом NMTOKENS.

3.4 Розділи умов

[Визначення: Розділи умов є частиною зовнішнього поднабора оголошення типу документа і включені або виключені з логічної структури DTD, що грунтується на ключовому слові, яке їм управляється.]

Conditional Section/Розділи Умов
[61]   conditionalSect   ::=    includeSect | ignoreSect
[62]   includeSect   ::=   '<![' S? 'INCLUDE' S? '[' extSubsetDecl ']]>' [VC: Proper Conditional Section/PE Nesting]
[63]   ignoreSect   ::=   '<![' S? 'IGNORE' S? '[' ignoreSectContents* ']]>'[VC: Proper Conditional Section/PE Nesting]
[64]   ignoreSectContents   ::=    Ignore ('<![' ignoreSectContents ']]>' Ignore)*
[65]   Ignore   ::=    Char* - (Char* ('<![' | ']]>') Char*)

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

Якщо ключове слово в секції умов - INCLUDE, тоді вміст секції умов є частиною DTD. Якщо ключове слово в секції умов - IGNORE, тоді вміст секції умов не є логічною частиною DTD. Якщо секція умов з ключовим словом INCLUDE з'являється всередині іншої секції умов з ключовим словом IGNORE, то обидві секції - зовнішня і внутрішня - ігноруються. Вміст ігнорування секції умов розбирається з ігноруванням всіх символів після "[" з наступним ключовим словом, виключаючи початок "<![" і кінці "]]>" секцій умов, поки не буде досягнуто відповідний кінець секції умов. Посилання примірника параметра не розпізнає цим процесом.

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

Приклад:

<!ENTITY % draft 'INCLUDE' >
<!ENTITY % final 'IGNORE' >
<![%draft;[
<!ELEMENT book (comments*, title, body, supplements?)>
]]>
<![%final;[
<!ELEMENT book (title, body, supplements?)>
]]>

4 Фізичні структури

[Визначення: XML документ може складатися з однієї або декількох одиниць зберігання. Вони називаються особами, які мають зміст, і всі (за винятком документа осіб і зовнішніх підмножин DTD) визначені найменування органу.] Кожен XML документ має одине походження назв документів організації, який служать відправною точкою для XML процесора і можуть містити весь документ.

Суб'єкт може бути або розбірний або нерозбірний. [Визначення: вміст будь-якого parsed розбору особи називають його заміною тексту; цей текст є невід'ємною частиною цього документа.]

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

Розбираємі екземпляри викликаються по імені з використанням посилань примірників; неразбіраємі примірники - по імені, що задається в значенні атрибутів ENTITY або ENTITIES.

[Визначення: General entities/Загальні екземпляри це екземпляри для використання всередині вмісту документа. У цій специфікації ОЕ іноді називаються некваліфікованим терміном екземпляр, якщо це не призводить до неоднозначності.] [Визначення: Примірники параметрів це розбираємося екземпляри для використання всередині DTD.] Ці два типи примірників використовують різні форми посилань і розпізнаються в різних контекстах. Отже, вони займають різні простору імен; примірник параметра і загальний екземпляр з одні ім'ям - це два різних примірника.

4.1 Посилання символів і екземплярів

[Визначення: Посилання символу посилається на специфічний символ в наборі символів ISO/IEC 10646, наприклад, посилання на символ, не доступний прямо з пристрою вводу.]

Character Reference/Символьні посилання
[66]   CharRef   ::=   '&#' [0-9]+ ';'
| '&#x' [0-9a-fA-F]+ ';'[WFC: Legal Character]

Якщо посилання символу починається з "&#x", цифри і букви аж до кінцевого; дають 16-річне уявлення кодової точки входу символу ISO/IEC 10646. Якщо вона починається просто з "&#", то цифри аж до кінцевого; дають 10-річне уявлення кодової точки входу символу.

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

Entity Reference/Посилання примірника
[67]   Reference   ::=    EntityRef | CharRef
[68]   EntityRef   ::=   '&' Name ';'[WFC: Entity Declared]
[VC: Entity Declared]
[WFC: Parsed Entity]
[WFC: No Recursion]
[69]   PEReference   ::=   '%' Name ';'[VC: Entity Declared]
[WFC: No Recursion]
[WFC: In DTD]

Обмеження правильної сформованості: Екземпляр оголошеня

У документі без DTD, документі тільки з одним внутрішнім поднабором DTD, що не містить посилань примірників параметрів, або в документі зі "standalone='yes'", для посилання примірника, яка не з'являється всередині зовнішнього поднабора або примірника параметра, Name, задане у засланні примірника, зобов'язана співпадати з іменем в оголошенні примірника, який (е?) не з'являється всередині зовнішнього поднабора або примірника параметра, за винятком того, що правильно сформований документ не повинен оголошувати такі екземпляри: amp, lt, gt, apos, quot. Оголошення загального примірника повинна передувати будь-якої посиланням на нього, яка з'являється в значенні за замовчуванням в оголошенні списку атрибутів.

Врахуйте, якщо примірники оголошуються у зовнішньому піднаборі або у зовнішніх примірниках параметрів, то непроверяющій процесор не обов'язково читає і обробляє їх оголошення; для таких документів правилом є те, що екземпляр, який зобов'язаний бути оголошено, є правильно сформованим обмеженням тільки тоді, коли standalone='yes'.

Обмеження правильності: Екземпляр Оголошено

У документі із зовнішнім поднабором або зовнішніми примірниками параметрів з "standalone='no'", Name, дане в посиланням примірника, зобов'язана співпадати з ім'ям в оголошенні примірника. Для цілей взаємодії, правильні документи повинні оголошувати екземпляри amp, lt, gt, apos, quot у формі, специфицированной в розділі 4.6 Попередні примірники. Оголошення примірника параметра повинна передувати будь-якої посиланням на нього. Точно так же оголошення загального примірника повинна передувати будь-якому об'явою списку атрибутів, який містить значення за замовчуванням з прямої або непрямої посиланням на цей загальний примірник.

Приклади посилань на символи і екземпляри:

Type <key>less-than</key> (&#x3C;) to save options.
This document was prepared on &docdate; and
is classified &security-level;.

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

<!-- declare the parameter entity "ISOLat2"... -->
<!ENTITY % ISOLat2
SYSTEM "http://www.xml.com/iso/isolat2-xml.entities" >
<!-- ... now reference it. -->
%ISOLat2;

4.2 Визначення примірників

[Визначення: Примірники оголошуються так:]

Entity Declaration/Оголошення примірника
[70]   EntityDecl   ::=    GEDecl | PEDecl
[71]   GEDecl   ::=   '<!ENTITY' S Name S EntityDef S? '>'
[72]   PEDecl   ::=   '<!ENTITY' S '%' S Name S PEDef S? '>'
[73]   EntityDef   ::=    EntityValue | (ExternalID NDataDecl?)
[74]   PEDef   ::=    EntityValue | ExternalID

Name ідентифікує екземпляр в посиланням на екземпляр або, у випадку неразбіраемого примірника, у значенні атрибуту ENTITY або ENTITIES. Якщо один і той же екземпляр оголошено більше одного разу, перше виявлене оголошення підключається; за вибором користувача процесор XML може видавати попередження, якщо примірники оголошуються кілька разів.

4.2.1 Внутрішні примірники

[Визначення: Якщо визначення примірника дано як EntityValue, обумовлений примірник називається внутрішнім екземпляром. При цьому відсутній окремий фізичний об'єкт зберігання, і вміст примірника дається у визначенні.] Зауважте, що може знадобитися певна обробка посилань на символи і екземпляри в літерном значенні екземплярів для того, щоб зробити коректний заміщуючих текст: див. 4.5 Конструкція заміщає тексту для внутрішнього примірника.

Внутрішній примірник це розбираємий примірник.

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

<!ENTITY Pub-Status "This is a pre-release of the specification.">

4.2.2 Зовнішні примірники

[Визначення: Якщо екземпляр не є внутрішнім, то він є зовнішнім примірником, оголошується так:]

External Entity Declaration/Оголошення Зовнішнього примірника
[75]   ExternalID   ::=   'SYSTEM' S SystemLiteral
| 'PUBLIC' S PubidLiteral S SystemLiteral
[76]   NDataDecl   ::=    S 'NDATA' S Name [VC: Notation Declared]

Якщо NDataDecl присутня, то це - спільне неразбірний примірник; в іншому випадку це - розбираємося примірник.

Обмеження правильності: Оголошення нотації

Name зобов'язана співпадати з оголошеним ім'ям нотації.

[Визначення: В SystemLiteral називається організації системи ідентифікатор. Це означало бути перетворена у заслання URI (як визначено в [IETF RFC 3986]), як частина процесу dereferencing йому отримати матеріали для XML процесор для побудови організації заміна тексту.] Це повідомлення про помилку на фрагмент ідентифікатора (починаючи з # символи) бути частиною системи ідентифікатор. Якщо інше не передбачено інформація виходить за рамки цієї специфікації (наприклад, спеціальні XML елемент типу визначається конкретним DTD або інструкція обробки визначається конкретне застосування специфікації), відносна Уніфіковані Ідентифікатори є відносно місцезнаходження ресурсів протягом якого особа декларації відбувається. Це визначається як зовнішній орган, який містить '<', яка починається з заяви, в той момент, коли вона розбиратися як декларації. URI А може, таким чином, у порівнянні з документом особи, для органу, що містить зовнішні підмножини DTD або в деяких інших зовнішніх параметрів особи. Спроби отримати в ресурсах визначаються за URI може бути перенаправлено на Парсер рівні (наприклад, в галузі освіти, Resolver) або нижче (на рівні протоколу, наприклад, через HTTP Location: заголовок). За відсутності додаткової інформації, яка виходить за рамки цієї специфікації в рамках ресурсів, базових URI з ресурсу завжди URI про фактичний ресурс повертається. Іншими словами, це URI цього ресурсу отримані після того, як все сталося перенаправлення.

Система ідентифікаторів (та інших XML рядки повинні бути використані в якості посилання URI) може містити символи, які, згідно [IETF RFC 3986], повинні бігти перед URI може бути використаний для отримання посилання на ресурс. Набір символів для уникнув є керуючі символи # # x0 до x1F і # x7F (більшість з яких не може з'явитися в XML), площа # x20, з роздільниками '<' #x3C, '>' #x3E і '"' #x22 , то нерозумні символи '{' #x7B, '}' #x7D, '|' #x7C, '\' #x5C, '^' #x5E і '`' #x60, а також всі символи вище #x7F. С пагін не завжди повністю оборотний процес, вона повинна здійснюватися тільки у разі крайньої необхідності і як можна пізніше в технологічному ланцюжку. Зокрема, ні в процесі перетворення відносних URI в абсолютному, жоден процес прийняття URI посилання до процесу чи програмних компонент, що відповідає за dereferencing він повинен викликати пагона. вирватися Коли має місце, воно має здійснюватися наступним чином:

  1. Кожен символ має бути замаскований та представлений у UTF-8 [Unicode], як один або кілька байт.

  2. Байти результату вивільняются з URI механізмом вивільнення (тобто перетворені %HH, де HH це шіснадцяткові уявлення про значення байт).

  3. Спочатку символ замінюється в результуючу послідовність символів.

[Визначення: На додаток до системного ідентифікатора, зовнішній ідентифікатор може включати публічний ідентифікатор.] Процесор XML, який намагається отримати вміст примірника, може використовувати публічний ідентифікатор, щоб спробувати згенерувати альтернативну посилання URI. Якщо процесор не може виконати це, він зобов'язаний використовувати посилання URI, специфицированную в системному літерале. Перш ніж буде зроблена спроба зіставлення, всі рядки пробілів повинні бути нормалізовано до одиночного символу пробілу (#x20), а ведучі та ведені пробіли повинні бути видалені.

Приклади оголошень зовнішнього примірника:

<!ENTITY open-hatch
SYSTEM "http://www.textuality.com/boilerplate/OpenHatch.xml">
<!ENTITY open-hatch
PUBLIC "-//Textuality//TEXT Standard open-hatch boilerplate//EN"
"http://www.textuality.com/boilerplate/OpenHatch.xml">
<!ENTITY hatch-pic
SYSTEM "../grafix/OpenHatch.gif"
NDATA gif >

4.3 Аналіз та перегляд примірників

4.3.2 Правильно сформовані розбираємі екземпляри

У цьому документі організація добре сформувалася, якщо воно збігається з назвою виробництва документа. An external general parsed entity is well-formed if it matches the production labeled extParsedEnt. В цілому зовнішні розбиратися організація добре сформувалася, якщо вона відповідає виробництва позначені extParsedEnt. All external parameter entities are well-formed by definition. Всі зовнішні суб'єкти параметра добре сформовані за визначенням.

Примітка:

Тільки розбираємі утвореня, які посилаються, прямо чи опосередковано в цьому документі повинні бути добре сформованими.

Правильно Сформований Зовнішній розбираємий Екземпляр
[78]   extParsedEnt   ::=    ( TextDecl? content ) - ( Char* RestrictedChar Char*)

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

Наслідком правильної сформованості примірників є те, що логічні та фізичні структури в XML документі правильно вкладають: нема start-tag, нема end-tag, нема empty-element tag, element, comment, processing instruction, character reference або entity reference не можуть починатися в одному примірнику, а закінчуватися - в іншому.

4.3.3 Кодування символів в екземплярах

Кожен зовнішній розбираємий екземпляр в документі XML може використовувати своє кодування символів. Всі процесори XML зобов'язані "вміти" прочитати кодування UTF-8 та UTF-16. Терміни "UTF-8" та "UTF-16" в цiй специфікації не застосовуються до кодування символів з іншими назвами, навіть якщо кодування або назви дуже схожі на UTF-8 або UTF-16

Суб'єкти у кодуванні UTF-16 повинні й організацій в кодуванні UTF-8 може починатися з Byte Наказ Марк описані в ISO/IEC 10646 [ISO/IEC 10646] або Unicode [Unicode] (символи нульової ширини без пробілу #xFEFF). Це кодування підпису, не входить ні розмітки або характер даних з XML документа. XML процесори повинні мати можливість використовувати цей символ для розрізнення між UTF-8 та UTF-16 кодуванні документів

Незважаючи на те, що XML процесор повинен йти тільки особи в UTF-8 та UTF-16 кодуванні, він визнав, що інші кодування використовуються у всьому світі, і воно може бути потрібний для XML процесори наступного особи, які використовують їх. У відсутність зовнішнього характеру кодування інформації (наприклад, заголовки MIME), розбиратися утворень, які зберігаються в кодуванні крім UTF-8 або UTF-16 повинні починатися з текстом декларації (див. 4.3.1 Текст декларації), що містять кодування заяву:

Encoding Declaration/Кодування декларації
[80]   EncodingDecl   ::=    S 'encoding' Eq ('"' EncName '"' | "'" EncName "'" )
[81]   EncName   ::=   [A-Za-z] ([A-Za-z0-9._] | '-')*/* Кодування ім'я містить тільки латинські символи */

У документі особи, кодування декларації входить в XML декларації. У EncName називається кодуванням.

У декларації кодування, значення "UTF-8", "UTF-16", "ISO-10646-UCS-2" та "ISO-10646-UCS-4" повинен бути використаний для різних символів та перетворення Unicode / ISO/IEC 10646, значення "ISO-8859-1", "ISO-8859-2", ..., "ISO-8859-n" (де n це номер) повинні бути використані для частини ІСО 8859, а також значення "ISO-2022-JP", "Shift_JIS" і "EUC-JP" повинні бути використані для кодуються різними формами JIS X-0208-1997. Він рекомендував символу кодування зареєстрований (а кодування S) з Інтернет Assigned Numbers органу [IANA-Кодування], крім тих, просто в списку, буде називатися використанням зареєстрованих імен, інші кодування ПОВИННІ використовувати імена, що починаються з "х-" префікс. XML процесори повинні відповідати кодування імен в тому випадку, реєстр, і має або інтерпретувати в IANA зареєстрованим ім'ям кодування зареєстрована в IANA для цього імені, чи розглядати його як невідоме (процесорів, зрозуміло, не зобов'язаний підтримувати всі IANA зареєстрованих кодувань).

У відсутність інформації з боку зовнішнього транспортний протокол (наприклад, HTTP або MIME), це Фатальна помилка на особу, включаючи кодирование декларації повинні бути представлені в XML процесора в кодуванні, відмінною названий в заяві, або для освіти, що починається з ними Byte Замовлення Марк ні одна кодування декларації використовувати кодування, відмінну від UTF-8. Зауважимо, що оскільки ASCII є підмножиною UTF-8, звичайні ASCII особи не повинні суворо кодування декларації.

Це Фатальна помилка в TextDecl відбуваються інші, ніж на початку зовнішнього суб'єкта.

Це Фатальна помилка, коли XML процесор стикається суб'єкта з кодуванням, що вона не в стані обробити. Це Фатальна помилка, якщо XML особи визначається (за замовчуванням кодування декларації, або більш високому рівні протоколу), що буде в певній кодуванні, але містить послідовності байтів, які не є юридичними в цій кодуванні. Зокрема, це груба помилка, якщо суб'єкт у кодуванні UTF-8 містить код підрозділи нерегулярно послідовності, як це визначено в Unicode [Unicode]. Якщо кодування визначається на більш високому рівні протоколу, вона також є фатальною помилкою, якщо XML особи не міститься кодування декларації та її зміст не є правової UTF-8 або UTF-16.

Приклади з текстом заяви, що містять кодування заяви:

<?xml encoding='UTF-8'?>
<?xml encoding='EUC-JP'?>

4.3.4 Данні про версію примірників

Кожна особа, у тому числі особа документу, може бути оголошений, як окремо XML 1.0 і XML 1.1. The version declaration appearing in the document entity determines the version of the document as a whole. Версія декларацію, що містяться в документі організація визначає версію документа в цілому. An XML 1.1 document may invoke XML 1.0 external entities, so that otherwise duplicated versions of external entities, particularly DTD external subsets, need not be maintained. 1.1 XML-документ може посилатися на XML 1.0 зовнішніми організаціями, з тим, що інакше дублюється версії зовнішніх суб'єктів, зокрема зовнішніх підмножин DTD, не потрібно буде зберегти. However, in such a case the rules of XML 1.1 are applied to the entire document. Однак, у такому випадку правила XML 1.1 застосовуються до всього документу.

Якщо особа (у тому числі документ особи) не ярлик з номером версії, вона розглядається, як якби помічені як версія 1.0.

4.4 Обробка XML процесором примірників і посилань

У таблиці нижче коротко викладаються умови, в яких характер літератури, особа літератури, а також виклики в нерозбірні суб'єкти можуть з'явитися і необхідного поведінки в XML процесора в кожному конкретному випадку. Етикетки в лівій колонці описуються визнання контексті:

посилання у вмісті

як посилання де-небудь після початкового тега і перед кінцевим тегом елемента; відповідає нетермінальному вмісту.

посилання в значенні атрибуту

як посилання або в значенні атрибуту у початковому тегу, або як значення за замовчуванням в оголошенні атрибута; відповідає нетермінальному AttValue.

з'являється як значення атрибуту

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

посилання в значенні примірника

як посилання в літеральном значенні примірника в оголошенні екземпляр параметра або внутрішнього примірники; відповідає нетермінальному EntityValue.

посилання в DTD

як посилання всередині зовнішнього або внутрішнього поднабора DTD, але поза EntityValue, AttValue, PI, Comment, SystemLiteral, PubidLiteral, або вмісту ігнорування секції умов (див. 3.4 Секції Умов).

.

Тип примірникаСимвол
ПараметрВнутрішній ЗагальніЗагальні зовнішні проаналізованіНепроаналізовані
Посилання у вмісті Не визнається Включено Входить у випадку підтвердження Заборонений Включено
Посилання в значенні атрибуту Не визнається Включений в літерал Заборонений Заборонений Включено
З'являється як значення атрибуту Не визнається Заборонений Заборонений Повідомлення Не визнається
Посилання в EntityValue Включений в літерал Пропущено Пропущено Помилка Включено
Посилання в DTD Включений як екземпляр параметру Заборонений Заборонений Заборонений Заборонений

4.4.1 Не визнається

За межами DTD, % символ не має особливого значення, таким чином, який би параметр особа літератури в DTD не визнається в якості розмітки в зміст. Крім того, назви неперевіряємої особи не визнаються за винятком випадків, коли вони з'являються у вартості належним оголосив атрибут.

4.4.2 Включено

[Визначення: Особа, коли його включали заміну тексту витягується і обробляється, у місці посилання себе, як ніби вона є частиною документа, у місці посилання було визнано.] Заміна тексту може містити символьні дані, характер і ( за винятком параметрів особи) розмітки, яка повинна бути визнана у звичайному порядку. (Рядок "AT&amp;T;" розширюється в "AT&T;" а решта амперсанд не визнається в якості суб'єкта, посилання розділювач.) А характер ведення входить, коли вказаний символ обробляється замість посилання сам.

4.4.3 Включено якщо перевіряється

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

Це правило грунтується на визнанні того, що передбачено автоматичне включення в SGML та XML орган механізму, в першу чергу призначена для підтримки модульності в Авторинг, не обов'язково підходить для інших програм, зокрема, документ перегляду. Browsers, for example, when encountering an external parsed entity reference, might choose to provide a visual indication of the entity's presence and retrieve it for display only on demand. Браузери, наприклад, коли стикається із зовнішнім розбиратися організація ведення, можуть вибирати для забезпечення візуального зазначенням органу його присутність та отримувати його на дисплей тільки за вимогою.

4.4.4 Заборонено

Приведене нижче заборонено, і є фатальною помилкою:

  • Поява посилання на неперевіряємі особи, крім як у EntityValue в орган декларації.

  • Поява будь-який символ або загальну освіту посилання на DTD, крім рамках EntityValue чи AttValue.

  • Посилання на зовнішній орган в атрибуту.

4.4.5 Включено в літерал

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

<!ENTITY % YN '"Yes"' >
<!ENTITY WhatHeSaid "He said %YN;" >

а це - ні:

<!ENTITY EndAttr "27'" >
<element attribute='a-&EndAttr;>

4.4.7 Пропущено

Якщо посилання на загальну сутність з'являється в EntityValue в декларації організації, вони повинні бути пропущені, і залишатися, як є.

4.4.8 Включений як примірник параметра

Точно так само, як і у випадку із зовнішніми розбираємося примірниками, екземпляри параметрів повинні бути лише включені, якщо перевіряються. Якщо посилання примірника параметра розпізнається в DTD і включається, то його (копії) заміщуючих текст розширюється шляхом приєднання одного ведучого і одного підпорядкований пробілу (#x20); метою є - обмежити для заміщає тексту примірника параметра можливість містити інтегральне число грамматических лекс в DTD. Ця поведінка не застосовується до посилань примірника параметра в значеннях примірники; це описано в 4.4.5 Включено в літерал.

4.4.9 Помилка

Це помилка при посиланні на неразбірні особи що з'являються в EntityValue в орган визначення.

4.5 Конструкція виміщаючого тексту для Внутрішнього примірника

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

Літеральное значення примірника, дане в оголошенні внутрішнього примірника (EntityValue), може містити посилання на символ, примірник параметра і загальний екземпляр. Такі посилання зобов'язані бути повністю всередині літерального значення екземпляра. Реальний заміщуючих текст, який включається (або включені в літеральному значенні) так, як описано вище, повинен містити заміщуючих текст будь-якого примірника параметра, на який є посилання, і повинен містити символ, на який є посилання, замість будь-яких мнемонік символів у літеральном значенні примірники; однак посилання загального примірника зобов'язані бути залишені без змін, неразвернутимі. Наприклад, якщо є таке оголошення:

<!ENTITY % pub    "&#xc9;ditions Gallimard" >
<!ENTITY   rights "All rights reserved" >
<!ENTITY   book   "La Peste: Albert Camus,
&#xA9; 1947 %pub;. &rights;" >

то заміщуючих текст примірника "book" буде:

La Peste: Albert Camus,
© 1947 Éditions Gallimard. &rights;

Посилання загального примірника "&rights;", який повинен бути розгорнуто, змушує посилання "&book;" з'явитися у вмісті документа або в значенні атрибуту.

Ці прості правила можуть взаємодіяти вельми складно; детальне обговорення складного прикладу наведено в C Розширення особ характеру і літералів.

4.6 Попередньовизначені примірники

[Визначення: Мнемонікі символів можуть використовуватися для виділення лівої кутової дужки, амперсанда та інших обмежувачів. Для цих цілей специфицирован набір загальних мнемонік (amp, lt, gt, apos, quot). Цифрові мнемонікі можуть також використовуватися; вони розгортаються відразу при виявленні і повинні розглядатися як символьних дані, так що цифрові мнемонікі "&#60;" та "&#38;" можуть використовуватися для виділення < і &, якщо вони з'являються в символьних даних.]

Всі XML процесори зобов'язані розпізнавати ці мнемонікі незалежно від того, оголошені вони, чи ні. Для цілей взаємодії, правильні документи XML повинні оголошувати ці екземпляри, як і будь-які інші, до їх використання. Якщо мнемонікі lt або amp оголошуються, то вони зобов'язані бути оголошені як внутрішні екземпляри, чий заміщуючих текст є мнемонікой відповідного символу (знаку "менше-ніж" або амперсанда), який виділяется; для цих примірників необхідно подвійне виділення, щоб посилання на них давали правильно сформований результат. Якщо примірники gt, apos, або quot оголошуються, вони повинні бути оголошені як внутрішні екземпляри, чий заміщуючих текст представляє із себе одиночний escape'іруемий символ (або символьними посиланнями-мнемоніку на цей символ; подвійне escapi'рованіе тут не обов'язково, але й не зашкодить ). Наприклад:

<!ENTITY lt     "&#38;#60;">
<!ENTITY gt     "&#62;">
<!ENTITY amp    "&#38;#38;">
<!ENTITY apos   "&#39;">
<!ENTITY quot   "&#34;">

4.7 Визначення нотації

[Визначення: Нотацію ідентифікують по імені формат неразбіраемих примірників, формат елементів, які породили атрибут нотації, або додаток, якому адресується інструкція процесу.]

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

Notation Declarations/Визначення нотації
[82]   NotationDecl   ::=   '<!NOTATION' S Name S (ExternalID | PublicID) S? '>'[VC: Unique Notation Name]
[83]   PublicID   ::=   'PUBLIC' S PubidLiteral

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

4.8 Примірник документу

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

5 Відповідність

5.1 Перевіряючі і неперевіряючі процесори

Відповідні XML процесори діляться на два класи: перевіряючі і неперевіряючі.

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

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

Від непроверяющіх процесорів потрібно лише перевірити примірник документу, включаючи весь внутрішній піднабір DTD, на правильне формування. [Визначення: Хоча вони і не є обов'язковими для перевірки дійсності документа, вони повинні обробити всі заяви, вони читають у внутрішні DTD підмножини і в який-небудь параметр особи, що вони прочитали, до першого посиланням на параметр особи, що вони не читати, то є, вони повинні використовувати інформацію, що міститься в цих декларацій для нормалізації значень атрибутів, включити заміну тексту внутрішніх органів, і постачання за замовчуванням значень атрибутів.] За винятком випадків, коли standalone="yes" вони не повинні процесу організації заяви або атрибут перелік декларацій, що виникають після передачі в параметр орган, який не читав, оскільки організація може міститися головним декларацій, коли standalone="yes" процесори повинні процесі цих декларацій.

Зауважимо, що при обробці недійсних документів з непостійним перевірки процесора застосування не може бути представлена в послідовної інформації. For example, several requirements for uniqueness within the document may not be met, including more than one element with the same id, duplicate declarations of elements or notations with the same name, etc. In these cases the behavior of the parser with respect to reporting such information to the application is undefined. Наприклад, деякі вимоги до унікальності в рамках цього документа не може бути досягнуто, в тому числі понад одного елемента з однаковим кодом, дублювати заяви елементів нотації або з тією ж назвою, і т.д. У цих випадках поведінка парсера щодо звітності таку інформацію, щоб заявка невизначена.

XML 1.1 процесор повинен бути в змозі обробляти як XML 1.0 і XML 1.1 документів. Програми, які генерувати XML повинне сприяти XML 1.0, якщо одна з особливостей XML 1.1 не потрібно.

5.2 Використання XML процесорів

Поведінка на перевірку XML процесор досить передбачуваними, він повинен прочитати кожен фрагмент документа і повідомляти про всі добре formedness і дійсність порушень. Less is required of a non-validating processor; it need not read any part of the document other than the document entity. Менше потрібно якийсь Перевірка процесора, але не потрібно прочитати будь-якої частини цього документа, крім документа організації. This has two effects that may be important to users of XML processors: Це має два наслідки, які можуть мати важливе значення для користувачів XML процесорів:

Для забезпечення максимальної надійності в Взаємодія між різними XML процесорів, додатки, які використовують неприєднання перевірки процесорів не слід покладатися на який-небудь поведінку, не вимагає таких процесорів. Програми, які вимагають DTD об'єкти, не пов'язані зі схваленням (таких, як Декларація про невиконанні атрибути та внутрішні, які є або можуть бути вказані в зовнішні суб'єкти) слід використовувати перевірку XML процесорами.

6 Нотації

Формальна граматика XML наводиться в цій специфікації, використовуючи простий Розширена форма Бекуса-Науру (EBNF) нотацій. Each rule in the grammar defines one symbol, in the form Кожне правило в граматиці визначає один символ, у вигляді

symbol ::= expression

Умовні позначення пишуться з великої літери, якщо вони є символом початку регулярного мови, інакше з початковою літерою. Literal strings are quoted. Символьних строк зазначені.

У вираженні на правій стороні правило, такі вирази використовуються для порівняння рядків з однієї або більше символів:

#xN

де N це шіснадцяткові ціле вираз відповідає характеру, чиї номери (коду точки), в ISO/IEC 10646 є N. Кількість провідних нулів у #xN форма є незначним.

[a-zA-Z], [#xN-#xN]

відповідає будь-якій з Букв зі значенням в діапазоні вказується(включно).

[abc], [#xN#xN#xN]

відповідає будь-якій з Букв зі значенням серед перелічених символів. Перерахування та діапазони можна змішувати в одному комплекті кронштейнів.

[^a-z], [^#xN-#xN]

відповідає будь-якій з Букв зі значенням поза зазначеного діапазону.

[^abc], [^#xN#xN#xN]

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

"string"

відповідає рядоку літералів відповідності, що, з огляду всередині подвійних лапок.

'string'

відповідає рядоку літералів відповідності, що, з огляду всередині одиночних лапок.

Ці символи можуть бути об'єднані у відповідності з більш складної структури, як слід, де A і B являють собою прості вирази:

(expression)

expression розглядається як єдине ціле і можуть бути об'єднані, як описано в цьому списку.

A?

відповідає A або нічого; A якщо треба.

A B

відповідає A потім B. Цей оператор має більш високий пріоритет, ніж зміна, тому AB | CD ідентичний (AB) | (CD).

A | B

сірникиA або B.

A - B

Відповідає будь-якому рядку, який відповідає A але не відповідає B.

A+

відповідає одному або більше випадків A. Конкатенація має більш високий пріоритет, ніж чергування; таким чином, A+ | B+ ідентичний (A+) | (B+).

A*

матчів нуль або більше входження A. Конкатенація має більш високий пріоритет, ніж чергування; таким чином, A* | B* ідентичний (A*) | (B*).

Інші нотації, що використовуються у продукції:

/* ... */

comment. коментар.

[ wfc: ... ]

well-formedness constraint- обмеження правильної сформованості; ідентифікує по імені обмеження правильно сформованих документів, асоційованих з випуском.

[ vc: ... ]

validity constraint- обмеження правильності; ідентифікує по імені обмеження правильних документів, асоційованих з випуском.

A Посилання

A.1 Нормативні посилання

IANA-CHARSETS
(Internet Assigned Numbers Authority) Official Names for Character Sets, ed. Keld Simonsen et al. (Див. http://www.iana.org/assignments/character-sets.)
IETF RFC 2119
IETF (Internet Engineering Task Force). RFC 2119: Key words for use in RFCs to Indicate Requirement Levels. Scott Bradner, 1997. (Див. http://www.ietf.org/rfc/rfc2119.txt.)
IETF RFC 3066
IETF (Internet Engineering Task Force). RFC 3066: Tags for the Identification of Languages, ed. H. Alvestrand. 2001. (Див. http://www.ietf.org/rfc/rfc3066.txt.)
IETF RFC 3986
IETF (Internet Engineering Task Force). RFC 3986: Uniform Resource Identifier (URI): Generic Syntax. T. Berners-Lee, R. Fielding, L. Masinter. 2005. (Див. http://www.ietf.org/rfc/rfc3986.txt.)
ISO/IEC 10646
ISO (International Organization for Standardization). ISO/IEC 10646-1:2000. Information technology — Universal Multiple-Octet Coded Character Set (UCS) — Part 1: Architecture and Basic Multilingual Plane and ISO/IEC 10646-2:2001. Information technology — Universal Multiple-Octet Coded Character Set (UCS) — Part 2: Supplementary Planes, as, from time to time, amended, replaced by a new edition or expanded by the addition of new parts. [Geneva]: International Organization for Standardization. (Див. http://www.iso.ch for the latest version.)
Unicode
The Unicode Consortium. The Unicode Standard, Version 4.0. Reading, Mass.: Addison-Wesley, 2003, as updated from time to time by the publication of new versions. (Див. http://www.unicode.org/unicode/standard/versions for the latest version and additional information on versions of the standard and of the Unicode Character Database).
XML-1.0
W3C. Extensible Markup Language (XML) 1.0 (Fourth Edition). Tim Bray, Jean Paoli, C.M. Sperberg-McQueen, Eve Maler, François Yergeau (editors) (Див. http://www.w3.org/TR/xml.)

A.2 Інші посилання

Aho/Ullman
Aho, Alfred V., Ravi Sethi, and Jeffrey D. Ullman. Compilers: Principles, Techniques, and Tools. Reading: Addison-Wesley, 1986, rpt. corr. 1988.
Brüggemann-Klein
Brüggemann-Klein, Anne. Formal Models in Document Processing. Habilitationsschrift. Faculty of Mathematics at the University of Freiburg, 1993. (Див. ftp://ftp.informatik.uni-freiburg.de/documents/papers/brueggem/habil.ps.)
Brüggemann-Klein and Wood
Brüggemann-Klein, Anne, and Derick Wood. Deterministic Regular Languages. Universität Freiburg, Institut für Informatik, Bericht 38, Oktober 1991. Extended abstract in A. Finkel, M. Jantzen, Hrsg., STACS 1992, S. 173-184. Springer-Verlag, Berlin 1992. Lecture Notes in Computer Science 577. Full version titled One-Unambiguous Regular Languages in Information and Computation 140 (2): 229-253, February 1998.
Charmod
W3C Working Draft. Character Model for the World Wide Web 1.0. Martin J. Dürst, François Yergeau, Richard Ishida, Misha Wolf, Tex Texin. (Див. http://www.w3.org/TR/2003/WD-charmod-20030822/.)
Clark
James Clark. Comparison of SGML and XML. (Див. http://www.w3.org/TR/NOTE-sgml-xml-971215.)
IANA-LANGCODES
(Internet Assigned Numbers Authority) Registry of Language Tags, ed. Keld Simonsen et al. (Див. http://www.iana.org/assignments/language-tags.)
IETF RFC 2141
IETF (Internet Engineering Task Force). RFC 2141: URN Syntax, ed. R. Moats. 1997. (Див. http://www.ietf.org/rfc/rfc2141.txt.)
IETF RFC 3023
IETF (Internet Engineering Task Force). RFC 3023: XML Media Types. eds. M. Murata, S. St.Laurent, D. Kohn. 2001. (Див. http://www.ietf.org/rfc/rfc3023.txt.)
IETF RFC 2781
IETF (Internet Engineering Task Force). RFC 2781: UTF-16, an encoding of ISO 10646, ed. P. Hoffman, F. Yergeau. 2000. (Див. http://www.ietf.org/rfc/rfc2781.txt.)
ISO 639
(International Organization for Standardization). ISO 639:1988 (E). Code for the representation of names of languages. [Geneva]: International Organization for Standardization, 1988.
ISO 3166
(International Organization for Standardization). ISO 3166-1:1997 (E). Codes for the representation of names of countries and their subdivisions — Part 1: Country codes [Geneva]: International Organization for Standardization, 1997.
ISO 8879
ISO (International Organization for Standardization). ISO 8879:1986(E). Information processing — Text and Office Systems — Standard Generalized Markup Language (SGML). First edition — 1986-10-15. [Geneva]: International Organization for Standardization, 1986.
ISO/IEC 10744
ISO (International Organization for Standardization). ISO/IEC 10744-1992 (E). Information technology — Hypermedia/Time-based Structuring Language (HyTime). [Geneva]: International Organization for Standardization, 1992. Extended Facilities Annexe. [Geneva]: International Organization for Standardization, 1996.
WEBSGML
ISO (International Organization for Standardization). ISO 8879:1986 TC2. Information technology — Document Description and Processing Languages. [Geneva]: International Organization for Standardization, 1998. (Див. http://www.sgmlsource.com/8879/n0029.htm.)
XML Names
Tim Bray, Dave Hollander, and Andrew Layman, editors. Namespaces in XML. Textuality, Hewlett-Packard, and Microsoft. World Wide Web Consortium, 1999. (Див. http://www.w3.org/TR/REC-xml-names/.)

B Визначення характеру Нормалізації

Цей додаток містить необхідні для визначення характеру нормалізації. Додаткову інформацію та приклади, см. [Charmod][Charmod].

[Визначення: Текст, як кажуть, в формі кодування Unicode, якщо він у кодуванні UTF-8, UTF-16 або UTF-32.]

[Визначення: Спадщина кодування взятий означати будь-який кодуванні, не заснованих на Unicode.]

[Визначення: Транскодер нормалізації є Транскодер, яка перетворює з спадщиною кодування в форми Unicode кодування та гарантує, що результат буде в Unicode Нормалізація Форма C (див. UAX #15 [Unicode]).]

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

  1. Синтаксичні вирази значущих символів, у той час як без урахування їх значущості в синтаксис мови, або

  2. Вирази символів не уявлені в кодуванні вибрав для примірника мова, або

  3. Вирази знаків в цілому, без використання відповідного характеру коди.

[Визначення: Сертифікований текст текст, який відповідає принаймні одне з наступних умов:]

  1. це було підтверджено на основі інспекцій, що текст знаходиться в нормалізованій формі

  2. вихідний текст для обробки компонентів визначений і, як відомо, робить тільки нормалізований текст.

[Визначення: Текст, для цілей даної специфікації, Unicode-normalized (нормалізований в Unicode вигляді) якщо воно знаходиться в формі Unicode кодування і в Формі Unicode Нормалізації, згідно з версією стандарту Unicode додаток # 15: Unicode нормалізації форм [Unicode] на мірою, останнім часом, як самий старий варіант цього стандарту Unicode, що містить всі символи, на самом деле присутня в тексті, але не раніше, ніж версія 3.2.]

[Визначення: Текст включає нормалізацію якщо:]

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

  2. текст в спадщині кодування, і, якщо б вона була транскодійована в формі Unicode кодування по Транскодер нормалізації, в результаті текст буде відповідати пункту 1, що вище.

[Визначення: Створенний символ являє собою символ, який являє собою один або обидва з наступних:]

  1. другий символ в канонічному розкладі відображення деяких первинних композитний (як визначено в D3 від UAX #15 [Unicode]), або

  2. ненульовий, класу канонічного об'єднання (як це визначено в Unicode [Unicode]).

[Визначення: Текст повністю нормалізуваний, якщо:]

  1. текст в формі Юнікод кодування, є включено-нормалізованим і жодна з відповідних конструкцій у складі тексту починається з символу, що входять до складу або символ виходу, представляє символ творення, або

  2. текст в кодуванні спадщини, і, якщо б вона була транскодійованою в формі Unicode кодування по Транскодер нормалізації, в результаті текст буде відповідати пункту 1 що вище.

C Розгортання посилань на символи і примірники (ненормативно)

У цьому додатку містяться деякі приклади, що ілюструють послідовність освіти і характеру посилання визнання і розширення, як це зазначено в 4.4 Обробка XML процесором примірників і посилань.

Якщо DTD містить декларацію

<!ENTITY example "<p>An ampersand (&#38;#38;) may be escaped
numerically (&#38;#38;#38;) or with a general entity
(&amp;amp;).</p>" >

XML процесор розпізнає характер посилання, коли він розбирає орган декларацію, і вирішити їх, перш ніж зберігати ці рядки як значення посилання "example":

<p>An ampersand (&#38;) may be escaped
numerically (&#38;#38;) or with a general entity
(&amp;amp;).</p>

Посилання на цей документ "&example;" призведе текст, який буде reparsed, на яких час початку і кінця-теги з p елементів буде визнано і три посилання будуть визнані і розширені, в результаті чого p елемент з наступним змістом (всі дані, без розділювач і розмітки):

An ampersand (&) may be escaped
numerically (&#38;) or with a general entity
(&amp;).

Більш складний приклад ілюструє правила та їх наслідки в повній мірі. У наступному прикладі номера строк виключно для довідки.

1 <?xml version='1.1'?>
2 <!DOCTYPE test [
3 <!ELEMENT test (#PCDATA) >
4 <!ENTITY % xx '&#37;zz;'>
5 <!ENTITY % zz '&#60;!ENTITY tricky "error-prone" >' >
6 %xx;
7 ]>
8 <test>This sample shows a &tricky; method.</test>

Тут відбувається наступне:

D Детерміністичні моделі змісту (ненормативно)

Як зазначено в 3.2.1 Вміст елемента, необхідно, щоб моделі вмісту в оголошенні типу елемента були детерміністичних. Ця вимога введено для сумісності з SGML (яке називає детерміністичних моделі вмісту "недвусмысленными"); створення процесорів XML з використанням систем SGML може відзначати недетерміністіческіе моделі вмісту як помилкові.

Наприклад, модель вмісту ((b, c) | (b, d)) - недетерміністіческая, тому що, при цьому b, процесор XML не може знати, яке b в моделі відповідає, без того, щоб не переглянути все спочатку і з'ясувати, який елемент йде після b. В даному випадку, два посилання на b можуть бути стислі до одиночної, роблячи модель такий: (b, (c | d)). Початкове b тепер точно відповідає одному імені в моделі вмісту. Процесору не потрібно повертатися до початку, що подивитися, а що йде потім; c або d можуть бути прийняті.

Більш формально: автоматизація остаточного стану може бути сконструйована з моделі вмісту з використанням стандартних алгоритмів, наприклад, алгоритм 3.5 в розділі 3.9 в Aho, Sethi і Ullman [Aho/Ullman]. У багатьох таких алгоритмах, додатковий набір конструюються для кожної позиції в регулярному виразі (тобто для кожного вузла-листа в лісі синтаксису регулярного виразу), якщо будь-яка позиція має додатковий набір, в якому більш ніж один добавочная позиція позначена тим же самим ім'ям типу елемента, то модель вмісту помилкова, і про неї може бути виведено повідомлення як про помилкової.

Існують алгоритми, які дозволяють автоматично редуцировать багато, але не всі, недетерміністіческіе моделі вмісту до еквівалентних детерміністичних моделей; див. Brüggemann-Klein 1991 [Brüggemann-Klein].

E Автовизначення кодувань символів (ненормативно)

Оголошення кодування в XML функціонує як внутрішня мітка-лейбл на кожен примірник, вказуючи, яка кодування використовується. Перш ніж процесор XML зможе прочитати внутрішній лейбл, однак, він, очевидно, повинен знати, яка кодування символів використовується — та, яку внутрішній лейбл намагається помітити. У загальному випадку, це безвихідній ситуації. У XML вона, однак, не зовсім безнадійна, оскільки XML обмежує загальний випадок двома способами: вважається, що кожна реалізація підтримує тільки кінцевий набір кодувань символів, і оголошення кодування XML обмежено в місцезнаходження та вмісті для того, щоб зробити можливим Автовизначення використовується кодування символів для кожного примірника, в звичайних випадках. Також у багатьох випадках доступні інші джерела інформації в доповнення до самого потоку даних XML. Можна виділити два випадки, в залежності від того, представлений чи XML-процесору екземпляр без або з будь-якої супутньої (зовнішньої) інформацією. Спочатку розглянемо перший випадок.

E.1 Визначення без зовнішньої інформації про кодування

Оскільки не кожен екземпляр XML, що супроводжується зовнішньої інформацією про кодуванні і не в кодуванні UTF-8 або UTF-16, повинен починатися оголошенням кодування XML, коли перші символи повинні бути '<?xml', і кожен відповідний процесор може визначити, після двох або чотирьох 8-ковий на вході, який з наступних варіантів застосувати. При читанні цього списку, може допомогти знання того, що в UCS-4 '<' це "#x0000003C" і '?' це "#x0000003F" і що Byte Order Mark/Знак Порядку байтів потрібного потоками даних UTF-16, це "#xFEFF". Нотацію ## використовується для позначення будь-якого байт значення, за винятком того, що два послідовних ## не можуть бути обидва 00.

З Byte Order Mark:

00 00 FE FF UCS-4, big-endian machine (1234 order)
FF FE 00 00 UCS-4, little-endian machine (4321 order)
00 00 FF FE UCS-4, unusual octet order (2143)
FE FF 00 00 UCS-4, unusual octet order (3412)
FE FF ## ## UTF-16, big-endian
FF FE ## ## UTF-16, little-endian
EF BB BF UTF-8

Без Byte Order Mark:

00 00 00 3C UCS-4 або інше кодування з 32-бітрим модулем коду та символи ASCII, кодовані значення ASCII, в, відповідно, big-endian (1234), little-endian (4321) і двох невикористовуваних порядках байтів (2143 і 3412). Оголошення кодування зобов'язана бути прочитане для того, щоб визначити, яка з UCS-4 або інших підтримуваних 32-бітних кодувань застосовується.
3C 00 00 00
00 00 3C 00
00 3C 00 00
00 3C 00 3F UTF-16BE, або big-endian ISO-10646-UCS-2, або інша кодування з 16-бітними модулем коду в порядку big-endian і символи ASCII, кодовані як значення ASCII (оголошення кодування зобов'язане бути прочитане, щоб визначити)
3C 00 3F 00 UTF-16BE, або big-endian ISO-10646-UCS-2, або інша кодування з 16-бітними модулем коду в порядку big-endian і символи ASCII, кодовані як значення ASCII (оголошення кодування зобов'язане бути прочитане, щоб визначити)
3C 3F 78 6D UTF-8, ISO 646, ASCII, деяка частина ISO 8859, Shift-JIS, EUC або якої-небудь іншої 7-бітної, 8-бітної або змішаної ширини кодування, що гарантує, що символи ASCII мають свої нормальні позиції, ширину і значення ; оголошення діючої кодування зобов'язана бути прочитане для того, щоб визначити, яка з них застосована, але, оскільки всі ці кодування використовують одні й ті ж бітовий послідовності для відповідних символів ASCII, оголошення кодування само може бути надійно прочитано
4C 6F A7 94 EBCDIC (в деякому сенсі; повне оголошення кодування зобов'язана бути прочитаний, щоб сказати, яка кодова сторінка використовується)
Other/ІншіUTF-8 без оголошення кодування, інакше лейбл з потоку даних буде знято (випробовуючи недолік наявності необхідного оголошення кодування), потік даних пошкоджений, фрагментарен або укладений в упаковку будь-якого виду

Цей рівень Автовизначення достатній для того, щоб читати оголошення кодування XML і розбирати код кодування символів, який поки ще необхідний для розрізнення окремих членів кожного сімейства кодувань (наприклад, для виклику UTF-8 з 8859 та частин 8859 однією з інший, або для розповсюдження використовуваної специфічної кодової сторінки EBCDIC, і т.д.).

Оскільки вміст декларації кодування обмежені із символів ASCII репертуар (хоч і з кодуванням), процесор може надійно читати всю декларацію кодування, як тільки вона виявила, якого родина кодувань у використанні. Так як у практиці, все широко використовуються кодування символів підпадають під одну з вищезазначених категорій, то декларація кодування XML дозволяє достатньо надійні в діапазоні маркування кодування символів, навіть якщо зовнішні джерела інформації в операційній системі або транспортно-протокол рівня ненадійним. Характер таких як кодування UTF-7, які перевантажені використанні ASCII-значний байт може не бути надійно виявлені.

Як тільки процесор виявив кодування символів у використанні, воно може діяти належним чином, або шляхом посилання на окремій вхідний звичної для кожного випадку, або по телефону належного перетворення функції на кожен символ введення.

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

W3C XML Working Group/Робоча група W3C XML (ненормативно)

Ця специфікація була підготовлена і затверджена для публікації в W3C XML Робочої групи (РГ). Робоча група затвердження цієї специфікації, не обов'язково означає, що всі учасники РГ проголосували за її затвердження. Нинішні та колишні члени в Робочої групи XML є:

G W3C XML Core Working Group/Робоча група W3C XML Core (ненормативно)

У другому виданні цієї специфікації, був підготовлений в W3C XML Core Робочої групи (РГ). Учасники групи, на момент публікації даного видання єe:

H Нотатки випуску (ненормативно)

Це видання було закодовані в кілька змінений варіант цього XMLspec DTD, 2.10. У XHTML версії були зроблені з комбінацією з xmlspec.xsl, diffspec.xsl, та REC-xml.xsl XSLT стилів.

I Пропозиції XML імен (ненормативно)

Наступні пропозиції, визначити, що вважається найкращою практикою в будівництві імен XML використовується як елемент назви, імена атрибутів, обробка задач навчання, організація імен, назв нотації, і значення атрибутів типу ID, і призначені в якості керівництва для Автори документа схеми та дизайнерів. Усі посилання на Unicode розуміється по відношенню до конкретної версії стандарту Unicode більше або дорівнює 3.0, яка версії повинні використовуватися на розсуд цього документа автор або схеми дизайнера.

Перші дві пропозиції, які безпосередньо випливають з правил обліку для ідентифікаторів у стандарт Unicode версії 3.0, і виключити всі керуючі символи, до якого додається nonspacing знаки, не-десяткових чисел, приватного використання символів, знаків пунктуації (при відзначила винятками), символи, нерозподіленого codepoints, і білі символи. Інші пропозиції, в основному отриманих від [XML-1.0] Додаток B.

  1. Перший символ будь-яке ім'я повинно мати Unicode General Category Ll, Lu, Lo, Lm, Lt або Nl, або бути '_' #x5F.

  2. Персонажі крім першого повинні мати Unicode General Category Ll, Lu, Lo, Lm, Lt, Mc, Mn, Nl, Nd, Pc або Cf, або бути однією з наступних: '-' #x2D, '.' #x2E, ':' #x3A чи '·' #xB7 (крапка посередині). З Cf символів безпосередньо не видно, їх слід використовувати з обережністю і тільки тоді, коли це необхідно, щоб уникнути створення імен, які відрізняються за XML процесори, але виглядають однаково на людей.

  3. Ідеографічні символи, які мають канонічне розкладання (у тому числі в діапазоні [#xF900-#xFAFF] і [#x2F800-#x2FFFD], з 12 винятками) не повинні бути використані в назвах.

  4. Символи, які мають сумісність розкладу (тобто з "сумісності форматування тега" у полі 5 з Unicode Символ баз даних - з поміткою на місцях 5 починаючи з "<") не повинні бути використані в назвах. Ця пропозиція не поширюється на # x0E33 ТАЙСКІЙ CHARACTER SARA AM або #x0E33 LAO CHARACTER А.М., який, незважаючи на їх сумісність разложения в регулярному використанні цих сценаріїв.

  5. Сполучення знаків призначена для використання тільки з символами (у тому числі в діапазоні [#x20D0-#x20EF] і [#x1D165-#x1D1AD]), не повинні бути використані в назвах.

  6. У міжрядковий анотацію символів ([[#xFFF9-#xFFFB]]), не повинні бути використані в назвах.

  7. Зміна селектору символів не повинна бути використана в назвах.

  8. Імена, які є абсурдними, unpronounceable, важко читати, або просто confusable з іншими імена не повинні бути зайняті.

Увага !