В языках программирования я привык к
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 или каждое пространство имен независимое? Как реализуется или обычно реализуется концепция вложенных пространств имен? Это сделано как мой пример выше? Являются ли пространства имен полностью независимыми или в любом случае создаются отношения вложенности?