2009-02-26 26 views
2

在编程语言,我已经习惯了嵌套xml名称空间的做法是什么?

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 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不同VS说C++。 XML中是否存在嵌套命名空间的概念,或者每个命名空间都是独立的?嵌套命名空间的概念如何实现或通常完成?它是否像我上面的例子一样完成?命名空间是完全独立的还是有创建嵌套关系的?

回答

6

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

如果你是谷歌,你会找到“嵌套XML命名空间”的例子。这些例子并不是在谈论你在问什么,而在于C++(或Java或C#...)命名空间。这些示例显示了使用多个名称空间的XML文档。

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

+4

只有一个尼特:XML名称空间*是必需的*是合法的IRI(国际化资源标识符),它是URI的超集,它是URL的超集。虽然你的真实点是绝对正确的;解析器将该名称空间视为完全不透明的字符串。 Ref:http://www.w3.org/TR/REC-xml-names/ – Peeja 2009-05-01 19:13:22

相关问题