Управление пространствами имен в XML-документе

Пространства имен XML связывают имена элементов и атрибутов в XML-документе с пользовательскими и стандартными URI. Для создания этих связей определяются префиксы для URI пространства имен, с помощью которых затем квалифицируются имена элементов и атрибутов в XML-данных. Пространства имен предотвращают конфликты имен элементов и атрибутов, а также позволяют обрабатывать и проверять элементы и атрибуты с одним и тем же именем.

Объявление пространств имен

Пространство имен для элемента объявляется с помощью атрибута xmlns::

xmlns:<name>=<"uri">

где <name> — это префикс пространства имен, а <"uri"> — это URI, который определяет это пространство имен. После объявления префикса его можно использовать для уточнения имен элементов и атрибутов в XML-документе и связывания их с URI-кодом пространства имен. Так как этот префикс пространства имен используется во всем документе, он должен быть коротким.

В данном примере определяются два элемента BOOK. Первый элемент квалифицируется префиксом mybook, а второй — префиксом bb. Каждый префикс связан с разными URI-кодами пространств имен:

<mybook:BOOK xmlns:mybook="http://www.contoso.com/books.dtd">  
    <bb:BOOK xmlns:bb="urn:blueyonderairlines" />
</mybook:BOOK>

Чтобы указать, что элемент принадлежит к определенному пространству имен, добавьте к нему префикс пространства имен. Например, если Author элемент принадлежит пространству mybook имен, он объявляется как <mybook:Author>.

Область видимости объявления

Пространство имен действует от точки объявления до конца элемента, где оно было объявлено. В этом примере пространство имен, определенное в элементе BOOK, не применяется к элементам, которые находятся за пределами элемента BOOK, например к элементу Publisher:

<Author>Joe Smith</Author>  
<BOOK xmlns:book="http://www.contoso.com">  
    <title>My Wonderful Day</title>  
      <price>$3.95</price>  
</BOOK>  
<Publisher>  
    <Name>MSPress</Name>  
</Publisher>  

Пространство имен можно использовать только после его объявления, однако это не значит, что объявление пространства имен должно располагаться в самом начале XML-документа.

Если в XML-документе используются несколько пространств имен, можно определить одно из них как пространство по умолчанию, чтобы упростить чтение документа. Пространство имен по умолчанию объявляется в корневом элементе и применяется ко всем элементам в документе, которые не квалифицированы. Пространства имен по умолчанию применяются только к элементам и не применяются к атрибутам.

Для использования пространства имен по умолчанию не указывайте префикс и двоеточие в объявлении элемента:

<BOOK xmlns="http://www.contoso.com/books.dtd">  
...
</BOOK>

Управление пространствами имен

В классе XmlNamespaceManager хранится коллекция URI пространств имен и их префиксов. С его помощью можно искать, добавлять и удалять пространства имен из этой коллекции. В некоторых контекстах этот класс необходим для повышения производительности обработки XML. Например, класс XsltContext используется классом XmlNamespaceManager для обеспечения поддержки XPath.

Диспетчер пространств имен не выполняет проверку пространств имен, так как предполагается, что префиксы и пространства имен уже проверены и соответствуют спецификации W3C для пространств имен.

Примечание.

Интерфейс LINQ to XML в C# и Visual Basic использует XmlNamespaceManager для управления пространствами имен. Дополнительные сведения об управлении пространствами имен в случае использования LINQ to XML см. в документации по LINQ, в разделах Работа с пространствами имен XML (C#) и Работа с пространствами имен XML (Visual Basic).

Вот некоторые из задач по управлению и подстановке, которые можно выполнить с помощью класса XmlNamespaceManager. Дополнительные сведения и примеры см. в разделах справочника, посвященных каждому методу или свойству.

По Использование
Добавление пространства имен AddNamespaceМетод
Удаление пространства имен RemoveNamespaceМетод
Поиск URI для пространства имен по умолчанию Свойство DefaultNamespace
Поиск URI для префикса пространства имен LookupNamespaceМетод
Поиск префикса для URI-кодов пространства имен LookupPrefixМетод
Получение списка пространств имен, которые есть на текущем узле GetNamespacesInScopeМетод
Задание области видимости пространства имен Методы PushScope и PopScope
Проверка того, определен ли префикс в текущей области HasNamespaceМетод
Получение таблицы имен используется для поиска префиксов и URI Свойство NameTable

См. также