IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Valider XML Discussion :

Schéma XML, décomposition XSD / conditions


Sujet :

Valider XML

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Avril 2006
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 19
    Par défaut 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 : 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"					
    >
    - 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:xsd="http://www.w3.org/2001/XMLSchema"
    			xmlns:srv="serverResponse"			
    			elementFormDefault="qualified"
    			targetNamespace="serverResponse"
    			xmlns="http://example.org"					
    >
    - commun.xsd
    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"
    >
    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 : 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>
    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 : 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>
    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
     
    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é

  2. #2
    Membre averti
    Inscrit en
    Avril 2006
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 19
    Par défaut
    Bon, j'ai réussi à faire marcher le bouzin : mon essai valide bien le schéma !

    Si d'autres ont le même problème, la solution m'est apparue en étudiant l'exemple d'un site, plus précisément ça :

    As the root element "Purchase" is in the namespace "http://NamespaceTest.com/Purchase", we must quantify the <Purchase> element within the resulting XML document.
    En gros, la balise racine de mon fichier text.xml n'était pas reconnue, il fallait la préfixer et définir l'élément dans le main. (je suis ensuite passé en mode unqualified dans mes xsd pour ne pas préfixer toutes les balises dans mon fichier XML)

    Pour ce qui concerne les conditions, je vais redéfinir les elements présents dans chaque fichier xsd en types complexes nommés. Puis depuis le main.xsd faire une structure à base de choice... ça ne répond pas vraiment à ma question, mais c'est tout ce que j'ai trouvé. C'est à priori une limite d'utilisation d'XML 1.0, du coup, il faudra gérer ça du côté programmation, au moment de parser. (par contre xml 1.1 le proposerait..)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XSD] Validation une instance XML avec schéma(plusieurs fichiers XSD)
    Par ttttnht dans le forum Format d'échange (XML, JSON...)
    Réponses: 4
    Dernier message: 07/09/2009, 15h16
  2. Réponses: 10
    Dernier message: 19/04/2007, 18h52
  3. [XSD] Conditions dans XML SCHEMA
    Par mehdi146 dans le forum Valider
    Réponses: 5
    Dernier message: 07/08/2006, 13h37
  4. [XSLT][XSD>XML]transformer xsd en xml avec xslt
    Par émile-henri dans le forum XSL/XSLT/XPATH
    Réponses: 7
    Dernier message: 14/06/2005, 15h06
  5. [JAXB] JAVA, XML et XSD
    Par billynirvana dans le forum Format d'échange (XML, JSON...)
    Réponses: 5
    Dernier message: 19/05/2005, 11h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo