嵌套xml命名空间的做法是什么?

Dou*_* T. 2 xml xsd namespaces

在编程语言中,我已经习惯了

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

int main()
{
    foo::bar::DoIt()
}
Run Code Online (Sandbox Code Playgroud)

在模式(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>
Run Code Online (Sandbox Code Playgroud)

从概念上讲,我希望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>
Run Code Online (Sandbox Code Playgroud)

部分原因是我只是试图了解XML与C++之间的命名空间是如何不同的.XML中是否存在嵌套命名空间的概念,或者每个命名空间是否独立?嵌套命名空间的概念如何实现或通常完成?它是否像我上面的例子那样完成了?命名空间是完全独立的还是创建嵌套关系?

Edd*_*die 6

在XML中,每个命名空间都是完全独立的.命名空间的实际字符串不会以任何有意义的方式进行解析.它就是.XML命名空间字符串通常是URL,因为这很有可能人们不会意外地为不相关的模式选择相同的名称空间.

如果您使用Google,则可以找到"嵌套XML命名空间"的示例.这些示例并不是在讨论您所要求的内容,而是在C++(或Java或C#...)名称空间的意义上.这些示例显示了正在使用多个名称空间的XML文档.

XML命名空间字符串只是表示架构的不透明且唯一的字符串.如果两个命名空间字符串碰巧非常相似,那么它并不意味着什么.

  • 只需要一个nit:XML命名空间*必须*是合法的IRI(国际化资源标识符),它是URI的超集,它是URL的超集.不过,你的真正观点是绝对正确的; 解析器将命名空间视为完全不透明的字符串.参考:http://www.w3.org/TR/REC-xml-names/ (4认同)