Учитывая следующую схему
<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"?
Причина этого вопроса заключается в том, что конечные точки WCF (Windows Communication Foundation), настроенные для использования SOAP / 1.1 через HTTP (basicHttpBinding в терминах WCF), всегда включают атрибут «xml: lang» в элементе «faultstring», когда возникает ошибка поднял. Согласно схеме конверта SOAP / 1.1 этот элемент имеет простой тип "xs: string".
Мне было бы все равно, если бы не у нашего клиента возникли проблемы с десериализацией этих ошибок. Я сообщил об этом как о потенциальной ошибке в Microsoft, но получил ответ, что это разработано и соответствует SOAP / 1.1. Чтение спецификаций XML-схемы заставляет меня поверить, что Microsoft ошибочна и что атрибуты для элементов простых типов не допускаются.
Я что-то упустил из-за атрибутов в пространстве имен "xml:"?
Что я действительно хотел бы иметь, так это какое-то «официальное» определение, которое позволяет мне сказать «вы не правы» Microsoft или «у вас глючный стек WS» нашему клиенту, не обманывая себя.
РЕДАКТИРОВАТЬ : Ответ на заглавный вопрос, как представляется, "нет", как указано ниже. Решение моей проблемы с WCF оказалось довольно простым. Передайте пустую строку в качестве параметра xmlLang в конструкторе System.ServiceModel.FaultReasonText, и атрибут не будет добавлен. Передача нулевого значения не работает (ArgumentNullException) и конструктор с одним аргументом (системный язык по умолчанию будет установлен как xml: lang)