Поделиться через


Пространства имен и DTD в DOM

Определения типов документов (DTD) усложняют поддержку пространства имен. Например, следующий XML-код содержит атрибуты по умолчанию, содержащие двоеточия в их именах.

<!ATTLIST item x:id CDATA #IMPLIED>  

Ниже приведены возможные разрешения, если эта конструкция разрешена:

  • Префикс x: рассматривается как пространство имен, но этот префикс должен быть разрешаемым с помощью xmlns:x объявления пространства имен, которое также должно присутствовать где-либо в DTD. Это ошибка сопоставления этого префикса с чем-то другим в документе экземпляра.

  • Префикс x: пространства имен рассматривается как префикс пространства имен, но этот префикс всегда разрешается в контексте элементов экземпляра. Это означает, что префикс фактически может сопоставляться с разными универсальными идентификаторами ресурсов пространства имен (URI), в зависимости от области пространства имен, в которой item отображается элемент. Это поведение является более предсказуемым, чем разрешения, указанного в предыдущем пункте, но оно имеет другие сложные последствия, так как требует проявления атрибутов по умолчанию.

  • Двоеточие игнорируется, так как оно находится в DTD, а имя атрибута — x:y, нет префикса и URI пространства имен.

  • Двоеточие в атрибуте по умолчанию создает исключение, указывающее, что двоеточия в именах внутри DTD не поддерживаются. Это приводит к предсказуемому поведению, но означает, что вы не можете загрузить многие опубликованные DTD консорциума Всемирного интернета (W3C).

  • Когда пользователь запрашивает проверку DTD, поддержка пространства имен для всего документа отключается. Это позволяет загружать DTD W3C и выполнять прогнозируемое поведение.

XML в Microsoft .NET Framework реализует второй вариант для максимальной совместимости W3C.

См. также