Resolution dans le dernier poste

Bonjour,

je cherche à déclarer des attributs globaux, et de les reutiliser par ref dans mon schema, lors de la validation d'un fichier xml correspondant sous eclipse, j'obtiens une erreur du type :

"attribute "name" is not allowed to appear in element x"

Je défini mon attribut au début de mon schéma et je le réutilise dans un element complex:

<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
targetNamespace="http://www.x.com" 
xmlns="http://www.x.com" 
xmlns:conf="http://www.x.com" 
elementFormDefault="qualified" 
attributeFormDefault="unqualified">

	<xs:attribute name="name" type="xs:string"/>

	<xs:element name="balise">
		<xs:complexType>
			<xs:sequence>
	  			<xs:element name="x">
					<xs:complexType>
						<xs:sequence>
							<xs:element name="level" type="xs:string" />
						</xs:sequence>
						<xs:attribute ref="name"/>
					</xs:complexType>
				</xs:element>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
</xs:schema>


J'ai essayer de referencer l'attribut en remplaçant ref="name" par ref="conf:name" (en rajoutant dans le xs:schema xmlns:conf="http://www.x.com" ) , rien n'y fait, voila la tête de l'element en xml

<?xml version="1.0" encoding="UTF-8"?>

<balise name="test" 
xmlns="http://www.x.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

<x name="bla">
      <level>blabla</level>
</x>

</balise>


Si vous avez des idée... Smiley smile

Merci d'avance.

Edit : mise en forme
Modifié par Kahor (05 Jun 2008 - 18:13)
Je ne vois pas; le schéma m'a l'air valide... peut-être un bug de ton validateur dû à ta construction en poupée russe de ton schéma (=imbrication de déclarations d'éléments de type complexe, ce qui est autorisé mais peut-être que cela dépasse ce que peut gérer ton validateur...) Smiley ohwell
RESOLU Explication :
http://www.xml.com/pub/a/2001/06/06/schemasimple.html
Resumer : il vaut mieux ne pas faire de declaration global d'attributs, ou être prêt à redéfinir tout les attributs dans le fichier xml en faisant appel au namespace en question devant la balise et devant l'attribut (ex<namespace:balise namespace:name="blabla"></namespace:balise>)

-------------------------------------------------------------------------------------------

Apres bidouillage, je pense que l'erreur vient du namespace, j'essaye encore de comprendre pourquoi

Gilles a écrit :
Je ne vois pas; le schéma m'a l'air valide... peut-être un bug de ton validateur dû à ta construction en poupée russe de ton schéma (=imbrication de déclarations d'éléments de type complexe, ce qui est autorisé mais peut-être que cela dépasse ce que peut gérer ton validateur...) Smiley ohwell


J'utilise eclipse, et le reste du code fonctionne correctement (je n'ai poster qu'un extrait), je suppose que le problème ne doit pas venir de la mais je n'en sais pas plus.

Au final :
Ca marche sans déclaration de namespace :
si j'enlève les déclaration de targetnamespace et de xmlns du fichier xml, et si j'enlève la déclaration de xmlns du fichier xml en ajoutant xsi:noNamespaceSchemaLocation="grammaire.xsd", le fichier xml est bien vérifié par le fichier xsd et les déclaration par "ref" des attributs marchent correctement.

Par contre, avec déclaration de namespace, le fichier xml est bien vérifié par le fichier xsd mais les déclaration par "ref" des attributs ne marchent pas, et j'obtient l'erreur "attribute 'name' is not allowed to appear in element x"
???
Modifié par Kahor (05 Jun 2008 - 18:25)