2013-10-20 59 views
2

我的客戶是具有與該Facebook chat server了友好交談XMPP,並接收其看起來像這樣的XML片段:也是命名空間的根元素中的命名空間定義 - 有效的XML?

<stream:stream xmlns:stream='http://etherx.jabber.org/streams' from='chat.facebook.com' id='1' version='1.0' > 
</stream:stream> 

因此,有根元素命名空間定義「流」。到現在爲止還挺好。

但是,根元素本身正在使用「流」命名空間,這似乎很奇怪。這是有效的XML嗎?

我正在使用的XML庫(dart-xml)抱怨它,我想知道如果是這樣,或者如果該庫有一個bug

+1

名稱空間的範圍是聲明和包含元素的元素。因此ns被聲明的元素使用ns是完全有效的。 –

回答

2

但是根元素本身使用「流」命名空間,其中 似乎很奇怪。這是有效的XML嗎?

這並不奇怪,根元素本身不過是使用stream命名空間,...

有效必須是相對於XSD,和XSD將不得不與XML實例相關聯。我看到在名稱空間指定的端點上有一個XSD:http://etherx.jabber.org/streams.xsd

一種常見的方式,使該協會將使用xsi:schemaLocation屬性:

<stream:stream xmlns:stream='http://etherx.jabber.org/streams' 
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
       xsi:schemaLocation="http://etherx.jabber.org/streams http://etherx.jabber.org/streams.xsd" 
       from='chat.facebook.com' id='1' version='1.0'> 
</stream:stream> 

驗證,然後可以找到XML Schema來使用,但是,有一個問題:

[Error] streams.xsd:23:21: cos-nonambig: WC["urn:ietf:params:xml:ns:xmpp-tls"] and WC[##other:"http://etherx.jabber.org/streams"] (or elements from their substitution group) violate "Unique Particle Attribution". During validation against this schema, ambiguity would be created for those two particles. 
[Error] streams.xsd:74:21: cos-nonambig: "urn:ietf:params:xml:ns:xmpp-streams":text and WC[##other:"http://etherx.jabber.org/streams"] (or elements from their substitution group) violate "Unique Particle Attribution". During validation against this schema, ambiguity would be created for those two particles. 

Unique Particle Attribution是XSD的必需約束。因此,爲了回答您的問題,我們不能說XML是有效的,因爲我們沒有一個有效的XSD來對其進行驗證。

+1

謝謝!看起來在XML庫中確實存在一個即將得到修復的錯誤:https://github.com/prujohn/dart-xml/issues/36#issuecomment-26763161 – Max