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

Twitter LinkedIn Facebook Адрес электронной почты

  • Статья
  • Чтение занимает 2 мин

Пространства имен 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

См. также

  • XmlNamespaceManager
  • XML-документы и данные

Создание документа с пространствами имен в Visual Basic — LINQ to XML

Twitter LinkedIn Facebook Адрес электронной почты

  • Статья
  • Чтение занимает 2 мин

В этой статье показано, как создать документ с пространствами имен в Visual Basic.

При использовании литералов XML в Visual Basic пользователи могут задавать одно глобальное пространство имен XML. Это пространство имен является пространством имен по умолчанию как для литералов, так и для свойств XML. Пространство имен XML по умолчанию можно задать как на уровне проекта, так и на уровне файла. Если он определен на уровне файла, он переопределяет пространство имен по умолчанию на уровне проекта.

Можно также задавать другие пространства имен и указывать префиксы для них. Ключевое Imports слово используется для определения обоих типов пространства имен.

Дополнительные сведения см. в xml-литералах в Visual Basic.

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

Пример. Создание документа с пространством имен

В этом примере создается документ, который содержит пространство имен.

Imports <xmlns:aw="http://www.adventure-works.com">
Module Module1
    Sub Main()
        Dim root As XElement = _
            <aw:Root>
                <aw:Child aw:Att="attvalue"/>
            </aw:Root>
        Console.WriteLine(root)
    End Sub
End Module

В этом примере выводятся следующие данные:

<aw:Root xmlns:aw="http://www.adventure-works.com">
  <aw:Child aw:Att="attvalue" />
</aw:Root>

Пример. Создание документа с двумя пространствами имен с префиксом

В этом примере создается документ, содержащий два пространства имен. Одно из них — это пространство имен по умолчанию, а другой — префикс.

Imports <xmlns="http://www.adventure-works.com">
Imports <xmlns:fc="www.fourthcoffee.com">
Module Module1
    Sub Main()
        Dim root As XElement = _
            <Root>
                <Child Att="attvalue"/>
                <fc:Child2>child2 content</fc:Child2>
            </Root>
        Console.
WriteLine(root) End Sub End Module

В этом примере выводятся следующие данные:

<Root xmlns:fc="www.fourthcoffee.com" xmlns="http://www.adventure-works.com">
  <Child Att="attvalue" />
  <fc:Child2>child2 content</fc:Child2>
</Root>

Пример. Создание документа с двумя пространствами имен с префиксами

В следующем примере создается документ, содержащий два пространства имен с префиксами пространства имен.

При сериализации XML-дерева LINQ to XML выдает объявления пространства имен в соответствии с требованиями, чтобы каждый элемент был в указанном пространстве имен.

Imports <xmlns:aw="http://www.adventure-works.com">
Imports <xmlns:fc="www.fourthcoffee.com">
Module Module1
    Sub Main()
        Dim root As XElement = _
            <aw:Root>
                <fc:Child>
                    <aw:DifferentChild>other content</aw:DifferentChild>
                </fc:Child>
                <aw:Child2>c2 content</aw:Child2>
                <fc:Child3>c3 content</fc:Child3>
            </aw:Root>
        Console. WriteLine(root)
    End Sub
End Module

В этом примере выводятся следующие данные:

<aw:Root xmlns:fc="www.fourthcoffee.com" xmlns:aw="http://www.adventure-works.com">
  <fc:Child>
    <aw:DifferentChild>other content</aw:DifferentChild>
  </fc:Child>
  <aw:Child2>c2 content</aw:Child2>
  <fc:Child3>c3 content</fc:Child3>
</aw:Root>

См. также

  • Обзор пространств имен

пространств имен XML

❮ Предыдущий Далее ❯


Пространства имен XML позволяют избежать конфликтов имен элементов.


Конфликты имен

В XML имена элементов определяются разработчиком. Это часто приводит к конфликту при попытке смешать XML-документы из разных XML-приложений.

Этот XML содержит информацию таблицы HTML:


<тр>



Яблоки Бананы

Этот XML содержит информацию о столе (предмете мебели):


Журнальный столик в африканском стиле
<ширина>80
120

Если бы эти фрагменты XML были сложены вместе, возник бы конфликт имен. Оба содержат элемент

, но эти элементы имеют разное содержание и значение.

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


Разрешение конфликта имен с помощью префикса

Конфликтов имен в XML можно легко избежать, используя префикс имени.

Этот XML содержит информацию о таблице HTML и предмете мебели:

<ч: таблица>
<ч:тр>
Яблоки
Бананы


  Африканский журнальный столик
  80
  120
< /f:таблица>

В приведенном выше примере конфликта не будет, поскольку два элемента

имеют разные имена.



Пространства имен XML — атрибут xmlns

При использовании префиксов в XML необходимо определить пространство имен для префикса.

Пространство имен может быть определено с помощью xmlns атрибут в начальном теге элемента.

Объявление пространства имен имеет следующий синтаксис. xmlns: префикс = « URI «.


  
    Яблоки
Бананы
  


  Журнальный столик в африканском стиле
  80
  120

В приведенном выше примере:

Атрибут xmlns в первом элементе

дает префиксу h: полное пространство имен.

Атрибут xmlns во втором элементе

дает префиксу f: полное пространство имен.

Когда для элемента определено пространство имен, все дочерние элементы с одним и тем же префиксом связываются с одним и тем же пространством имен.

Пространства имен также могут быть объявлены в корневом элементе XML:

w3.org/TR/html4/»
xmlns:f=»https://www.w3schools.com/furniture»>


  < h:tr>
    Яблоки
    Бананы
  


  Африканский журнальный столик
  80
  120

Примечание: URI пространства имен не используется синтаксическим анализатором для поиска информации.

Цель использования URI — дать пространству имен уникальное имя.

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


Унифицированный идентификатор ресурса (URI)

Унифицированный идентификатор ресурса (URI) — это строка символов, которая идентифицирует интернет-ресурс.

Наиболее распространенным URI является унифицированный указатель ресурса (URL), который идентифицирует адрес интернет-домена. Другим, не очень распространенным типом URI является унифицированное имя ресурса (URN).


Пространства имен по умолчанию

Определение пространства имен по умолчанию для элемента избавляет нас от использования префиксов во всех дочерних элементах. Он имеет следующий синтаксис:

xmlns=» namespaceURI »

Этот XML содержит информацию таблицы HTML:

<таблица xmlns="http://www.w3.org/TR/html4/">
<тр>




Яблоки Бананы

Этот XML содержит информацию о предмете мебели:


Журнальный столик в африканском стиле
<ширина>80
120


Реальное использование пространств имен

XSLT — это язык, который можно использовать для преобразования XML-документов в другие форматы.

Приведенный ниже XML-документ используется для преобразования XML в HTML.

Пространство имен «http://www.w3.org/1999/XSL/Transform» идентифицирует XSLT элементы внутри документа HTML:

» ?>




 

Моя коллекция компакт-дисков


 
   
     
   
   
   

     
     
   
   
 
Заголовок
     
Исполнитель



Если вы хотите узнать больше о XSLT, прочтите нашу Учебное пособие по XSLT.

❮ Предыдущий Далее ❯


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

Редактировать

Твиттер LinkedIn Фейсбук Электронная почта

  • Статья
  • 2 минуты на чтение

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

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

Чтобы объявить пространство имен для элемента, используйте атрибут xmlns: :

xmlns:=<"uri">

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

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

 
    

 

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

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

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

 Joe Smith
<КНИГА xmlns:book="http://www. contoso.com">
    Мой чудесный день
      <цена>$3,95

<Издатель>
    MSPress

 

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

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

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

 
...

 

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

Класс XmlNamespaceManager хранит коллекцию URI пространств имен и их префиксов и позволяет искать, добавлять и удалять пространства имен из этой коллекции.