2009-02-26 17 views
2

, ben complexTypesxml ad alanlarını yerleştirme uygulaması nedir? programlama dillerinde

Kavramsal olarak
<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> 

Ben çubuğunu1 ve çubuğunu2 istiyorum tanımlarken benzer şeyler yapmak istediğiniz bir şema (XSD) olarak

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

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

alışkınım Bir http://www.stackoverflow.com/foo::bar ad boşluğunda yuvalanmak (:: C++ 'dan ödünç alındı). Bar öğeleri için tanımlanan tamamen ikinci bir ad alanı gibi görünen örnekler gördüm. Bu örneklerde, çubuklar, aşağıdaki örnekte olduğu gibi ikinci bir isim alanında "http://www.stackoverflow.com/foo/bar" tanımlanacaktır. Bu bir "iç içe" ad alanına en yakın gördüğüm.

Yani bir şey ben tür yapmak Sadece ad ++ XML farklıdır vs C söylemek nasıl grok çalışıyorum olmasıdır Farklı şemasından bu

<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> 

Part çubuğu şeyler aktarmaktır edebilirsiniz. XML'de yuvalanmış ad alanları var mı yoksa her ad alanı bağımsız mı? İç içe geçmiş ad alanları nasıl uygulanır veya tipik olarak yapılır? Yukarıdaki örneğim gibi mi yapıldı? İsim alanları tamamen bağımsız mı yoksa bir yuva oluşturma ilişkisi var mı?

cevap

6

XML'de, her ad alanı tamamen bağımsızdır. Bir ad alanının asıl dizesi anlamlı bir şekilde ayrıştırılmaz. O sadece. XML Ad alanı dizeleri tipik olarak URL'lerdir çünkü bu, insanların ilgisiz şemalar için yanlışlıkla aynı ad alanını seçmemesi için iyi bir şanstır.

Google'da, "iç içe XML ad alanları" örneklerini bulacaksınız. Bu örnekler, C++ (veya Java ya da C# ...) ad alanlarına değil, ne sorduğunuz hakkında konuşmuyor. Bu örnekler, kullanımda birden çok ad alanına sahip XML belgelerini gösterir.

XML ad alanı dizesi, şemayı temsil eden yalnızca opak ve benzersiz bir dizedir. İki isim dizgisi çok benzer olursa, hiçbir şey ifade etmez.

+4

Sadece bir nit: XML ad * URL'lerin bir üst kümesidir URI'lerinin, bir üst kümesidir yasal tanım-(Internationalized Resource Identifier), olmak * gereklidir. Gerçek noktanız kesinlikle doğrudur; ayrıştırıcı, ad alanını tamamen opak bir dize olarak ele alır. Ref: http://www.w3.org/TR/REC-xml-names/ – Peeja

+0

@Peeja: İyi bir açıklama. Teşekkürler. – Eddie

İlgili konular