Содержание

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

  • Чтение занимает 2 мин

В этой статье

Пространства имен XML связывают имена элементов и атрибутов в XML-документе с пользовательскими и стандартными URI.XML namespaces associate element and attribute names in an XML document with custom and predefined URIs. Для создания этих связей определяются префиксы для URI пространства имен, с помощью которых затем квалифицируются имена элементов и атрибутов в XML-данных.To create these associations, you define prefixes for namespace URIs, and use those prefixes to qualify element and attribute names in XML data. Пространства имен предотвращают конфликты имен элементов и атрибутов, а также позволяют обрабатывать и проверять элементы и атрибуты с одним и тем же именем.

Namespaces prevent element and attribute name collisions, and enable elements and attributes of the same name to be handled and validated differently.

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

Пространство имен для элемента объявляется с помощью атрибута xmlns::To declare a namespace on an element, you use the xmlns: attribute:

xmlns:<name>=<"uri">

где <name> — это префикс пространства имен, а <"uri"> — это URI, который определяет это пространство имен.where <name> is the namespace prefix and

<"uri"> is the URI that identifies the namespace. После объявления префикса его можно использовать для уточнения имен элементов и атрибутов в XML-документе и связывания их с URI-кодом пространства имен.After you declare the prefix, you can use it to qualify elements and attributes in an XML document and associate them with the namespace URI. Так как этот префикс пространства имен используется во всем документе, он должен быть коротким.Because the namespace prefix is used throughout a document, it should be short in length.

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

BOOK.This example defines two BOOK elements. Первый элемент квалифицируется префиксом mybook, а второй — префиксом bb.The first element is qualified by the prefix, mybook, and the second element is qualified by the prefix, bb. Каждый префикс связан с разными URI-кодами пространств имен:Each prefix is associated with a different namespace URI:

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

Чтобы указать, что элемент принадлежит к определенному пространству имен, добавьте к нему префикс пространства имен.To signify that an element is a part of a particular namespace, add the namespace prefix to it.

Например, если элемент Author принадлежит пространству имен mybook, то он объявляется как <mybook:Author>.For example, if a Author element belongs to the mybook namespace, it is declared as <mybook:Author>.

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

Пространство имен действует от точки объявления до конца элемента, где оно было объявлено.A namespace is effective from its point of declaration until the end of the element it was declared in. В этом примере пространство имен, определенное в элементе

BOOK, не применяется к элементам, которые находятся за пределами элемента BOOK, например к элементу Publisher:In this example, the namespace defined in the BOOK element doesn’t apply to elements outside the BOOK element, such as the Publisher element:

<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-документа.A namespace must be declared before it can be used, but it doesn’t have to appear at the top of the XML document.

Если в XML-документе используются несколько пространств имен, можно определить одно из них как пространство по умолчанию, чтобы упростить чтение документа.When you use multiple namespaces in an XML document, you can define one namespace as the default namespace to create a cleaner looking document. Пространство имен по умолчанию объявляется в корневом элементе и применяется ко всем элементам в документе, которые не квалифицированы.The default namespace is declared in the root element and applies to all unqualified elements in the document.

Пространства имен по умолчанию применяются только к элементам и не применяются к атрибутам.Default namespaces apply to elements only, not to attributes.

Для использования пространства имен по умолчанию не указывайте префикс и двоеточие в объявлении элемента:To use the default namespace, omit the prefix and the colon from the declaration on the element:

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

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

В классе XmlNamespaceManager хранится коллекция URI пространств имен и их префиксов. С его помощью можно искать, добавлять и удалять пространства имен из этой коллекции.The XmlNamespaceManager class stores a collection of namespace URIs and their prefixes, and lets you look up, add, and remove namespaces from this collection. В некоторых контекстах этот класс необходим для повышения производительности обработки XML.In certain contexts, this class is required for better XML processing performance. Например, класс XsltContext используется классом XmlNamespaceManager для обеспечения поддержки XPath.For example, the XsltContext class uses XmlNamespaceManager for XPath support.

Диспетчер пространств имен не выполняет проверку пространств имен, так как предполагается, что префиксы и пространства имен уже проверены и соответствуют спецификации W3C для пространств имен.The namespace manager doesn’t perform any validation on the namespaces, but assumes that prefixes and namespaces have already been verified and conform to the W3C Namespaces specification.

Вот некоторые из задач по управлению и подстановке, которые можно выполнить с помощью класса XmlNamespaceManager.Here are some of the management and lookup tasks you can perform with the XmlNamespaceManager class. Дополнительные сведения и примеры см. в разделах справочника, посвященных каждому методу или свойству.For more information and examples, follow the links to the reference page for each method or property.

КомуToИспользоватьUse
Добавление пространства именAdd a namespaceМетод AddNamespaceAddNamespace method
Удаление пространства именRemove a namespaceМетод RemoveNamespaceRemoveNamespace method
Поиск URI для пространства имен по умолчаниюFind the URI for the default namespaceСвойствоDefaultNamespaceDefaultNamespace property
Поиск URI для префикса пространства именFind the URI for a namespace prefixМетод LookupNamespaceLookupNamespace method
Поиск префикса для URI-кодов пространства именFind the prefix for a namespace URIМетод LookupPrefixLookupPrefix method
Получение списка пространств имен, которые есть на текущем узлеGet a list of namespaces in the current nodeМетод GetNamespacesInScopeGetNamespacesInScope method
Задание области видимости пространства именScope a namespaceМетоды PushScope и PopScopePushScope and PopScope methods
Проверка того, определен ли префикс в текущей областиCheck whether a prefix is defined in the current scope
Метод HasNamespaceHasNamespace method
Получение таблицы имен используется для поиска префиксов и URIGet the name table used to look up prefixes and URIsСвойствоNameTableNameTable property

См.

такжеSee also

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

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

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

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

Следующий код XML содержит информацию о HTML таблице:


<table>
   <tr>
      <td>Яблоки</td>
      <td>Бананы</td>
   </tr>
</table>

Следующий код XML содержит информацию о столе (предмет мебели), который по англ. тоже table:


<table>
   <name>Африканский кофейный столик</name>
   <width>80</width>
   <length>120</length>
</table>

Если эти два фрагмента кода XML будут сведены вместе, то возникнет конфликт имен. Так как оба документа содержат элемент <table>, хотя и с разным контентом и значением.

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

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

В XML избежать конфликта имен можно при помощи префикса имени элемента.

Следующий код XML содержит информацию о таблице HTML и о столе:


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

<f:table>
   <f:name>Африканский кофейный столик</f:name>
   <f:width>80</f:width>
   <f:length>120</f:length>
</f:table>

В этом примере не будет конфликта имен, так как два элемента <table> имеют разные имена.

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

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

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

Декларация пространства имен имеет следующий синтаксис — xmlns:префиксURI«.


<root>
   <h:table xmlns:h="http://www.w3.org/TR/html4/">
      <h:tr>
         <h:td>Яблоки</h:td>
         <h:td>Бананы</h:td>
      </h:tr>
   </h:table>

   <f:table xmlns:f="http://www.w3schools.com/furniture">
      <f:name>Африканский кофейный столик</f:name>
      <f:width>80</f:width>
      <f:length>120</f:length>
   </f:table>
</root>

В данном примере, атрибут xmlns в теге <table> определяет префиксам h: и f: квалифицирующее пространство имен.

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

Пространства имен могут декларироваться либо непосредственно в самом элементе, либо в корневом элементе XML документа:


<root xmlns:h="http://www. w3.org/TR/html4/" xmlns:f="http://www.w3schools.com/furniture">
   <h:table>
      <h:tr>
         <h:td>Яблоки</h:td>
         <h:td>Бананы</h:td>
      </h:tr>
   </h:table>

   <f:table>
      <f:name>Африканский кофейный столик</f:name>
      <f:width>80</f:width>
      <f:length>120</f:length>
   </f:table>
</root>

Замечание: URI пространства имен не используется парсером для получения какой-либо информации. Цель всего этого состоит в том, чтобы дать пространству имен уникальное имя. Тем не менее, часто компании используют пространство имен, как указатель на веб-страницу с информацией об этом пространстве имен.

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

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

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

В наших примерах мы будем использовать только URL.

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

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


xmlns="URI пространства имен"

Следующий код XML содержит информацию о таблице HTML:


<table xmlns="http://www.w3.org/TR/html4/">
   <tr>
      <td>Яблоки</td>
      <td>Бананы</td>
   </tr>
</table>

Следующий код XML содержит информацию о предмете мебели — столе:


<table xmlns="http://www.w3schools.com/furniture">
   <name>Африканский кофейный столик</name>
   <width>80</width>
   <length>120</length>
</table>

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

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

В следующем документе XSLT вы можете увидеть, что большинство элементов являются тегами HTML. Те элементы, которые не являются тегами HTML, имеют префикс xsl, идентифицированный пространством имен xmlns:xsl=»http://www.w3.org/1999/XSL/Transform»:


<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
   <xsl:template match="/">
      <html>
         <body>
            <h3>Моя коллекция CD</h3>
            <table border="1">
               <tr>
                  <th>Title</th>
                  <th>Artist</th>
               </tr>
               <xsl:for-each select="catalog/cd">
                  <tr>
                     <td><xsl:value-of select="title"/></td>
                     <td><xsl:value-of select="artist"/></td>
                  </tr>
               </xsl:for-each>
            </table>
         </body>
      </html>
   </xsl:template>
</xsl:stylesheet>

Кодировка в XML документе Вверх XML атрибуты

Пространства имен (Namespaces)(

Пространства имен (Namespaces)

Данная лекция посвящена одному из очень важных, концептуальных вопросов XML технологии, а именно предназначению и использованию пространств имен (Namespace).

1 Проблема неоднозначности использования имен. 1

2. Понятие пространства имен в XML.. 1

3. Задание элементов и атрибутов в пространстве имен. 2

4. Область действия объявлений пространств имен. 4

5. Пример реализации концепции пространства имен. 6

5.1 Пространство имен action для слова «замок» в смысле действия. 6

5.2 Пространство имен building для слова » замок » в смысле здание. 6

5.3 Пространство имен security для слова » замок » в смысле безопасность. 7

5.4 Главное (main) пространство имен. 7

5.5 XML документ. 8

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

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

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

Возьмем известную всем скороговорку: «Запер замок на замок, чтобы замок не замок». В данном тексте слово замок употребляется четыре раза в трех совершенно разных смыслах: а) здание; б) устройство, обеспечивающее защиту от несанкционированного доступа в здание; в) результат, наступающий из-за попадания воды. Человек интуитивно чувствует контекст и понимает, в каком смысле замок используется. Программе, чтобы она разобралась, контекст надо подсказать.

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

Чтобы избежать подобные ситуации в XML технологии было введено понятие пространства имен, правила использования которого регламентированы в Рекомендации Namespace in XML 1.0,  разработанной World Wide Web Consortium (W3C). На момент написания данной лекции действует третья редакция от 8 декабря 2009 года. Перевод этой версии Рекомендации можно посмотреть здесь.

Понятие пространства имен не является особенностью XML технологии и появилось значительно раньше. Где бы оно ни использовалось,  общий смысл этого понятия везде примерно один и тот же. Однако принципы задания и «физический» смысл могут существенно отличаться.

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

В программировании способы задания пространства имен в общем случае могут быть двух видов.

Первый способ базируется на представлении предметных областей, связанных в единую иерархическую структуры. В этом случае пространство имен определяет контекстный узел иерархии, а поддерево иерархии, для которого контекстный узел является родителем, и есть текущее пространство имен. Чем ниже мы спускаемся по дереву иерархии, тем более точно задаем пространство имен, уменьшая возможность коллизий из-за возможного совпадения имен. 

Типичным представителем, использующим  такой подход, является иерархия классов .Net при программировании в Windows. Например, для использования классов, обеспечивающих возможности сетевого взаимодействия следует объявить пространство имен System.Net. В нотации языка С# это будет выглядеть следующим образом:

using System.Net;

Если же нам требуется только обмен данными с использованием сокетов, то лучше задать более узкое пространство имен:

using System.Net.Sockets;

Иной способ задания пространств имен используется, когда пространство имен не имеет иерархических взаимосвязей, т. е. представляется плоскими структурами. Такой вид определения пространств имен применяется, например, в языке программирования С++.

Например, чтобы использовать элементы библиотеки STL необходимо в программе объявить пространство имен этой  библиотеки. В нотации языка С++ это будет выглядеть следующим образом:

using namespace std;

В обоих представленных выше способах задания пространств имен вы, как бы, даете разрешение программе на работу с классами (их методами и свойствами), входящими в это пространство имен. Здесь концептуально важно, что за конкретным пространством имен стоит конкретный набор классов.

Теперь вернемся к XML технологии. Согласно определению Рекомендации W3C «Пространство имен XML идентифицируется ссылкой URI [RFC3986]; имена элементов и атрибутов могут размещаться в пространстве имен XML, используя механизмы, описанные в данной спецификации».

Анализируя представленное определение важно отметить следующие моменты:

— в качестве идентификатора пространства имен в XML используется ссылка URI. Не полный путь к контекстному узлу, как в .Net, ни символьный идентификатор, как в С++, а именно ссылка URI;

— ссылка URI это идентификатор характеризующий пространство имен и ничего более, он ни на что не указывает, по его адресу ничего не располагается;

— в .Net и С++ пространства имен включают конкретный набор классов (их методов и свойств).

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

Для обеспечения однозначности понимания, используемых в XML документе имен объектов, используется расширенное имя. Расширенное имя представляет собой пару, состоящую из двух имен: имени пространства имен (в виде ссылки URI), идущего впереди, и локального имени элемента или атрибута в этом пространстве имен.

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

На имя префикса пространства имен накладываются следующие ограничения:

·         не может иметь значение xml, т.к. это значение зарезервировано за префиксом, привязанным к имени пространства имен http://www.w3.org/XML/1998/namespace;

·         не может иметь значение xmlns, т.к. данное имя зарезервировано за атрибутом  объявления пространств имен;

·         не должно начинаться последовательностью трех символов x, m, l (независимо от регистра).

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

Объявление пространств имен выполняется с помощью специально зарезервированного атрибута xmlns. Синтаксис объявления имеет следующий вид:

xmlns[:prefix]=»пространство имен»

где: prefix – префикс, используемый для связывания имен элементов и атрибутов с именем пространства имен;

пространство имен – ссылка URI, идентифицирующая пространство имен.

Например, в представленном ниже примере объявляется пространство имен, идентифицируемое ссылкой URI «http://www.main.ru»  и связанное с префиксом doc.

<?xml version=»1.0″ encoding=»Windiws-1251″?>

<main:document xmlns:doc=»http://www.main.ru»>

            <doc:section>Раздел 1</doc:section>

            <doc:section>Раздел 2</doc:section>

</doc:document>                                            

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

·         в элементе может быть задано несколько пространств имен;

·         только одно из них может быть задано как пространство имен по умолчанию. Пространство имен по умолчанию характеризуется тем, что для него не указывается префикс;

·         если элемент, в котором объявляется пространство имен, входит в это пространство имен, то он указывается с объявленным в нем префиксом;

·         объявление пространства имен может выполняться только в начальном теге элемента;

·         конечный тег элемента также указывается с префиксом пространства имен.

Ниже представлен более сложный пример объявления пространств имен, показывающий реализацию всех указанных правил.

<?xml version=»1.0″ encoding=»Windiws-1251″?>

<doc:document xmlns:doc=»http://www.main.ru»

    xmlns:=»http://www.authors.ru»>

            <doc:section>Раздел 1

                        <authors>

                                   <author>Автор 1<.author>

                                   <author>Автор 2<. author>

                        <authors>

</doc:section>

            <doc:section>Раздел 2

                        <authors>

                                   <author>Автор 2<.author>

                                   <author>Автор 3<.author>

                                   <author>Автор 4<.author>

                        <authors>

</doc:section>

</doc:document>                                            

В представленном примере объявляются два пространства имен, причем второе (http://www.authors.ru) определено как пространство имен по умолчанию, без префикса. В XML  документе элементы document и section, входящие в пространство имен http://www.main.ru, указываются с префиксом doc. Элементы authors и author, входящие в пространство имен http://www.authors.ru, указываются без префикса.

            Следует иметь в виду, что значение URI ссылки пространства имен чувствительно к регистру (собственно, как и имена элементов и атрибутов). Поэтому, указанные ниже три ссылки будут определять разные пространства имен:

·         http://www.authors.ru

·         http://www.Authors.ru

·         http://www.AUTHORS.ru

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

·         на весь документ, когда оно объявлено в корневом элементе документа;

·          на конкретный контейнер и все включенные в него элементы и атрибуты, когда оно объявлено в элементе верхнего уровня контейнера;

·         на отдельный элемент и его атрибуты, когда оно объявлено непосредственно в данном элементе.

Область действия пространства имен по умолчанию определяется аналогичным образом. При этом необходимо помнить следующее. В XML документе может быть действительным только одно пространство имен по умолчанию. Если в области действия пространства имен по умолчанию задается другое пространство имен по умолчанию, то оно отменяет действие ранее объявленного (первого) пространства имен по умолчанию. По окончанию действия второго пространства имен по умолчанию вновь начинает действовать первое пространство имен по умолчанию.

Ниже представлен пример гипотетического XML документа, иллюстрирующий области действия пространств имен. В примере используется несколько элементов protocol, но в зависимости от его расположения в документе, они будут определены в разных пространствах имен и, соответственно, иметь разный смысловой контекст. (Цифры справа не являются частью примера и служат для идентификации строк.)

<?xml version=»1.0″ encoding=»Windows-1251″?>

 1

<net:network xmlns:net=»http://www. network.com/lan»

 2

                xmlns=»http://www.network.com/server»>

 3

            <softlan>

 4

                        <net:protocol> … </net:protocol>

 5

                        <protocol> … </protocol>

 6

                        <frm:organization xmlns:frm=»http://www.network.com/firm»>

 7

                                   <frm:protocol> … </frm:protocol>

 8

                                   <protocol> . .. </protocol>

 9

                        </frm:organization>

10

            </softlan>

11

            <hardlan xmlns:hrd=»http://www.network.com/hard»

12

                                                 xmlns=»http://www.network.com/hard/firm»>

13

                        <hrd:equipment type=»switch»>

14

                                   <protocol net:lan=»Ethernet»>CSMA/CD</protocol>

15

                        </hrd:equipment>

16

            </hardlan>

17

</net:network>

18

Строки 2 и 3 представляют корневой элемент документа network. В нем определены два пространства имен. Первое идентифицируется префиксом net (в это пространство имен входит и сам элемент net), а второе не имеет префикса, т.е. является пространством имен по умолчанию. Действие обоих пространств имен распространяется на весь документ.

Строки 4 и 11 представляют контейнер, корневой элемент которого (softlan) принадлежит пространству имен по умолчанию http://www.network.com/server, заданному в корневом элементе документа.

Строка 5 представляет элемент protocol, принадлежащий пространству имен http://www.network.com/lan.

Строка 6 представляет элемент protocol, принадлежащий пространству имен по умолчанию http://www.network.com/server.

Строки 7 и10 представляют контейнер, корневой элемент которого (organization) принадлежит пространству имен http://www.network.com/firm, которое объявлено в этом элементе с префиксом frm.

Строка 8 представляет элемент protocol, принадлежащий пространству имен http://www. network.com/firm.

Строка 9 представляет элемент protocol, принадлежащий пространству имен по умолчанию http://www.network.com/server.

Строки 12, 13 и 17 представляют контейнер, корневой элемент которого (hardlan) принадлежит пространству имен по умолчанию http://www.network.com/server. В корневом элементе этого контейнера объявлено два пространства имен. Одно с префиксом hrd, а другое как пространство имен по умолчанию. Поэтому в области действия данного контейнера все элементы и атрибуты без префикса будут принадлежать пространству имен http://www.network.com/hard/firm.

Строки 14 и 16 представляют контейнер, корневой элемента которого (equipment) принадлежит пространству имен http://www.network.com/hard. Атрибут type корневого элемента принадлежит пространству имен по умолчанию xmlns=»http://www.network.com/hard/firm.

Строка 15 представляет элемент protocol, принадлежащий пространству имен по умолчанию xmlns=»http://www. network.com/hard/firm. Его атрибут lan принадлежит пространству имен http://www.network.com/lan.

В первом разделе данной лекции, в качестве примера, мы использовали фразу: «Запер замок на замок, чтобы замок не замок», в которой используются три слова «замок» в качестве а) здания, б) устройства безопасности, в) результата действия.

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

В XML документе подключим схемы и объявляем 4 пространства имен. Теперь в XML документе однозначно можно определить смысл каждого слова «замок».

<?xml version=»1.0″ encoding=»Windiws-1251″?>

<xsd:schema targetNamespace=»http://www.action.ru»

elementFormDefault=»qualified» attributeFormDefault=»unqualified»

xmlns:act=»http://www.action.ru»

xmlns:xsd=»http://www. w3.org/2001/XMLSchema»>

<xsd:element name=»действие» type=»act:actionType»/>

 <!— В данном типе задаем несколько возможных действий, в том числе и нужное нам —>

 <xsd:complexType name=»actionType»>

 <xsd:choice>

  <xsd:element name=»высох» type=»xsd:string» minOccurs=»0″ maxOccurs=»unbounded»/>

  <xsd:element name=»замок» type=»xsd:string» minOccurs=»0″ maxOccurs=»unbounded»/>

  </xsd:choice>

 </xsd:complexType>

</xsd:schema>

<?xml version=»1.0″ encoding=»Windiws-1251″?>

<xsd:schema targetNamespace=»http://www.building.ru»

elementFormDefault=»qualified» attributeFormDefault=»unqualified»

xmlns:bui=»http://www.building.ru»

xmlns:xsd=»http://www.w3.org/2001/XMLSchema»>

<xsd:element name=»здание» type=»bui:buildingType»/>

<!— В данном типе задаем несколько возможных типов зданий, в том числе и нужное нам —>

 <xsd:complexType name=»buildingType»>

 <xsd:choice>

  <xsd:element name=»дом» type=»xsd:string» minOccurs=»0″ maxOccurs=»unbounded»/>

  <xsd:element name=»замок» type=»xsd:string» minOccurs=»0″ maxOccurs=»unbounded»/>

  </xsd:choice>

 </xsd:complexType>

</xsd:schema>

<?xml version=»1. 0″ encoding=»Windiws-1251″?>

<xsd:schema targetNamespace=»http://www.security.ru»

elementFormDefault=»qualified» attributeFormDefault=»unqualified»

xmlns:sec=»http://www.security.ru»

xmlns:xsd=»http://www.w3.org/2001/XMLSchema»>

<xsd:element name=»защита» type=»sec:securityType»/>

<!— В данном типе задаем несколько возможных значений в смысле безопасности, в том числе и нужное нам —>

 <xsd:complexType name=»securityType»>

 <xsd:choice>

  <xsd:element name=»запор» type=»xsd:string» minOccurs=»0″ maxOccurs=»unbounded»/>

  <xsd:element name=»замок» type=»xsd:string» minOccurs=»0″ maxOccurs=»unbounded»/>

  </xsd:choice>

 </xsd:complexType>

</xsd:schema>

<?xml version=»1.0″ encoding=»Windiws-1251″?>

<xsd:schema targetNamespace=»http://www.main.ru»

elementFormDefault=»qualified» attributeFormDefault=»unqualified»

xmlns:xsd=»http://www. w3.org/2001/XMLSchema»

xmlns=»http://www.main.ru»

xmlns:act=»http://www.action.ru»

xmlns:bui=»http://www.building.ru»

xmlns:sec=»http://www.security.ru»>

<xsd:import namespace=»http://www.action.ru» schemaLocation=»e:\phrase\action.xsd»/>

<xsd:import namespace=»http://www.security.ru» schemaLocation=»e:\phrase\security.xsd»/>

<xsd:import namespace=»http://www.building.ru» schemaLocation=»e:\phrase\building.xsd»/>

<xsd:element name=»документ» type=»documentType»/>

 <xsd:complexType name=»documentType»>

 <xsd:sequence>

  <xsd:element name=»фраза» type=»mixedType»  minOccurs=»0″ maxOccurs=»unbounded»/>

 </xsd:sequence>

 </xsd:complexType>

 <xsd:complexType name=»mixedType» mixed=»true»>

 <xsd:sequence>

   <xsd:element ref=»bui:здание»/>

   <xsd:element ref=»sec:защита»/>

   <xsd:element ref=»bui:здание»/>

   <xsd:element ref=»act:действие»/>

</xsd:sequence>

</xsd:complexType>

</xsd:schema>

<?xml version=»1. 0″ encoding=»Windows-1251″?>

<документ xmlns:xsi=»http://www.w3.org/2001/XMLSchema-instance»

                                                  xmlns=»http://www.main.ru»

                                                  xmlns:act=»http://www.action.ru»

                                                  xmlns:bui=»http://www.building.ru»

                                                  xmlns:sec=»http://www.security.ru»

                                                  xsi:schemaLocation=»http://www.main.ru e:\phrase\main.xsd»>

            <фраза>

                        Запер <bui:здание><bui:замок>замок</bui:замок></bui:здание> на

                        <sec:защита><sec:замок>замок</sec:замок></sec:защита>, чтобы

                        <bui:здание><bui:замок>замок</bui:замок></bui:здание> не

                        <act:действие><act:замок>замок</act:замок></act:действие>.

            </фраза>

</документ>

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

Понятие “пространство имен” чрезвычайно важно в программировании. Оно является основой объектно-ориентированного подхода. В ActionScript роль пространств имен выполняют объекты. В чем же польза от разделения глобальной области видимости на отдельные “комнаты”? Она огромна. При этом снижается риск конфликта идентификаторов, повышается читабельность программы, появляется возможность ее сборки из отдельных модулей.

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

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

<new:text>Привет</new:text>

Префикс может быть любым. Единственное, в него не должны входить зарезервированные символы, двоеточие, а также нельзя использовать в качестве префикса “xml” (это сочетание служебное). Сами по себе префиксы еще не выделяют элемент в конкретное пространство имен. Для этого нужно явно указать, что префикс соответствует стандартной URI пространства. Обычно в качестве URI, идентифицирующей пространство имен, используется ссылка на документ, в котором описываются особенности данного XML-формата. Однако это совсем не правило: в принципе, в качестве URI может выступать любая строка.

Чтобы связать префикс с URI пространства имен, следует в теге, который является родительским для подлежащих группированию элементов, задать атрибут xmlns по следующей схеме: xmlns:prefix=”URI”. Например:

<doc xmlns:new=”http://www.mysite.ru/my_xml_format.html”>

<new:text>Привет</new:text>

</doc>

На первый взгляд не совсем ясно, зачем нужны префиксы, если реальным идентификатором пространства имен является URI. Дело в том, что в качестве URI обычно используется гиперссылка, в которую могут входить недопустимые в именах XML символы. Кроме того, URI – это обычно довольно длинная строка, поэтому ее применение в качестве префикса чревато потерей читабельности и увеличением размера документа.

@namespace — CSS | MDN

@namespace — это правила (at-rule) определяющие пространства имён XML, которые будут использованы в таблице стилей. Они применяются чтобы ограничить CSS селекторы только элементами принадлежащими конкретному пространству имён. Namespace’ы полезны, в основном, когда идёт взаимодействие с документами содержащими множество неймспейсов, такими как HTML5 со встроенным SVG, MathML или XML.

@namespace url(http://www.w3.org/1999/xhtml);
@namespace svg url(http://www.w3.org/2000/svg);


a {}


svg|a {}


*|a {}

Любое @namespace правило обязано следовать всем @charset и @import правилам, а так же всем описаниям стилей в таблице стилей.

@namespace может быть использован для определения стандартного пространства имён для конкретной таблице стилей. Когда стандартное пространство имён определено, все селекторы (но не атрибуты селекторов, смотрите заметку ниже) применяются только к элементам в этом неймспейсе.

@namespace правила можно использовать для определения префиксов имён. Когда селектор имеет префикс, он будет выбирать элементы совпадающие по неймспейсу и именам или атрибутам.

В HTML5 существуют сторонние элементы которые автоматически ассоциируются с соответствующими пространствами имён. Это значит, что HTML элементы будут действовать так, как если бы они находились в пространстве имён (http://www.w3.org/1999/xhtml), также если они не имеют xmlns аттрибута где-либо в документе, то такие элементы как <svg> и <math> будут ассоциироваться с их стандартными пространствами имён (http://www.w3.org/2000/svg and http://www. w3.org/1998/Math/MathML).

Заметка: В XML, если префикс отличается от атрибута (Например, xlink:href), то аттрибут не будет иметь неймспейса. Другими словами, аттрибуты не могут наследовать пространство имён элемента в котором они находятся.

ПРОСТРАНСТВО ИМЕН (NameSpace) XML

Г.Е. Берман [email protected]

Данная работа является лекцией курса » XML технологии», который читает автор студентам кафедры «Информационных систем и технологий» факультета «Прикладной математики» Тверского государственного университета.

 

Оглавление

Постановка проблемы

Понятие пространства имен

Задание пространства имен в XML документе

Связывание элементов и атрибутов XML документа с пространством имен.

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

Ссылки

 

Технология XML предоставляет разработчикам при создании XML документов возможность использовать элементы и атрибуты с любыми названиями (естественно при соблюдении определенных синтаксических правил). Поэтому очень часто возникает проблема неоднозначности. В русском, английском, да и, наверное, практически во всех языках достаточно широко встречаются слова омонимы, т.е. слова, которые пишутся одинаково, но имеют разный смысл.

Возьмем известную всем с детства скороговорку: «Запер замок на замок, чтобы замок не замок«. Мы видим – слово замок употребляется четыре раза, в трех совершенно разных смыслах: 1) здание; 2) устройство, обеспечивающее защиту входа; 3) результат действия попадания воды.

Еще один пример, но уже из английского языка. Возьмем слово down. Оно может обозначать существительное а) возвышенность; б)  центральную, деловую часть города, а также наречие вниз, которое несет противоположенную смысловую нагрузку варианту а). Также слово down может переводиться и как существительное пух  (например, тополиный пух).

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

Например, возьмем слово сеть. Независимо от того, является сеть инструментом для ловли рыбы, множеством торговых представителей фирмы, или объединенных каналами компьютеров, понятие самого слова сеть в узком смысле остается одинаковым. Это связанные в определенную структуру узлы, Тем не менее, если мы разрабатываем XML документ, описывающий сеть дилеров, распространяющих оборудование и программы для компьютерных сетей, то необходимо четко задать соответствующие контексты. Возможно также контекст, описывающий оборудование и программы для сетей, с целью устранения конфликтов в понятиях и терминах, рассматривать не как единый, а разделить на два контекста: отдельно для сетевого оборудования, и отдельно для сетевых программ.

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

В предыдущем разделе мы в основном говорили о контексте относительно конкретных слов и понятий. Однако контекст слова или понятия формируется не абстрактно, а зависит от предметной области, к которой он принадлежит. Например, если мы берем предметную область «локальные сети», то под словом сеть будет пониматься компьютерная сеть, охватывающая небольшую территорию, обладающая определенной топологией, скоростью передачи.

В XML технологии множество понятий (элементов, атрибутов), принадлежащих определенной предметной области, характеризуется понятием пространство имен (NameSpace). Согласно спецификации W3C http://www.w3.org/TR/1999/REC-xml-names-19990114 «пространство имен XMLэто идентифицируемая с помощью ссылки URI [RFC2396] коллекция имен, используемых в XML документах для обозначения типов элементов и именования атрибутов» (перевод с www.online.ru/it/helpdesk/xnamsps.htm).

В предыдущих лекциях по технологии XML мы говорили, что типы элементов и атрибутов для XML документов задаются с помощью словарей, разработанных на основе спецификаций DTD (Document Type Definition) или XML Schema. Поэтому, казалось бы, определим через URI местоположение конкретного словаря и пространство имен задано. На самом деле все немного запутаннее.

Как видно из определения пространства имен, приведенного выше, оно идентифицируется ссылкой, т. е. ссылка в виде URI является не указателем местоположения DTD или Schema XML, а идентификатором, который фиксирует уникальность пространства имен. Поясним сказанное на примере. Предположим, нам необходимо задать пространство имен для XML документа, описывающего предметную область «программное обеспечение локальных сетей». Мы можем задать URI: «http://www.network.com/lan/soft»/. С точки зрения спецификации пространства имен это совсем не означает, что по указанному адресу находится словарь в виде DTD или XML Schema, описывающий необходимые элементы и атрибуты. Приведенный адрес — это уникальный идентификатор, который в XML документе будет однозначно квалифицировать имена, относящиеся к предметной области «программное обеспечение локальных сетей». В принципе, задать уникальный идентификатор можно и каким-либо другим способом, например, методом последовательных уточнений, используя в качестве разделителя точку: «network.lan. soft».

Тем не менее, мы должны использовать именно URI, поскольку именно он определен в спецификации пространства имен для формирования уникального идентификатора.

При задании пространства имен в XML документе необходимо иметь в виду следующее:

·       элементы и атрибуты связываются с пространством имен с помощью квалифицированных имен;

·       в одном XML документе может быть задано несколько пространств имен;

·       область действия пространства имен может распространяться:

o     на весь документ;

o     контейнер;

o     отдельный элемент или атрибут.

Область действия пространства имен распространяется на весь документ, когда оно задано в корневом элементе XML документа.

Область действия пространства имен распространяется на конкретный контейнер и все, вложенные в него элементы и атрибуты, когда оно задано в элементе верхнего уровня контейнера.

Область действия пространства имен распространяется на отдельный элемент или атрибут, когда оно задано непосредственно для данного элемента и атрибута.

Пример для всех трех способов задания области действия пространства имен дан в следующем разделе.

Для объявления пространства имен в XML документе используется ключевое слово xmlns. Синтаксис объявления имеет следующий формат:

xmlns[:prefix]=»uri»

где:

prefix – это квалифицированное имя, посредством которого элементы и атрибуты XML документа связываются с пространством имен;

uri – это URI, задающий пространство имен, которое будет использоваться в XML документе.

В том случае, если параметр prefix не задан, то объявленное пространство имен будет использоваться как пространство имен по умолчанию.

Рассмотрим пример объявления пространства имен и область их действия. В примере используется несколько элементов protocol, но в зависимости от  расположения этого элемента в документе он будет определяться в разных пространствах имен.

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

Примечание 2. Цифры справа не являются частью примера, и служат для идентификации строк.

<?xml version=»1.0″ encoding=»Windows-1251″?>

1

<network xmlns:net =»http://www.network.com/lan»

2

        xmlns =»http://www.server.com»>

3

         <softlan>

4

                <net:protocol> … </net:protocol>

5

                <protocol> … <protocol>

6

               <firm_protocol xmlns:frm=»http://firm. network.com»>

7

                     <frm:protocol> … </frm:protocol>

8

                     <protocol> … </protocol>

9

              </firm_protocol>                                                        

10

              <server> … <server>

11

         </softlan>

12

         <hardlan xmlns:hard=»http://www. hard.com/lan»

13

                        xmlns=»http://www.firm.com»>

14

              <hard:protocol>

15

                      <protocol net:lan=»Ethernet»>CSMA/CD</protocol>

16

             </hard:protocol>

17

         </hardlan>

18

</network>

19

 

Строки 2 и 3 представляют корневой элемент документа network, в котором заданы два пространства имен. Их действие распространяется на весь XML документ. Первое пространство имен идентифицируется префиксом net, второе пространство имен префикса не имеет, т.е. является пространством имен по умолчанию.

Строка 5 описывает элемент protocol, входящий в пространство имен http://www.network.com/lan, которое задано в строке 2, поскольку он идентифицируется префиксом net.

Строка 6 также описывает элемент protocol, но он не имеет префикса, следовательно, относится к пространству имен по умолчанию http://www.server.com, которое задано в строке 3.

Строка 7 задает пространство имен, идентифицируемое префиксом frm. Данное пространство имен распространяется на элемент firm и вложенные в него элементы и атрибуты.

Строка 8 описывает элемент protocol, который относится к пространству имен http://firm.network.com, которое задано в строке 7, т.к. идентифицируется префиксом frm.

Строка 9 описывает элемент protocol. Данный элемент protocol не имеет префикса, следовательно, он относится к пространству имен по умолчанию http://www.server.com, которое задано в строке 3.

Строки 13 и 14 представляют элемент hardlan, в котором заданы два пространства имен, действие которых распространяется элемент hardlan и все и вложенные в него элементы и атрибуты. Первое пространство имен идентифицируется префиксом hard. Второе пространство имен префикса не имеет, т.е. является пространством имен по умолчанию, которое в контейнере hardlan переопределяет пространство имен по умолчанию, заданное в строке 3.

Строка 15 описывает элемент protocol, который относится к пространству имен http://www.hard.com/lan, которое задано в строке 13, т.к. идентифицируется префиксом hard.

Строка 16 описывает элемент protocol. Данный элемент protocol не имеет префикса, следовательно, он относится к пространству имен по умолчанию. В этом месте XML документа действует пространство имен по умолчанию  http://www.firm.com, которое задано в строке 14. Атрибут lan со сначением Ethernet относится к пространству имен net.

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

Спецификация пространства имен W3C Working Draft 5 September 2002 находится по адресу: http://www.w3.org/TR/2002/WD-xml-names11-20020905.

На русском языке имеется перевод W3C Working Draft 14 January  1999, который находится по адресу: http://www.online.ru/it/helpdesk/xnamsps.htm.

Одна из лучших публикаций, посвященных объяснению проблем использования пространства имен – FAQ, поддерживаемый  Ronald Bourret. На момент написания данного документа опубликована версия с обновлениями от октября 2002. FAQ находится по адресу:

http://www.rpbourret.com/xml/NamespacesFAQ.htm.

 

Используются технологии uCoz

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

Здравствуйте, уважаемые читатели блога okITgo.ru! Продолжим рассматривать язык разметки XML. В этот раз я хотел бы рассказать о такой важной составляющей языка, как пространства имен XML, которые обеспечивают возможность избежать конфликтов имен элементов.


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

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

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

<table>
<tr>
   <td>Яблоки</td>
   <td>Бананы</td>
</tr>
</table>

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

<table>
<name>Африканский Кофейный Стол</name>
<width>80</width>
<length>120</length>
</table>

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

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


Решение Проблемы Конфликта Имен Использованием Префикса

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

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

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

<f:table>
  <f:name>Африканский Кофейный Стол</f:name>
  <f:width>80</f:width>
  <f:length>120</f:length>
</f:table>

В примере выше конфликта имен не будет, поскольку оба элемента <table> имеют разные имена.


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

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

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

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

<root>

<h:table xmlns:h=»http://www.w3.org/TR/html4/»>
  <h:tr>
    <h:td>Яблоки</h:td>
    <h:td>Бананы</h:td>
  </h:tr>
</h:table>

<f:table xmlns:f=»http://okITgo.ru/furniture»>
  <f:name>Африканский Кофейный Стол</f:name>
  <f:width>80</f:width>
  <f:length>120</f:length>
</f:table>

</root>

В примере выше атрибут xmlns в теге <table> придает префиксам h: и f: подходящее пространство имен.

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

Пространства имен могут быть объявлены в элементах, в которых они используются, или в корневом элементе XML документа:

<root
xmlns:h=»http://www.w3.org/TR/html4/»
xmlns:f=»http://okITgo.ru/furniture»>

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

<f:table>
  <f:name>Африканский Кофейный Стол</f:name>
  <f:width>80</f:width>
  <f:length>120</f:length>
</f:table>

</root>

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

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

Попробуйте зайти на http://www.w3.org/TR/html4/.


Унифицированный Идентификатор Ресурса

Унифицированный Идентификатор Ресурса (Uniform Resource Identifier или URI) – это символьная строка, определяющая Интернет-Ресурс.

Наиболее распространенным URI является Унифицированный Указатель Ресурса (Uniform Resource Locator или URL), который определяет доменный адрес Интернета. Другим, не таким распространенным типом URI, является Универсальное Имя Ресурса (Universal Resource Name или URN).

В примерах я использую только унифицированные указатели ресурса (URL).


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

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

xmlns=»URI_пространства_имен«

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

<table xmlns=»http://www. w3.org/TR/html4/»>
<tr>
   <td>Яблоки</td>
   <td>Бананы</td>
</tr>
</table>

А этот XML документ содержит информацию о предмете мебели:

<table xmlns=»http://okITgo.ru/furniture»>
<name>Африканский Кофейный Стол</name>
<width>80</width>
<length>120</length>
</table>

Использование Пространств имен на Практике

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

В XSLT документе ниже, Вы можете видеть, что большинство тегов являются HTML тегами.

Теги, которые не являются HTML тегами, имеют префикс xsl, определенный пространством имен xmlns:xsl=»http://www.w3.org/1999/XSL/Transform»:

<?xml version=»1. 0″ encoding=»UTF-8″?>

<xsl:stylesheet version=»1.0″
xmlns:xsl=»http://www.w3.org/1999/XSL/Transform»>

<xsl:template match=»/»>
<html>
<body>
  <h3>Моя Коллеция CD-дисков</h3>
  <table border=»1″>
    <tr>
      <th align=»left»>Название</th>
      <th align=»left»>Исполнитель</th>
    </tr>
    <xsl:for-each select=»catalog/cd»>
    <tr>
      <td><xsl:value-of select=»title»/></td>
      <td><xsl:value-of select=»artist»/></td>
    </tr>
    </xsl:for-each>
  </table>
</body>
</html>
</xsl:template>

</xsl:stylesheet>

В дальнейшем я более подробно расскажу об XSLT.
Спасибо за внимание! Удачи Вам и до новых встреч на страницах сайта okITgo.ru.

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

0 (третье издание)

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

В этом разделе описывается статус этого документа в то время его публикации. Другие документы могут заменять этот документ. Список текущих публикаций W3C и последняя редакция этот технический отчет можно найти в Индекс технических отчетов W3C на http://www.w3.org/TR/.

Этот документ является продуктом Основная рабочая группа XML как часть W3C XML Activity.Английская версия данной спецификации является единственной нормативной версией. Однако переводы этого документа см. http://www.w3.org/2003/03/Translations/byTechnology?technology=xml-names .

Известные реализации задокументированы в Отчет о реализации пространств имен 1.1 (все известные реализации пространств имен 1.1 также поддерживают пространства имен 1.0) . Набор тестов также доступен через Набор тестов XML страница.

Это третье издание включает все известные исправления на дату публикации.Он заменяет предыдущий выпуск от 16 августа 2006 г.

Это издание получило широкое признание. Только незначительные редакционные изменения были сделаны после 6 августа 2009 г. Предлагаемая отредактированная рекомендация.

Сообщайте об ошибках в этом документе по адресу [email protected]; общественный архивы доступны. Список исправлений для этого документа доступно на http://www.w3.org/XML/2009/xml-names-errata .

Этот документ был рассмотрен членами W3C с помощью программного обеспечения. разработчиками, а также другими группами W3C и заинтересованными сторонами, и является одобрен Директором как Рекомендация W3C.Это стабильная документ и может использоваться в качестве справочного материала или цитироваться из другого документ. Роль W3C в создании Рекомендации — привлечь внимание спецификации и способствовать ее широкому распространению. Этот повышает функциональность и совместимость Интернета.

W3C поддерживает общественный список любых раскрытий патентов сделано в связи с результатами группа; эта страница также включает инструкции по раскрытию патента. Лицо, которое действительно знает патент, который это лицо считает, что содержит Существенный Претензии) должен раскрывать информацию в соответствии с раздел 6 Патентной политики W3C.

1 Мотивация и резюме

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

Такие документы, содержащие несколько словарей разметки, создают проблемы распознавания и столкновения.Программные модули должны уметь распознавать элементы и атрибуты, для которых они созданы обрабатывать, даже в лицо «коллизий», возникающих при разметке, предназначенной для другого программного обеспечения пакет использует то же имя элемента или имя атрибута.

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

1.1 Примечание по обозначениям и использованию

Где ВЫДЕРЖИВАЕТСЯ , ключевые слова ДОЛЖЕН , НЕ ДОЛЖЕН , ТРЕБУЕТСЯ , ДОЛЖЕН , НЕ ДОЛЖЕН , МАЯ в этом документе следует толковать как описано в [Ключевые слова].

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

В продуктах этого документа NSC — это «ограничение пространства имен», одно из правил, по которому документы соответствуют этой спецификации ДОЛЖЕН следить.

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

2.1 Основные понятия

[Определение: Пространство имен XML идентифицируется ссылка на URI [RFC3986]; имена элементов и атрибутов могут быть помещены в пространство имен XML с использованием описанных механизмов в этой спецификации. ]

[Определение: Расширенное имя пара, состоящая из имя пространства имен и местное название.] [Определение: Для имени N в определенном пространстве имен к URI I , г. имя пространства имен это I . Для имени N , которое не находится в пространстве имен, имя пространства имен не имеет значения. ] [Определение: В любом случае местное название это N . ] Это комбинация универсально управляемого пространства имен URI. с местными названиями словаря, что позволяет избежать именные конфликты.

URI ссылки могут содержать символы, недопустимые в именах, и часто неудобно длинные, поэтому расширенные имена не используются напрямую для именования элементы и атрибуты в XML-документах.Вместо квалифицированные имена используются. [Определение: А квалифицированное имя — имя, подлежащее интерпретации пространства имен. ] В документах, соответствующих данной спецификации, имена элементов и атрибутов отображаются как уточненные имена. Синтаксически они либо имена с префиксом или имена без префикса. Синтаксис объявления на основе атрибутов предназначен для привязки префиксов к имена пространств имен и привязать пространство имен по умолчанию, которое применяется к имена элементов без префикса; эти объявления ограничены элементами, на которых они появляются, так что разные привязки могут применяться в разных частях документа.Процессоры, соответствующие этой спецификации ДОЛЖЕН распознавать эти объявления и префиксы и действовать в соответствии с ними.

2.2 Использование URI как имена пространств имен

Пустая строка, хотя она и допустима URI ссылка, не может использоваться в качестве имени пространства имен.

Использование относительного URI Рекомендации, включая ссылки на тот же документ, в объявлениях пространств имен устарело.

Примечание:

Решение об отказе от относительных ссылок URI было принято Пленарное голосование W3C XML [Отказ от поддержки относительного URI].Он также заявляет, что «более поздние спецификации, такие как DOM, XPath и т. д., не будут определять толкование для них «.

2.3 Сравнение URI Каталожные номера

URI ссылки, идентифицирующие пространства имен, сравниваются при определении принадлежит ли имя данному пространству имен, и два имени принадлежат к тому же пространству имен. [Определение: Два URI рассматриваются как строки, и они идентичный тогда и только тогда, когда строки идентичны, то есть если они — это одна и та же последовательность символов. ] При сравнении учитывается регистр, и% -экранирование не выполняется или не отменяется.

Следствием этого является то, что URI ссылки, которые не идентичны в этом смысле может разрешиться к тому же ресурсу. Примеры включают URI ссылки, которые отличаются только регистром или% -экранированием, или которые во внешних объектах, которые имеют разные базовые URI (но обратите внимание, что относительный URI устарели как имена пространств имен).

В объявлении пространства имен URI ссылка нормализованное значение атрибута, поэтому замена символов XML и ссылок на сущности уже было сделано до любого сравнения.

Примеры:

В URI ссылки ниже все разные для целей идентификации пространства имен, поскольку они различаются регистром:

  • http://www.example.org/wine

  • http://www.Example.org/wine

  • http://www.example.org/Wine

Приведенные ниже ссылки на URI также различаются для целей идентификации пространства имен:

  • http: // www. example.org/~wilbur

  • http://www.example.org/%7ewilbur

  • http://www.example.org/%7Ewilbur

Из-за риска путаницы между URI это было бы эквивалентно при разыменовании использование% -экранированных символов в именах пространств имен категорически не рекомендуется.

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

[Определение: пространство имен (точнее, привязка пространства имен) является объявил с использованием семейство зарезервированных атрибутов.Имя такого атрибута должно либо быть xmlns или начать xmlns: . Эти атрибуты, как и любые другие атрибуты XML, могут быть предоставлены напрямую или по умолчанию. ]

Имена атрибутов для объявления пространства имен

Атрибут нормализованное значение ДОЛЖЕН быть либо URI ссылка — имя пространства имен определение пространства имен — или пустая строка. Имя пространства имен для обслуживания его Целевое назначение, ДОЛЖЕН обладают характеристиками уникальности и упорство. Это не цель, чтобы его можно было напрямую использовать для извлечения схемы (если любой существует). Унифицированные имена ресурсов [RFC2141] — это пример синтаксиса, который разработан с учетом этих целей. Однако следует отметить, что обычными URL-адресами можно управлять таким образом, как для достижения тех же целей.

[Определение: если имя атрибута соответствует PrefixedAttName, затем NCName дает префикс пространства имен , используется для связывания имен элементов и атрибутов с имя пространства имен в значении атрибута в области действия элемента, для которого объявление прилагается.]

[Определение: Если имя атрибута соответствует DefaultAttName, затем имя пространства имен в значение атрибута пространство имен по умолчанию в области действия элемента, для которого объявление прилагается.] Пространства имен по умолчанию и переопределение объявлений обсуждаются в 6 Применение пространств имен к элементам и атрибутам .

Пример объявления пространства имен, которое связывает префикс пространства имен edi с именем пространства имен http: // электронная торговля. example.org/schema :

 
  
 

Ограничение пространства имен: зарезервированные префиксы и имена пространств имен

Префикс xml по определению привязан к имени пространства имен. http://www.w3.org/XML/1998/namespace . Это МАЯ, но не обязательно быть объявлено, и НЕ ДОЛЖЕН быть привязан к любому другому имени пространства имен.Другие префиксы НЕ ДОЛЖЕН быть привязанным к этому пространству имен имя, и это НЕ ДОЛЖЕН быть объявленным как пространство имен по умолчанию.

Префикс xmlns используется только для объявления привязок пространств имен и используется определение, привязанное к имени пространства имен http://www. w3.org/2000/xmlns/ . Это НЕ ДОЛЖЕН быть объявленным . Другие префиксы НЕ ДОЛЖЕН быть привязанным к этому пространству имен имя, и это НЕ ДОЛЖЕН быть объявленным как пространство имен по умолчанию.Имена элементов НЕ ДОЛЖЕН иметь приставку xmlns .

Все остальные префиксы, начинающиеся с трехбуквенной последовательности x, m, l, в любом случае комбинации зарезервированы. Это означает, что:

Хотя сами они не зарезервированы, использовать их не рекомендуется. имена с префиксом, LocalPart которых начинается с букв x, m, l в любом комбинация регистров, как эти имена были бы зарезервированы, если бы использовались без префикса.

4 полных имени

в XML документы, соответствующие данной спецификации, некоторые имена (конструкции, соответствующие нетерминальному Имя) ДОЛЖЕН быть дано как полные имена, определяется следующим образом:

Полное имя

В Префикс обеспечивает префикс пространства имен часть квалифицированного имени и ДОЛЖЕН быть связанным с пространством имен URI ссылка в объявление пространства имен. [Определение: LocalPart предоставляет локальная часть квалифицированного имени.]

Обратите внимание, что префикс функционирует только как как заполнитель для имя пространства имен. Приложения ДОЛЖЕН используйте имя пространства имен, а не префикс, при построении имена, чья сфера действия выходит за рамки содержащий документ.

5 Использование полных имен

В документах XML, соответствующих этой спецификации, имена элементов даны как квалифицированные имена, как следует:

Имена элементов

Пример квалифицированного имени, выступающего в качестве имени элемента:

  
   32,18 
 

Атрибуты — это либо пространство имен декларации или их имена даны как полные имена:

Атрибут

Пример квалифицированного имени, выступающего в качестве имени атрибута:

  example.org/schema'>
  
   Детское питание 
 

Ограничение пространства имен: Объявленный префикс

Префикс пространства имен, кроме xml или xmlns , ДОЛЖЕН Был объявлен в объявлении пространства имен атрибут в начальном теге элемента, где префикс используется или в элементе-предке (т.е., элемент, в котором содержание происходит префиксная разметка).

Это ограничение может привести к эксплуатационным трудностям в случае, если предоставляется атрибут объявления пространства имен, а не непосредственно в XML документ сущность, но через атрибут по умолчанию, объявленный во внешней сущности. Такие декларации не могут быть прочитаны программным обеспечением, основанным на не проверяющий процессор XML. Многие XML-приложения, в том числе, предположительно, чувствительные к пространству имен, не могут требуют проверяющих процессоров. Если требуется корректная работа с такими приложениями, объявления пространств имен ДОЛЖЕН быть предоставляется либо напрямую, либо через атрибуты по умолчанию, объявленные в внутреннее подмножество DTD.

Имена элементов и атрибутов также даются как уточненные имена, когда они появляются в декларациях в DTD:

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

Обратите внимание, что проверка на основе DTD не учитывает пространство имен в следующих смысл: DTD ограничивает элементы и атрибуты, которые могут появляться в документ по их неинтерпретированным именам, а не по (имя пространства имен, локальный имя) пары.Чтобы проверить документ, который использует пространства имен по DTD, в DTD должны использоваться те же префиксы, что и в экземпляре. Однако DTD может косвенно ограничивать пространства имен, используемые в допустимом документ, предоставив значения #FIXED для атрибутов, которые объявить пространства имен.

6 Применение пространств имен к элементам и атрибутам

6.

1 Область действия пространства имен

Объем объявления пространства имен, объявляющего префикс, простирается от начало начального тега, в котором он появляется до конца соответствующий конечный тег, исключая область любых внутренних объявлений с той же частью NSAttName.В случае пустого тега областью действия является сам тег.

Такое объявление пространства имен применяется ко всем элементам и атрибутам. имена в его области, чей префикс совпадает с указанным в декларация.

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

 



    Frobnostication  
    Перемещено в
     здесь.   
 

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

  0"?>


     Десятки дешевле 
     1568491379 
 

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

Объем объявление пространства имен по умолчанию простирается с начала начальный тег, в котором он появляется в конце соответствующего конечного тега, исключая область любых объявлений внутреннего пространства имен по умолчанию. В случае пустого тега областью действия является сам тег.

Объявление пространства имен по умолчанию применяется ко всем именам элементов без префикса в его рамках. Объявления пространств имен по умолчанию не применяются напрямую к именам атрибутов; интерпретация атрибутов без префикса определяется элементом, на котором они появляются.

Если в области есть объявление пространства имен по умолчанию, расширенное имя соответствующий имени элемента без префикса имеет URI из пространство имен по умолчанию как его имя пространства имен. Если в области нет объявления пространства имен по умолчанию, имя пространства имен не имеет значения. Имя пространства имен для имени атрибута без префикса всегда не имеет значения. Во всех случаях местное имя местная часть (что, конечно, то же самое, что и само имя без префикса).

 


  Frobnostication 
   

Перемещено в здесь .

 


     Десятки дешевле 
     1568491379 
 

Более крупный пример области действия пространства имен:

 

 gov: books'
      xmlns: isbn = 'urn: ISBN: 0-395-36341-6'>
     Десятки дешевле 
     1568491379 
    <примечания>
      
      

Это забавная книга!

Значение атрибута в объявлении пространства имен по умолчанию. МАЯ быть пустым.Это то же самое эффект в рамках декларации отсутствия значения по умолчанию пространство имен.

 
<Пиво>
  
  <таблица xmlns = 'http: //www.w3.org/1999/xhtml'>
    ИмяПроисхождение Описание 
   
     
       Охотник  
       Бат, Великобритания  
     
       
Горький Fuggles Замечательный хмель, легкий алкоголь, хорошее летнее пиво Хрупкий; чрезмерное отклонение от паба к пабу

6.

3 Уникальность атрибутов

Ограничение пространства имен: уникальные атрибуты

В документах XML, соответствующих в этой спецификации нет тега может содержать два атрибута, которые:

  1. имеют одинаковые имена или

  2. имеют полные имена с одинаковыми именами. местная часть и с префиксы, которые были связаны к именам пространств имен, которые идентичны.

Это ограничение эквивалентно требованию, чтобы ни у одного элемента не было двух атрибуты с такими же расширенное имя.

Например, каждый из плохих тегов пустых элементов недопустим в следующий:

 

  
  <плохой n1: a = "1" n2: a = "2" />
 

Однако каждое из следующих утверждений является допустимым, второе — потому что пространство имен не применяется к именам атрибутов:

  w3.org привязан к n1 и используется по умолчанию ->

  
  
 

7 Соответствие документов

Эта спецификация применима к XML 1.0 документы. Чтобы соответствовать этому спецификация, документ ДОЛЖЕН быть хорошо сформированным в соответствии с Спецификация XML 1.0 [XML].

В документах XML, соответствующих этой спецификации, элемент и имена атрибутов ДОЛЖЕН соответствовать производству для QName и ДОЛЖЕН удовлетворяют «ограничениям пространства имен».Все остальные токены в документ, который ТРЕБУЕТСЯ , для правильного формата XML 1.0, чтобы соответствовать Производство XML для Имя ДОЛЖЕН соответствовать продукции данной спецификации для NCName.

[Определение: Документ — это с правильным форматом пространства имен если он соответствует этой спецификации. ]

Отсюда следует, что в правильно сформированном документе с пространством имен:

  • Все имена элементов и атрибутов содержат ноль или единицу двоеточие;

  • Ни одно из имен объектов, целей инструкций по обработке или имен нотаций не содержит двоеточия.

Кроме того, правильно сформированный документ с пространством имен также может быть действительным по пространству имен.

[Определение: Документ с правильным пространством имен , действительный для пространства имен если он действителен в соответствии со спецификацией XML 1.0, и все токены кроме имен элементов и атрибутов, которые ТРЕБУЕТСЯ , для достоверности XML 1.0, чтобы соответствовать продукции XML для Имя соответствовать продукции данной спецификации для NCName. ]

Отсюда следует, что в документе с допустимым пространством имен:

  • Нет атрибутов с объявленным типом ID , IDREF (S) , ENTITY (IES) или NOTATION содержать любые двоеточия.

8 Соответствие процессоров

Чтобы соответствовать этой спецификации, процессор ДОЛЖЕН отчет нарушения правильности пространств имен, за исключением того, что не является ТРЕБУЕТСЯ чтобы проверить, что имена пространств имен Ссылки URI [RFC3986].

[Определение: Проверяющий процессор XML, соответствующий этой спецификации это , проверяющий пространство имен , если в дополнение он сообщает о нарушениях допустимости пространства имен. ]

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

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

19 января 1999 г.

Тим Брей

14 января появилась новая Рекомендация W3C, Пространства имен в XML.«Рекомендация» — это последний шаг в процессе W3C; то Статус означает, что документ готов, заморожен, согласован и официально.

Пространства имен — это простой и понятный способ различать имена, используемые в XML-документах, независимо от того, откуда они. Однако концепции немного абстрактны, и это Спецификация вызывала у тех, кто ее читал, некоторое психическое расстройство.В лучший способ Чтобы понять пространства имен, как и во многих других вещах в Интернете, нужно на собственном примере.

Итак, давайте создадим сценарий: предположим, XML.com хочет начать публиковать обзоры XML книги. Мы, конечно, хотели бы разметить информацию с помощью XML, но мы также хотели бы использовать HTML в помочь украсить дисплей. Вот небольшой пример того, что мы можем сделать:


 xml.com/books "

        xmlns: h = "http://www.w3.org/HTML/1998/html4">

   Рецензия на книгу  

 

  

    XML: учебник 

   

    

      Автор   Цена 

      Страницы   Дата  

    

       Саймон Стрит.Лоран  

       31,98  

       352  

       1998/01  

    

   

  

 



 

В этом примере элементы с префиксом xdc связаны с пространство имен http: // www.xml.com/books , а с префиксом h связаны с пространством имен, имя которого http://www. w3.org/HTML/1998/html4 .

Префиксы связаны с полными именами с помощью атрибутов в верхнем элементе чей имена начинаются. xmlns: . Префиксы вообще ничего не значат — они просто сокращенные заполнители для полных имен.Эти полные имена, как вы могли заметить, находятся URL-адреса, то есть веб-адреса. Мы вернемся к тому, почему это так и какие это адреса из немного дальше.

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

Но сначала очевидный вопрос: зачем нам эти вещи? Они там, чтобы помочь компьютерное программное обеспечение делает свое дело. Например, предположим, что вы программист, работающий на XML.ком и вы хотите написать программу, которая будет искать книги на Amazon. com и проверять, Цены верны. Такие поиски довольно просты, если вы знаете автора и название. В Проблема, конечно же, в том, что этот документ содержит теги рецензии на книгу XML.com и HTML помечает все перепутались, и вы должны быть уверены, что найдете названия книг, а не HTML заголовки страниц.

То, как вы это делаете, — написать свое программное обеспечение для обработки содержимого </b> тегов, но только когда они находятся в <b> http://www.xml.com/books </b> пространство имен. Это безопасно, потому что программисты те, кто не работает на XML.com, вряд ли будут использовать это пространство имен.</p><h4><span class="ez-toc-section" id="i-21"> Атрибуты тоже </span></h4><p> Атрибуты, а не только элементы, могут иметь пространства имен.<img class="lazy lazy-hidden" src="//ylianova.ru/wp-content/plugins/a3-lazy-load/assets/images/lazy_placeholder.gif" data-lazy-type="image" data-src='/800/600/https/slideplayer.com/slide/13104767/79/images/9/XPath+Data+Model+XML+structured+can+viewed+as+tree+with+different+types+of+nodes.+root.+Processing+instruction..jpg' style='float: right;' /><noscript><img src='/800/600/https/slideplayer.com/slide/13104767/79/images/9/XPath+Data+Model+XML+structured+can+viewed+as+tree+with+different+types+of+nodes.+root.+Processing+instruction..jpg' style='float: right;' /></noscript> Например, давайте использовать HTML <b> STYLE Атрибут </b>, позволяющий браузеру HTML отображать рецензию на нашу книгу:</p><blockquote><pre> <h: html xmlns: xdc = "http://www.xml.com/books" xmlns: h = "http://www.w3.org/HTML/1998/html4"> <h: head> <h: title> Рецензия на книгу </ h: title> </ h: head> <h: body> <xdc: bookreview> <xdc: title h: style = "font-family: sans-serif;"> XML: учебник </ xdc: title> <h: таблица> <h: tr align = "center"> <h: td> Автор </ h: td> <h: td> Цена </ h: td> <h: td> Страницы </ h: td> <h: td> Дата </ h: td> </ h: tr> <h: tr align = "left"> <h: td> <xdc: author> Саймон Стрит.Лоран </ xdc: author> </ h: td> <h: td> <xdc: price> 31,98 </ xdc: price> </ h: td> <h: td> <xdc: pages> 352 </ xdc: pages> </ h: td> <h: td> <xdc: date> 1998/01 </ xdc: date> </ h: td> </ h: tr> </ h: таблица> </ xdc: bookreview> </ h: body> </ h: html> </pre></blockquote><h4><span class="ez-toc-section" id="i-22"> Украшение </span></h4><p> Пример выше, возможно, уродлив, со всеми этими префиксами и двоеточиями.<img class="lazy lazy-hidden" src="//ylianova.ru/wp-content/plugins/a3-lazy-load/assets/images/lazy_placeholder.gif" data-lazy-type="image" data-src='/800/600/https/i.stack.imgur.com/7auPL.png' style='float: right;' /><noscript><img src='/800/600/https/i.stack.imgur.com/7auPL.png' style='float: right;' /></noscript> вверх теги.Рекомендация по пространствам имен позволяет вам объявить пространство имен по умолчанию. и оставьте некоторые префиксы, например:</p><blockquote><pre> <html xmlns = "http://www.w3.org/HTML/1998/html4" xmlns: xdc = "http://www.xml.com/books"> <head> <title> Рецензия на книгу <: body> XML: учебник <таблица> Автор Цена Pages Дата Саймон Стрит.Лоран 31.98 352 1998/01

В этом примере предполагается, что все без префикса находится в http: // www. w3.org/HTML/1998/html4 пространство имен, которое мы используем в качестве имя пространства имен для HTML (предположительно, теперь, когда пространства имен являются официальными, W3C будет дайте HTML официальное имя пространства имен).

На что указывают имена пространств имен?

Одна из сбивающих с толку вещей во всем этом заключается в том, что имена пространств имен являются URL-адресами; это легко Предположим, что, поскольку они являются веб-адресами, они должны быть адресом чего-то.Они нет; это URL-адреса, но черновик пространства имен не заботится о том, на что (если что-то) они указывают в. Считать о примере программиста XML.com, ищущего названия книг; это отлично работает без имя пространства имен, указывающее на что угодно.

Причина, по которой W3C решил использовать URL-адреса в качестве имен пространств имен, заключается в том, что они содержат домен имена (e.грамм. www.xml.com ), которые работают по всему миру через Интернет.

Это все, что есть?

Это более или менее все, что нужно сделать. Единственная цель пространств имен — дать программисты протягивают руку помощи, позволяя им обрабатывать теги и атрибуты, которые они заботиться о и игнорируйте те, которые для них не важны.

Довольно много людей, прочитав более ранние проекты Рекомендации по пространству имен, решил что пространства имен на самом деле были средством для модульных DTD или пытались дублировать то функция «Архитектурных форм» SGML. Ни одна из этих теорий не верна. Единственный причина пространство имен, опять же, заключается в том, чтобы предоставить элементы и атрибуты, удобные для программистов. имена это будет уникальным для всего Интернета.

Пространства имен — это простой, понятный и непривлекательный синтаксис. Но они ключевой для будущего программирования XML.Поскольку это важно, мы в XML.com будем скоро будет размещение аннотированных пространств имен в стиле, аналогичном нашему аннотированному XML 1.0.

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

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

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

Пространство имен XML объявляется с использованием зарезервированного атрибута XML. Имя этого атрибута должно начинаться с «xmlns».

Давайте посмотрим на синтаксис пространства имен XML:

<элемент xmlns: name = "URL">

Здесь пространство имен начинается с ключевого слова «xmlns» . Слово имя является префиксом пространства имен. URL-адрес — это идентификатор пространства имен.

Давайте посмотрим на пример файла XML.

<продолжение: имя> Вимал Джайсвал <продолжение: компания> СССИТ.org <продолжение: телефон> (0120) 425-6464

Проверить это сейчас

Префикс пространства имен: продолжение

Идентификатор пространства имен: http://sssit.org/contact-us

Указывает, что имя элемента и имена атрибутов с префиксом cont принадлежат пространству имен http://sssit. org/contact-us.

В XML имена элементов определяются разработчиком, поэтому существует вероятность конфликта имен элементов.Чтобы избежать конфликтов такого типа, мы используем пространства имен XML. Можно сказать, что пространства имен XML предоставляют метод, позволяющий избежать конфликта имен элементов.

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

Давайте рассмотрим пример с двумя таблицами:

Стол1:

<таблица> Овен Бинго

Таблица2: В этой таблице содержится информация о компьютерном столе.

<таблица> Компьютерный стол 80 120

Если вы сложите оба этих фрагмента XML вместе, возникнет конфликт имен, потому что оба имеют элемент


Как избавиться от конфликта имен?

1) Используя префикс

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

Овен Бинго Компьютерный стол 80 120

Примечание: В этом примере у вас не будет конфликта, потому что обе таблицы имеют определенные имена.

2) Используя атрибут xmlns

Вы можете использовать атрибут xmlns для определения пространства имен со следующим синтаксисом:

<элемент xmlns: name = "URL">

Давайте посмотрим на пример:

<корень> Овен Бинго Компьютерный стол 80 120

В приведенном выше примере элемент

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

Овен Бинго Компьютерный стол 80 120

Примечание. URI пространства имен, использованный в приведенном выше примере, совсем не обязателен. Он не используется парсером для поиска информации.Он используется только для предоставления уникального имени идентификатору пространства имен.

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

Uniform Resource Identifier используется для идентификации интернет-ресурса. Это строка символов.

Наиболее распространенным URI является URL (Uniform Resource Locator), который идентифицирует адрес интернет-домена.

Существует также URI-имя URN (универсальное имя ресурса), но оно не так распространено. Мы использовали только URL-адреса во всех наших примерах.


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

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

Единственное различие между пространством имен по умолчанию и простым пространством имен состоит в том, что: Нет необходимости использовать префикс в пространстве имен по умолчанию.

Вы также можете использовать несколько пространств имен в одном документе, просто определив пространство имен для дочернего узла.

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

<руководство> Руководство по Java Сону Джайсвал

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

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

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

Введение

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

Синтаксис

 <префикс: локальное имя xmlns: prefix = 'URI пространства имен' />
<префикс: локальное имя xmlns: префикс = 'URI пространства имен'> 
 children  

Этот XML-код содержит список руководств для клиентских инструментов веб-разработки:

 
 0 "?>
<руководство>
 html 
 css 
 javascript 

  

Этот XML-код содержит список руководств по серверным инструментам веб-разработки:

 

<руководство>
 php 
 asp 
 jsp 
;
  

Если эти два экземпляра XML соединить вместе, поскольку оба они несут элементы с именем тэга, это создаст конфликт имен.Синтаксический анализатор XML не сможет понять смысл использования учебного элемента на самом деле для разных целей. Используя пространство имен, эту проблему можно решить:

 


 html 
 css 
 javascript 


 php 
 asp 
 jsp 

  

Сами пространства имен также имеют имена. Имя пространства имен — это унифицированный идентификатор ресурса (URI). Такой URI служит уникальная строка. Имя пространства имен и локальное имя элемента вместе образуют глобально уникальное имя, известное как полное имя.
В этом примере мы показали использование полного имени.

 


 php 
 asp 
 jsp 
  

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

 

<учебник xmlns: srv = 'urn:
https: // www.w3resource.com/server-side-tutorial '>
 php 
 asp 
 jsp 

  

Пространство имен объявления появляются внутри начального и конечного тегов элемента и используется для сопоставления префикса пространства имен. Синтаксис для пространства имен объявление — xmlns: prefix = «URI» .

Также возможно отобразить имя пространства имен без префикса, используя объявление пространства имен по умолчанию. Синтаксис объявления пространства имен по умолчанию: xmlns = «URI» .

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

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

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

Пример QNames:

И локальное имя, и префикс — NCNames.NCName — это назван без двоеточия. Синтаксис для элемента с префикс — это префикс, за которым следует двоеточие, за которым следует локальный имя. Пространство имен элемента с заданным префиксом — это пространство имен, указанное в объявлении пространства имен в области видимости для этот префикс. Это ошибка, если такое объявление пространства имен не указано. в рамках. Пространство имен элементов без префикса — это пространство имен заданный объявлением пространства имен по умолчанию в области видимости, если таковое имеется. Если в области нет объявления пространства имен по умолчанию, то такие элементы не находятся ни в каком пространстве имен. Элементы не входят в какое-либо пространство имен известны как неквалифицированные элементы. Имя пространства имен неквалифицированные элементы — это пустая строка «» . Если по умолчанию объявление пространства имен находится в области видимости, а неквалифицированный элемент требуется, объявление пространства имен по умолчанию может быть замаскировано предоставление объявления пространства имен формы xmlns = » на элемент.

Предыдущая: Элементы XML
Далее: XML-атрибут

Опишите использование пространств имен в XML-документе.

Опишите использование пространств имен в XML-документе.

Рекомендация по пространствам имен XML определяет способ различения повторяющихся типов элементов и имен атрибутов. Такое дублирование могло произойти, например, в таблице стилей XSLT или в документе, который содержит типы элементов и атрибуты из двух разных DTD.

Пространство имен XML — это набор типов элементов и имен атрибутов. Пространство имен идентифицируется уникальным именем, которое является URI.Таким образом, любой тип элемента или имя атрибута в пространстве имен XML может быть однозначно идентифицировано с помощью имени, состоящего из двух частей: имени его пространства имен XML и его локального имени. Эта двухчастная Система именования — единственное, что определяется рекомендацией по пространствам имен XML.

Пространства имен XML объявляются с помощью атрибута xmlns, который может связывать префикс с пространством имен. Вы можете объявить пространство имен XML для любого элемента в документе XML. Декларация входит в сферу применения для элемента, содержащего атрибут и всех его потомков (если только он не переопределен или не объявлен для одного из этих потомков).Обычно все пространства имен объявляются в корневом элементе. Например:




 bar.org/">
   abcd 


Если объявление пространства имен XML содержит префикс, вы ссылаетесь на тип элемента и имена атрибутов в этом пространстве имен с префиксом.Например:





   abcd 


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





   abcd 


Значение (уникальный URI) атрибута xmlns определяет пространство имен, а не префикс. В этом примере все элементы принадлежат одному пространству имен хотя используются разные префиксы.





   abcd 


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





  


  


Вы можете переопределить префикс, используемый в объявлении пространства имен XML, просто объявив другое пространство имен XML с тем же префиксом. Например, в дальнейшем префикс foo связан с http://www.foo.org/ пространство имен на aaa и http: // www.bar.org/ в элементе bbb. То есть имя ааа находится в пространстве имен http://www.foo.org/, а имя bbb находится в пространство имен http://www.bar.org/.





   abcd 


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

Когда объявление пространства имен XML выходит за пределы области видимости, оно больше не применяется. Например, ниже объявление пространство имен http://www.foo.org/ не применяется к элементу bbb, потому что это выходит за рамки его компетенции.




 abcd 
 abcd 

Вы можете отменить объявление пространства имен XML по умолчанию — объявить пространство имен XML по умолчанию с пустым (нулевой длиной) именем (URI).В рамках объем этой декларации, имена типов элементов без префиксов не принадлежат ни к какому пространству имен XML. Например, в нижеследующем пространстве имен XML по умолчанию является http://www.foo.org/ для aaa и нет пространства имен XML по умолчанию для элементы bbb. Имя aaa находится в пространстве имен http://www.foo.org/, а имени bbb нет ни в каком Пространство имен XML.





  
    
       abcd 
    
  


Вы НЕ можете отменять объявление префикса пространства имен XML. Он остается в области видимости до конца элемента, для которого он был объявлен, если он не переопределено. Кроме того, попытка отменить объявление префикса путем повторного объявления его с пустым (нулевым) именем (URI) приводит к ошибке пространства имен.Например:





  <фу: ааа>
     
        abcd 
     
  


Атрибуты также могут быть явно назначены данному пространству имен. См. Пример:





   abcd 


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

Как настроить пространство имен XML на карте, когда XML является выходным форматом.


Вопрос

Как настроить пространство имен XML на карте, когда XML является выходным форматом.

Ответ

URI сначала должен быть определен в свойствах объекта формата файла XML.
1. Щелкните правой кнопкой мыши объект формата файла XML и выберите свойства.
2. Выберите вкладку «Пространство имен».
3. Установите флажок «Включить поддержку пространства имен».
4. Рядом с полем «Определить префиксы пространства имен» нажмите кнопку «Создать».
5. Введите префикс пространства имен в первое поле и URI пространства имен во втором поле.
Пример: SCI http://www.sterlingcommerce.com
6. Повторите шаги 4 и 5 для каждого префикса пространства имен, который должна использовать карта.

После определения префикса пространства имен можно настроить элементы, которые должны использовать пространство имен.
1. Щелкните правой кнопкой мыши элемент, который должен использовать один из установленных префиксов пространства имен, и выберите свойства.
2. Выберите вкладку «Пространство имен».
3. Установите переключатель «Использовать это пространство имен:»
4. Введите URI пространства имен в текстовое поле. Пример: http://www.sterlingcommerce.com
Примечание. Не вводите префикс пространства имен в текстовое поле.
5. Если элемент должен также иметь атрибут xmlns, определите префикс пространства имен и URI пространства имен для элемента в разделе «Определить префиксы пространства имен:»

[{«Продукт»: {«код»: «SS3JSW», «ярлык»: «Sterling B2B Integrator»}, «Бизнес-подразделение»: {«код»: «BU055», «ярлык»: «Когнитивные приложения»}, «Компонент»: «Сопоставление и перевод», «Платформа»: [{«код»: «PF025», «ярлык»: «Независимость от платформы»}], «Версия»: «Все», «Редакция»: «», «Направление деятельности»: {«code»: «LOB02», «label»: «AI Applications»}}]

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

Следующий отрывок взят из Рекомендации W3C по пространству имен XML:

«Пространства имен XML предоставляют простой метод определения имен элементов и атрибутов, используемых в документах на расширяемом языке разметки, путем связывания их с пространствами имен, идентифицированными ссылками на универсальный идентификатор ресурса (URI).»

Рекомендация по пространствам имен XML 1.0 доступна по адресу http://www.w3.org/TR/REC-xml-names/ . См. http://www.w3schools.com/xml/xml_namespaces.asp для получения дополнительной информации об основах пространств имен XML.

Пространства имен XML предоставляют способ избежать двусмысленности с тегами XML (относится ли

к таблице данных или к таблице pyhsical wood?) Пространства имен могут быть указаны либо с пространством имен по умолчанию, которое применяется ко всему блоку или схеме, или путем определения префиксов, которые являются сокращением, которое может применяться к отдельным тегам.

Timport имеет два режима работы с пространствами имен при обработке XML: с учетом пространства имен и без учета пространства имен. По умолчанию timport не знает о пространствах имен. xmlns атрибуты обрабатываются так же, как и любые другие атрибуты, и префиксы пространств имен не рассматриваются как особого внимания — тег должен соответствовать точно , что независимо от того, какой URI myPrefix разрешает в . В версиях до 5.01.1120676700 (7 июля 2005 г.), это был единственный доступный режим.

Если в схеме предусмотрено одно или несколько пространств имен (с помощью команд xmlns , см. Страницу здесь), тогда timport становится зависимым от пространства имен. При сравнении тега XML с тегом поля timport сначала сравнивает пространства имен, и, если они совпадают, сравнивает имена тегов (без префиксов пространства имен). Например, со следующим XML-документом:

 
  
     1234 
  
 

Со следующей схемой:

 xml
настольный тест
xmlns http: // www.mycompanysite.com
# тег типа имени default_val
поле orderID long orders / order / orderID 0 

В XML определен префикс mc , и все теги имеют этот префикс, поэтому все они принадлежат пространству имен http://www.mycompany.com . В файле схемы http://www.mycompany.com определено как пространство имен по умолчанию, поэтому все элементы в orders / order / orderID также являются частью http: // www.mycompany пространство имен.

Для первого сравнения, XML-документа и orders схемы, они оба находятся в одном пространстве имен. Затем он сравнивает теги, игнорируя префиксы пространства имен (поскольку мы уже знаем, что пространства имен совпадают). После удаления всех префиксов он сравнивает заказов в XML с порядками схемы, которые совпадают, и продолжает работу.

Вы также можете использовать префиксы в схемах.Следующая схема будет соответствовать XML-документу точно так же, как и предыдущая схема:

 xml
настольный тест
xmlns: myComp http://www.mycompanysite.com
поле orderID long myComp: orders / myComp: order / myComp: orderID 

Обратите внимание, что хотя префиксы различаются ( mc и myComp ), они оба разрешаются в один и тот же URI и, следовательно, являются частью одного и того же пространства имен.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *