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

标签 xml namespaces xsd

在编程语言中,我习惯了

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

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

在模式(xsd)中,我想在定义复杂类型时做类似的事情

<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 东西定义的第二个 namespace 。在这些示例中,bar stuff 将在第二个命名空间“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 中的 namespace 与 C++ 中的 namespace 有何不同。 XML 中是否有嵌套 namespace 的概念,或者每个 namespace 都是独立的?嵌套命名空间的概念是如何实现或通常完成的?是不是像我上面的例子那样做的?命名空间是完全独立的还是存在嵌套关系?

最佳答案

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

如果您使用 Google,您会找到“嵌套 XML namespace ”的示例。这些例子不是在谈论你在问什么,不是在 C++(或 Java 或 C#...)命名空间的意义上。这些示例显示了使用多个命名空间的 XML 文档。

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

关于xml - 嵌套xml命名空间的做法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/588919/

相关文章:

.net - 在 .net 中验证和读取 xml 文件的最简单方法?

java - 如何在java spring-boot上将xml转换为对象

C# : Read/Write DateTime from/into XML

java - JAXB - 如何使用 <set varname = "String"value = name "String2"> 元素从对象创建 xml

c++ - 使用 "using"指令来缩短函数定义

xml - 在输出中的元素上显式显示默认命名空间

java - 如何在现有类型中声明或定义通用 xsd 类型。

xml - 我可以用命名空间注册 xsd 然后验证 xml 忽略命名空间吗

java - 如何将值插入到 xml 标记中

c# - 将命名空间添加到序列化的 xml