2010-11-17 3 views
1


Étant donné le schéma suivantxml: lang est-il autorisé sur l'élément déclaré dans le schéma en tant que 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> 

est le code XML suivant valide?

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

Autrement dit, l'attribut "xml: lang" est-il autorisé ici? La raison de cette question est que les points de terminaison WCF (Windows Communication Foundation) configurés pour utiliser SOAP/1.1 sur HTTP (basicHttpBinding en termes WCF) incluent toujours l'attribut "xml: lang" sur l'élément "faultstring" lorsqu'une erreur est élevé. Selon le schéma d'enveloppe SOAP/1.1, cet élément est du type simple "xs: string".

Je ne me soucierais pas vraiment si ce n'était pas pour un client le nôtre a des problèmes de désérialisation de ces défauts. J'ai rapporté ceci à potential bug à Microsoft mais j'ai obtenu la réponse que c'est par conception et qu'il est conforme à SOAP/1.1. Lire des spécifications XML Schema m'amène à croire que Microsoft a tort et qu'aucun attribut n'est autorisé sur les éléments de types simples. Est-ce que je manque quelque chose ici lié aux attributs dans l'espace de noms "xml:"?

Ce que j'aimerais vraiment avoir, c'est une sorte de définition "officielle" qui me permette de dire "tu as tort" à Microsoft ou "tu as une pile WS boguée" à notre client sans me ridiculiser .

EDIT: La réponse à la question du titre semble être "non" comme indiqué ci-dessous. La résolution de mon problème WCF s'est avérée être assez simple aussi. Passez la chaîne vide en tant que paramètre xmlLang dans le constructeur du System.ServiceModel.FaultReasonText et l'attribut ne sera pas ajouté. Passant null ne fonctionne pas (ArgumentNullException) et ni ne l'un constructeur d'argument (la langue par défaut du système sera défini comme xml: lang)

+0

Merci pour la solution de contournement (constructeur FaultReasonText) dans votre suivi. –

Répondre

0

Selon XML Schema, O'reilly, de Eric van der Vlist, p. 170 (Attributs XML), l'attribut xml: lang doit être déclaré dans le schéma, avec l'espace de noms xml déclaré et importer un schéma pour les noms de fichiers XML.

+0

Yupp qui doit être vrai. Après quelques recherches supplémentaires, j'ai trouvé la clause "Validation: élément localement valide (type)" dans la section 3.3.4 de la spécification "XML Schema Part 1" qui indique clairement que les seuls attributs autorisés sur les éléments de type simples sont xsi: type, xsi: nill, xsi: schemaLocation et xsi: noNamespaceSchemaLocation. – Yhrn

Questions connexes