Пространства имен используются для уточнения имен ваших элементов, префиксы используются для упрощения XML. По умолчанию существует пространство имен с «пустым» uri.
Пример расширения Томалакс:
<!-- Mixing namespaces default namespace -->
<node xmlns:gc="http://other/namespace/gc"> <!-- node is in default NS -->
<child> <!-- child is still in default NS, inherited from parent - node -->
<gc:grandchild/> <!-- grandchild is in the "http://other/namespace/gc", because of gc prefix -->
</child>
<child xmlns="http://some/namespace/uri/" xmlns:gc2="http://other/namespace/gc"> <!-- node is in "http://home/namespace/uri" because of declration -->
<gc2:grandchild/> <!-- again, in "http://other/namespace/gc", despite different prefix -->
<grandchild/> <!-- yet this one is in "http://home/namespace/uri", no prefix, inherited from parent -->
</child>
</node>
Отсюда следует, что оба «дочерних» узла являются РАЗЛИЧНЫМИ УЗЛАМИ. Они выглядят одинаково, но их «полностью определенные имена» отличаются ». Это особенно важно в XSL.
То же самое с внуками. gc: grandchild и gc2: grandchild ОДИНАКОВЫ, они используют один и тот же URI пространства имен, но используют разные префиксы. Третий узел внука отличается тем, что он использует свое унаследованное пространство имен от родительского дочернего узла.
Пространства имен важны, потому что они позволяют вам «смешивать и сопоставлять» xml в одном документе из разных словарей. Например, встраивание разметки SVG в документ XHTML. Использование пространств имен предотвращает перекрытие одинаковых имен базовых узлов.
Для большинства простых задач XML они не нужны. Но когда вы начинаете объединять стандарты и т. Д., Они становятся очень важными.
Другой пример - встраивание утверждений SAML в конверты SOAP для веб-сервисов. SOAP - это один стандарт, SAML - другой, независимые стандарты и стандартные органы, но оба позволяют вставлять области «произвольного XML» в свои документы. Пространства имен хранят содержимое отдельно.