Какова практика вложения пространств имен xml?

В языках программирования я привык

namespace foo
{
    namespace bar
    {
        void DoIt()
        {
        }
    }
}

int main()
{
    foo::bar::DoIt()
}

В схеме (xsd) я хотел бы сделать аналогичные вещи при определении complexTypes

<xsd:schema targetNamespace="http://www.stackoverflow.com/foo">
 <xsd:complexType name="bar1">
    ...
 </xsd:complexType>
 <xsd:complexType name="bar2">
 </xsd:complexType>
   ...
 <xsd:complexType name="foo1" type = "bar1">
   ...
 </xsd:complexType>
</xsd:schema>

Концептуально я хотел бы, чтобы bar1 и bar2 были вложены в пространство имен http://www.stackoverflow.com/foo::bar (:: заимствовано из C++). Я видел примеры того, что кажется полностью вторым пространством имен, определенным для элементов бара. В этих примерах содержимое бара будет определено во втором пространстве имен, « http://www.stackoverflow.com/foo/bar », как в примере ниже. Это самое близкое к "вложенному" пространству имен, которое я видел.

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

<xsd:schema targetNamespace="http://www.stackoverflow.com/foo"
  xmlns:bar = "http://www.stackoverflow.com/foo/bar">
<xsd:schema namespace="http://www.stackoverflow.com/foo/bar"
 <xsd:complexType name="foo1">
   <xsd:element name="bar1Instance" type="bar:bar1"/>
   ...
 </xsd:complexType>
</xsd:schema>

Частично это связано с тем, что я просто пытаюсь понять, чем отличаются пространства имен в XML и, скажем, C++. Существует ли концепция вложенных пространств имен в XML или каждое пространство имен является независимым? Как реализуется или обычно реализуется концепция вложенных пространств имен? Это сделано как в моем примере выше? Являются ли пространства имен полностью независимыми или существует ли возможность создания отношений вложенности?

Ответов (1)

Решение

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

Если вы используете Google, вы найдете примеры «вложенных пространств имен XML». Эти примеры не говорят о том, о чем вы спрашиваете, не в смысле пространств имен C++ (или Java, или C# ...). В этих примерах показаны XML-документы с несколькими используемыми пространствами имен.

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