Какова практика вложения пространств имен 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)1
В XML каждое пространство имен полностью независимо. Фактическая строка пространства имен не анализируется каким-либо значимым образом. Это просто так. Строки пространства имен XML обычно являются URL-адресами, потому что это дает хороший шанс, что люди случайно не выберут одно и то же пространство имен для несвязанных схем.
Если вы используете Google, вы найдете примеры «вложенных пространств имен XML». Эти примеры не говорят о том, о чем вы спрашиваете, не в смысле пространств имен C++ (или Java, или C# ...). В этих примерах показаны XML-документы с несколькими используемыми пространствами имен.
Строка пространства имен XML - это просто непрозрачная и уникальная строка, представляющая схему. Если две строки пространства имен оказываются очень похожими, это ничего не значит.