【问题标题】:What is the practice for nesting xml namespaces?嵌套 xml 命名空间的做法是什么?
【发布时间】:2010-10-09 23:44:55
【问题描述】:

在编程语言中,我习惯了

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

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

在 schema(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++)。我已经看到了似乎是为 bar 东西定义的完全第二个命名空间的示例。在这些示例中,bar stuff 将在第二个命名空间“http://www.stackoverflow.com/foo/bar”中定义,如下例所示。这是我见过的最接近“嵌套”命名空间的地方。

所以我可以做的一件事是从不同的架构导入 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 中有嵌套命名空间的概念,还是每个命名空间独立?嵌套命名空间的概念是如何实现或通常完成的?是不是像我上面的例子一样?命名空间是完全独立的还是存在嵌套关系?

【问题讨论】:

    标签: xml namespaces xsd


    【解决方案1】:

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

    如果您使用 Google 搜索,您会发现“嵌套 XML 命名空间”的示例。这些示例不是在谈论您要问的内容,而不是在 C++(或 Java 或 C#...)命名空间的意义上。这些示例显示了使用多个名称空间的 XML 文档。

    XML 命名空间字符串只是一个表示架构的不透明且唯一的字符串。如果两个命名空间字符串碰巧非常相似,那没有任何意义。

    【讨论】:

    • 只有一点:XML 命名空间要求是合法的 IRI(国际化资源标识符),它是 URI 的超集,它是 URL 的超集。不过,您的真正观点是绝对正确的;解析器将命名空间视为完全不透明的字符串。参考:w3.org/TR/REC-xml-names
    • @Peeja:很好的说明。谢谢。
    猜你喜欢
    • 2011-04-28
    • 1970-01-01
    • 2014-12-28
    • 1970-01-01
    • 1970-01-01
    • 2016-03-11
    • 2011-01-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多