Какова практика для вложения пространств имен XML? - PullRequest
2 голосов
/ 26 февраля 2009

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

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 Ответ

6 голосов
/ 26 февраля 2009

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

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

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

...