Bonjour,

J'ai une erreur à la validation d'un xml par son xsd (DomDocument php object).


Warning: DOMDocument::schemaValidate() [function.DOMDocument-schemaValidate]: Element 'test': [facet 'enumeration'] The value 'Bidouille' is not an element of the set {'bidouille'}


La validation s'effectue bien si je remplace le "B" par un "b" dans "Bidouille" et plus concrêtement elle fonctionne par un passage complet en minuscule du texte de la balise xml (nodevalue).

Pour l'instant je ne trouve pas comment faire accepter les majuscules. (Sachant que mon client a, je pense, valider ce XML sans problème mais dans un environnement de dev différent du mien qui suis sous PHP)

Voici biensur le XSD (épuré pour la lecture) :

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
	<xs:element name="first">
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="test"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>

et le xml que (épuré aussi) :

<?xml version="1.0" encoding="UTF-8"?>
<first>
	<test>Bidouille</test>
</first>



En poussant un peu mes recherches avec l'emploi d'un bout de code en PHP d'un developpeur, l'erreur s'est précisée en ceci :

Element 'test': 'Bidouille' is not a valid value of the local atomic type


Visiblement le problème d'une molécule d'atome alien n'est-ce-pas ?
J'ai cherché plus loin sans trouver de réponse.

(C'est la première fois que je test une validation xml...)

Merci pour votre aide.
Trop bête....je croyais enfin trouver une réponse à mon problème et c'est mon propre POST !!! RAAAH ! Google !! Tu références trop vite bon sang !!
Bonjour,

Le XSD a été trop épuré... En effet, d'après le message d'erreur (qui parle d'une facette enumeration), il semblerait que le type défini pour cet élément soit une... énumération de valeurs. Dans ce cas, on explicite la liste des valeurs autorisées. Il se trouve que dans ce cas, "bidouille" était indiqué, mais pas "Bidouille". Il s'agit là de deux chaînes de caractères différentes, dont une seulement donne un fichier XML valide.

XML est sensible à la casse, et un validateur ne peut pas "savoir" a priori si le concepteur du langage a volontairement désiré invalidé les fichiers avec Bidouille ou non. Dans le doute, le validateur doit invalider le fichier s'il contient Bidouille, et le valider avec bidouille.

Pour faire en sorte qu'il valide avec les deux, soit dans la définition du type on ajoute Bidouille, soit on fait appel à une expression régulière (qui spécifie à la fois bidouille et Bidouille), mais j'ai un doute que je n'ai pas le temps de vérifier (la liste des valeurs possibles doit être un sous-ensemble du type de données initial dont on dérive le nouveau type; en général on part de xs:string...)
Ok mais je n'ai ni de "bidouille" ni de "Bidouille" de spécifié dans mon XSD.
L'épuration n'a concerné que quelques autres éléments du XSD mais qui ne concernent pas ce noeud-ci.

Ca voudrait dire que le XSD n'est pas "correct" par rapport à ce qu'on désire (en l'occurrence Bidouille...) selon toi ??

Merci pour ta réponse qui m'en a appris un peu plus !
Modifié par speedev (01 Dec 2008 - 18:45)
Hopala !! Autant pour moi !

J'ai re contrôlé le XSD et il y a bien une énumération que je n'avais pas remarqué.
Je me penche la dessus !

Merci encore.