xml:lang是否允许在schema中声明的元素为xs:string?

时间:2010-11-17 10:54:44

标签: xsd


给出以下架构

<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(Windows Communication Foundation)端点(WCF术语中的basicHttpBinding)在故障时始终在“faultstring”元素上包含“xml:lang”属性提高。根据SOAP / 1.1信封模式,此元素的类型为“xs:string”。

我真的不在乎,如果不是客户我们在解决这些故障时遇到问题。我已将此报告为Microsoft的potential bug,但得到的回答是这是设计的,并且符合SOAP / 1.1。阅读XML Schema规范让我相信Microsoft是错误的,并且在简单类型的元素上不允许任何属性。

我是否遗漏了与“xml:”命名空间中的属性相关的内容?

我真正想要的是某种“官方”定义,允许我向我们的客户说“你错了”或“你有一个错误的WS堆栈”给我们的客户而不是自欺欺人。

编辑:标题问题的答案似乎是“否”,如下所述。我的WCF问题的解决方案也变得非常简单。将空字符串作为xmlLang参数传递给System.ServiceModel.FaultReasonText的构造函数,并且不会添加该属性。传递null不起作用(ArgumentNullException),并且一个参数构造函数(系统默认语言将不会设置为xml:lang)

1 个答案:

答案 0 :(得分:0)

根据 XML Schema ,O'reilly,来自Eric van der Vlist,p。 170(XML Attributes),xml:lang属性需要在模式中声明,使用声明的xml命名空间并导入xmlnamespâces的模式。