2009-02-26 102 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