2010-11-17 41 views
1


鑑於以下架構在模式中聲明的元素是否允許xml:lang作爲xs:string?

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
      targetNamespace="http://tempuri.org/foo" 
      elementFormDefault="qualified"> 
    <xs:element name="foo" type="xs:string" /> 
</xs:schema> 

是下面的XML是否有效?

<foo xmlns="http://tempuri.org/foo" xml:lang="en-US">test</foo> 

也就是說,這裏是否允許「xml:lang」屬性?

此問題的原因是配置爲通過HTTP使用SOAP/1.1(WCF條款中的basicHttpBinding)的WCF(Windows Communication Foundation)端點始終在「faultstring」元素上包含「xml:lang」屬性被提出。根據SOAP/1.1包絡模式,該元素是簡單類型「xs:string」。

我不會真的在乎它是否不是針對客戶我們的問題是反序列化這些故障。我已經向微軟報告這是一個potential bug,但得到了迴應,認爲這是設計並且符合SOAP/1.1。閱讀XML Schema規範讓我相信微軟是錯誤的,並且簡單類型的元素不允許任何屬性。

我在這裏丟失了與「xml:」命名空間中屬性相關的內容嗎?

我真正想要的是某種「官方」定義,它允許我向微軟說「你錯了」,或者「你有一個錯誤的WS堆棧」給我們的客戶,而不會讓自己變傻。

編輯:標題問題的答案似乎是「否」,如下所述。我的WCF問題的解決方案也變得非常簡單。將空字符串作爲System.ServiceModel.FaultReasonText的構造函數中的xmlLang參數傳遞,並且不會添加屬性。傳遞null不起作用(ArgumentNullException)並且一個參數構造函數也不起作用(系統默認語言將設置爲xml:lang)

+0

感謝您的後續解決方法(FaultReasonText構造函數)。 – 2014-08-26 14:13:51

回答

0

根據XML Schema,O'Reilly,來自Eric van der Vlist,頁。 170(XML屬性)中,xml:lang屬性需要在模式中聲明,並聲明瞭xml名稱空間併爲XML名稱導入一個模式。

+0

Yupp必須是真實的。在進一步挖掘之後,我在「XML Schema Part 1」規範的3.3.4節中找到了「驗證規則:元素本地有效(類型)」子句,它明確指出簡單類型元素允許的唯一屬性是xsi:type, xsi:nill,xsi:schemaLocation和xsi:noNamespaceSchemaLocation。 – Yhrn 2010-11-19 08:13:52

相關問題