Schéma XML, décomposition XSD / conditions
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
Code:
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"
> |
- server.xsd
Code:
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"
> |
- commun.xsd
Code:
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"
> |
Chacun contenant des type simpleType, ComplexType et définitions d'éléments.
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.
Code:
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> |
le soucis est que la validation de mon fichier XML ne fonctionne plus!
Pour exemple, l'utilisation de la balise response dans test.xml (balisedéfinie dans server.xsd)
Code:
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> |
affiche l'erreur suivante, alors que l'élément response est un élément root défini dans server.xsd !
Code:
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é :P