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

XML/XSL et SOAP Discussion :

Redifinition xsd element


Sujet :

XML/XSL et SOAP

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2008
    Messages : 48
    Points : 37
    Points
    37
    Par défaut Redifinition xsd element
    Bonjour,

    Je suis actuellement entrain d'écrire plusieurs xsd pour une application java. J'ai plusieurs xsd (xsd spécifiques) correspondant à une fonctionnalité particulière différent seulement par la structure de l'xsd, j'ai un xsd générique qui contient les éléments communs à tous les xsd.

    Maintenant, je voudrais redéfinir dans une de mes xsd un element avec une restriction qui ne s'applique qu'à un seul cas, d'où mon envie de le mettre dans l'xsd spécifique de la fonctionnalité.

    Dans l'xsd global :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <xs:simpleType name="T_Message_Code">
    		<xs:restriction base="xs:int">
    			<xs:totalDigits value="3"/>
    		</xs:restriction>
    	</xs:simpleType>
    Ce que je souhaiterais dans l'xsd spécifique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <xs:redefine schemaLocation="monXSD2.xsd">
    		<xs:simpleType name="T_Message_Code">
    			<xs:restriction base="xs:int">
    				<xs:enumeration value="300"/>
    			</xs:restriction>
    		</xs:simpleType>
    	</xs:redefine>
    Quelqu'un aurait une idée ?

    Merci

  2. #2
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    Comme ça.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <xs:redefine schemaLocation="monXSD2.xsd">
        <xs:simpleType name="T_Message_Code">
            <xs:restriction base="T_Message_Code">
                <xs:enumeration value="300"/>
            </xs:restriction>
        </xs:simpleType>
    </xs:redefine>

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2008
    Messages : 48
    Points : 37
    Points
    37
    Par défaut
    Peut-être que quelqu'un pourra m'aider :
    'T_Message_Code' is already declared in schema document '
    ce qui est normal puisque vu que l'xsd spécifique fait appel à l'xsd général au moyen d'un xs:include, que puis-je faire pour éviter ce problème ?

    Y-a-t'il un attribut xs à mettre dans l'xsd globale pour dire qu'un element peut-être redéfini ?

  4. #4
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    Vous ne faites pas une xs:redefine contenant une redéfinition de T_Message_Code et puis plus bas dans le même document xsd défine une xs:simpleType de même nom. C'est une erreur. C'est comme si vous définissiez deux fois un type de même nom dans le même document xsd, ce qui n'est pas permis.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2008
    Messages : 48
    Points : 37
    Points
    37
    Par défaut
    Pour être sur,

    j'ai dans un xsd, la redéfinition (telle que vous l'avez mise précédemment) avec l'include vers l'xsd globale.

    Dans un autre xsd (l'xsd spécifique), j'ai mon element T_Message_Code

    Le problème intervient quand je veux valider la 1ère xsd (xsd globale contenant la redéfinition).

    Malheureusement, je n'ai plus moyen de le tester avant demain, mais si je te comprends bien, je dois changer un des deux T_MESSAGE_CODE (element name ou restriction base). Mais alors comment faire le lien avec l'existente car je dois (il me semble utiliser le même nom d'élément).

  6. #6
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    Même avec la meilleure volonté, je n'arrive pas à comprendre ce que vous voulez dire.
    j'ai dans un xsd, la redéfinition (telle que vous l'avez mise précédemment) avec l'include vers l'xsd globale.
    Qu'est-ce que c'est "la redéfinition... avec l'include vers l'xsd globale"?

    Et puis
    Dans un autre xsd (l'xsd spécifique), j'ai mon element T_Message_Code
    Qu'est-ce que c'est l'element? xs:simpleType ou xs:element avec le nom T_Message_Code? C'est pas la même chose; un xs:redefine ne s'applique à xs:element, jamais.

    En tout cas, je ne comprends pas du tout, pas en tant que la langue francaise: le post est probablement impéccablement bien construit, je ne sais pas... C'est là que je redécouvre votre sagesse en disant "Peut-être que quelqu'un [d'autre] pourra m'aider", pas pour moi.

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2008
    Messages : 48
    Points : 37
    Points
    37
    Par défaut
    Après une nouvelle réflexion, quelques nouveaux tests, je reviens à la charge :

    L'idée est d'avoir dans un xsd tous les elements xsd dont l'element suivant :

    xsd : TestXSD_General.xsd

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <xs:complexType name="Personne">
    	<xs:sequence>
    		<xs:element name="Nom" type="xs:string"/>
    		<xs:element name="Prenom" type="xs:string"/>
    		<xs:element name="AnneeNaiss" type="xs:int"/>
    	</xs:sequence>
    </xs:complexType>

    Dans un autre (qui contiendra tout le squelette de l'xsd), j'ai mon element principal (Document) qui fait appel grâce à xs:include à l'élément présent dans l'autre XSD.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    	<xs:include schemaLocation="TestXSD_General.xsd"/>
    	<xs:element name="Document">
    		<xs:complexType>
    			<xs:sequence>
    				<xs:element name="Personne" type="Personne"/>
    			</xs:sequence>
    		</xs:complexType>
    	</xs:element>

    Jusque là, je n'ai pas de problème car cela fonctionne comme je veux.



    Par contre, je voudrais ajouter une restriction à l'element (vu que l'xsd : TestXSD_General.xsd est utilisé par d'autres, je ne peux pas modifier l'element comme je l'aurais voulu. Je voudrais donc redéfinir / réutiliser / hériter (je ne sais pas quelle est la notion adéquate) l'element "Personne". Pour cela j'ai recréé l'element "Personne" auquel j'ai rajouté une restriction.


    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
    <xs:element name="Personne">
    		<xs:complexType>
    			<xs:sequence>
    				<xs:element name="Nom" type="xs:string"/>
    				<xs:element name="Prenom" type="xs:string"/>
    				<xs:element name="AnneeNaiss">
    					<xs:simpleType>
    						<xs:restriction base="xs:int">
    							<xs:totalDigits value="4"/>
    						</xs:restriction>
    					</xs:simpleType>
    				</xs:element>
    			</xs:sequence>
    		</xs:complexType>
    	</xs:element>

    Comment faire pour que je puisse faire appel à l'élément "Personne" contenant la restriction ?

Discussions similaires

  1. [XSD] : Element 'date' vide
    Par cvacavant dans le forum Valider
    Réponses: 4
    Dernier message: 16/06/2009, 18h21
  2. [XSD] Eléments avec même nom et attributs différents
    Par stanware dans le forum Valider
    Réponses: 3
    Dernier message: 24/06/2008, 17h44
  3. [XSD]Element obligatoire et optionnel
    Par be_tnt dans le forum Valider
    Réponses: 1
    Dernier message: 23/05/2006, 15h13
  4. [XSD] Elements de meme nom dans une sequence
    Par MathiasM dans le forum Valider
    Réponses: 2
    Dernier message: 14/04/2005, 09h33
  5. [XSD] element texte non parsé
    Par bulbo dans le forum Valider
    Réponses: 13
    Dernier message: 10/01/2005, 11h44

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