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 :

Respecter des conditions [XSD]


Sujet :

Valider XML

  1. #1
    Candidat au Club
    Homme Profil pro
    Architecte matériel
    Inscrit en
    Septembre 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Architecte matériel
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2015
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Respecter des conditions
    Bonjour,

    Je veux réaliser ce genre de structure en xml:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <data name="geometry">
      <value name="length"> <real>23</real> </value>
      <value name="height"> <real>22.1</real> </value>
    </data>
    <data name="power">
      <value name="intensity"> <real>11</real> </value>
      <value name="voltage"> <real>12.1</real> </value>
    </data>
    est-il possible de s'assurer dans un fichier xsd que "length" et "height" ne peuvent être écrit que si data="geometry" et que "intensity" et "voltage" ne peuvent être écrient que si data="power"?

    en gros, cela veut dire que:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <data name="power">
      <value name="length"> <real>11</real> </value>
      <value name="voltage"> <real>12.1</real> </value>
    </data>
    sera interdit??????????

    j'ai essayé avec simpleType/restriction/enumeration mais ça ne fonctionne pas très bien.
    L'idée est tout simplement de faire dépendre les attributs de value avec ceux de data.

    Avez-vous une solution?
    Merci d'avance

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Hello,

    ce n'est pas trop possible à moins d'ajouter dans ton XML un attribut xsi:type qui, donc, indiquerait le type à faire valider par le XSD. Du coup, cet attribut pourrait remplacer l'attribut name.

    D'habitude quand on veut vraiment assurer ce genre de contraintes, on fait plutôt comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <geometry>
      <length>23</length>
      <height>22.1</height>
    </geometry>
    <power>
      <intensity>11</intensity>
      <voltage>12.1</voltage>
    </power>
    La cohérence des données est ainsi mieux assurée. Mais il devient moins générique à exploiter.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Candidat au Club
    Homme Profil pro
    Architecte matériel
    Inscrit en
    Septembre 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Architecte matériel
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2015
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Bonjour,

    Merci pour la réponse.
    L'idée c'est de pouvoir mettre un nombre complex (partie réelle + partie imaginaire). En voici un exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <data name="power">
      <value name="intensity"> <real>11</real> <imag>1.23</imag></value>
      <value name="voltage"> <real>12.1</real> <imag>31</imag></value>
    </data>
    ainsi la solution que tu proposes ne me semble pas bien fonctionner.

    Aurais-tu un exemple de schéma xsd qui permet d'utiliser les attributs xsi:type?
    Comment relier power avec intensity et voltage puis geometry avec length et width?

    Merci d'avance

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Citation Envoyé par biglosr Voir le message
    ainsi la solution que tu proposes ne me semble pas bien fonctionner.
    Tu t'emmêles, là -_-°. Ça n'a rien à voir, tu pouvais très bien faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <power>
      <intensity>
        <real>11</real>
        <imag>1.23</imag>
      </intensity>
      <voltage>
        <real>12.1</real>
        <imag>31</imag>
      </voltage>
    </power>
    Évidemment, on peut aussi se demander quel est l'intérêt de ne pas faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <power>
      <intensity>11+1.23j</intensity>
      <voltage>12.1+31j</voltage>
    </power>

    Citation Envoyé par biglosr Voir le message
    Aurais-tu un exemple de schéma xsd qui permet d'utiliser les attributs xsi:type?
    Comment relier power avec intensity et voltage puis geometry avec length et width?
    Supposons que j'aie ce XML :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <animals
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      >
     
      <animal xsi:type="sheepType">
        <food name="grass">1.5kg</food>
      </animal>
      <animal xsi:type="wolfType">
        <food name="meat">5kg</food>
      </animal>
     
    </animals>
    Bien sûr un mouton ne peut pas manger de viande et un loup ne peut pas manger d'herbe, on ne veut donc pas permettre que l'attribut name de food prenne des valeurs qui ne correspondent pas à l'attribut xsi:type.

    Et maintenant le XSD, qui montre dans toute sa splendeur pourquoi c'est pas comme ça qu'on fait :

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    <xs:schema version="1.0"
      xmlns:xs="http://www.w3.org/2001/XMLSchema"
      >
     
      <xs:element name="animals">
        <xs:complexType>
          <xs:choice maxOccurs="unbounded">
            <xs:element name="animal" type="animalType"/>
          </xs:choice>
        </xs:complexType>
      </xs:element>
     
      <!--
        Toute la mécanique est là : un type abstrait, donc inutilisable tel que par les éléments XML,
        mais qui sert de parent aux types sheepType et wolfType qui seront spécifiés par xsi:type.
       -->
      <xs:complexType name="animalType" abstract="true"/>
     
      <xs:complexType name="sheepType">
        <xs:complexContent>
          <xs:extension base="animalType">
            <xs:sequence>
              <xs:element name="food">
                <xs:complexType mixed="true">
                  <xs:attribute name="name" use="required">
                    <xs:simpleType>
                      <xs:restriction base="xs:string">
                        <xs:pattern value="grass"/>
                      </xs:restriction>
                    </xs:simpleType>
                  </xs:attribute>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:extension>
        </xs:complexContent>
      </xs:complexType>
     
      <xs:complexType name="wolfType">
        <xs:complexContent>
          <xs:extension base="animalType">
            <xs:sequence>
              <xs:element name="food">
                <xs:complexType mixed="true">
                  <xs:attribute name="name" use="required">
                    <xs:simpleType>
                      <xs:restriction base="xs:string">
                        <xs:pattern value="meat"/>
                      </xs:restriction>
                    </xs:simpleType>
                  </xs:attribute>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:extension>
        </xs:complexContent>
      </xs:complexType>
     
    </xs:schema>
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Candidat au Club
    Homme Profil pro
    Architecte matériel
    Inscrit en
    Septembre 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Architecte matériel
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2015
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Merci pour la solution.

    Cela fonctionne parfaitement.

    Bonne idée.

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

Discussions similaires

  1. Code pour copier des cellules si elles respectent une condition
    Par octane dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 14/11/2008, 06h53
  2. forcer une table a respecter des conditions
    Par Flamby38 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 24/06/2008, 18h04
  3. [Compilateur] Optimisation des conditions
    Par Pedro dans le forum Langage
    Réponses: 2
    Dernier message: 16/06/2004, 13h49

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