Bonjour,
débutant en XML, j'ai d'abord écrit mon schéma dans un unique fichier XSD. Dans ce cas, aucun soucis pour valider un fichier XML donné.
Du coup, j'ai voulu découper le XSD en sous parties. En voici les entêtes :
- client.xsd
- server.xsd
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 <xsd:schema xmlns:cmn="commonTypes" xmlns:cli="clientRequest" xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="clientRequest" xmlns="http://example.org" >
- commun.xsd
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 <xsd:schema xmlns:cmn="commonTypes" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:srv="serverResponse" elementFormDefault="qualified" targetNamespace="serverResponse" xmlns="http://example.org" >
Chacun contenant des type simpleType, ComplexType et définitions d'éléments.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="commonTypes" xmlns="http://example.org" >
J'ai aussi fait un main.xsd qui importe client.xsd et server.xsd mais ne contient rien (aucun type ou élément), son rôle étant simplement de lier les autres fichiers.
le soucis est que la validation de mon fichier XML ne fonctionne plus!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 <?xml version="1.0" encoding="ISO-8859-1"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="main" xmlns="http://example.org" > <xsd:import schemaLocation="serverResponse.xsd" namespace="serverResponse"/> <xsd:import schemaLocation="clientRequest.xsd" namespace="clientRequest"/> </xsd:schema>
Pour exemple, l'utilisation de la balise response dans test.xml (balisedéfinie dans server.xsd)
affiche l'erreur suivante, alors que l'élément response est un élément root défini dans server.xsd !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 <response xmlns="http://example.org" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://example.org serverResponse.xsd" > <login>a1ze</login> <password>az9eA</password> </response>
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 test.xml:7: element response: Schemas validity error : Element 'response': No matching global declaration avai lable. test.xml - invalid
Mes questions :
- est-ce que l'utilisation du main.xsd est indispensable?
- si oui, dois-je y définir un balises racine contenant l'option choice sur les éléments racines présents dans server.xsd et client.xsd
- enfin, ce schéma étant client/serveur, comment n'autoriser l'utilisation d'élément qu'en fonction du message XML précédent ?
Par exemple, si je propose les solutions A et B au serveur, qu'il choisit B, comment puis-je interdire au client d'utiliser des balises de A par la suite?
Voilou,
Merci d'avance de vos remarques, et sinon d'avoir lu ce pavé
![]()
Partager