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 :

[XSD] comment mettre en commun un maximum de code


Sujet :

Valider XML

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2
    Points : 2
    Points
    2
    Par défaut [XSD] comment mettre en commun un maximum de code
    bonjour a tous et toutes,

    J'ai pris l'initiative d'utiliser xml et xsd dans un projet car les fichier xml sont susceptibles d'être modifiés par le client.

    Ce logiciel permet de lancer des série de tests pour valider le bon fonctionnement d'un système embarqué. Il y a une vingtaine de tests et chacun de ces test a un fichier xml (et xsd) permettant de spécifier une liste de:
    - nom de la valeur a tester
    - valeur attendu

    Les fichiers xsd sont quasiment identiques et j'aimerais pouvoir mettre en commun un maximum de 'code' xsd.

    Voici deux couple de fichier xml et xsd corespondant a deux test, cela montre bien mon soucis :


    1.a) xml du test batterie

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <?xml version="1.0" encoding="utf-8" ?>
    <TestInput
      xmlns="http://tempuri.org/BT_TEST_BACKUP_BATTERY"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://tempuri.org/BT_TEST_BACKUP_BATTERY BT_TEST_BACKUP_BATTERY.xsd"
      Description="Test de la pile de backup de la carte">
     
      <TestEqual Name="Tension de la pile quand la carte est alimentée"  Expected="3.1" Tolerance="0.2"/>
      <TestEqual Name="Tension de pile quand la carte n’est pas alimentée"  Expected="0.5" Tolerance="0"/>
     
    </TestInput>

    1.b) schema validant ce xml

    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
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
     
    <?xml version="1.0" encoding="utf-8" ?>
    <xs:schema id="BT_TEST_BACKUP_BATTERY"
                      targetNamespace="http://tempuri.org/BT_TEST_BACKUP_BATTERY"
                      elementFormDefault="qualified"
                      xmlns="http://tempuri.org/BT_TEST_BACKUP_BATTERY"
                      xmlns:mstns="http://tempuri.org/BT_TEST_BACKUP_BATTERY"
                      xmlns:xs="http://www.w3.org/2001/XMLSchema">
     
      <xs:element name="TestInput">
        <xs:complexType>
          <xs:sequence minOccurs="1" maxOccurs="unbounded">
            <xs:group ref="TestType"/>
          </xs:sequence>
          <xs:attribute name="Description" type="xs:string" use="required"/>
        </xs:complexType>  
      </xs:element>
     
      <xs:group name ="TestType">
        <xs:choice>
          <xs:element name="TestRange" type="TestRangeType"/>
          <xs:element name="TestEqual" type="TestEqualType"/>
          <xs:element name="TestLess" type="TestLessType"/>
        </xs:choice>
      </xs:group>
     
      <xs:complexType name="TestEqualType">
        <xs:complexContent>
          <xs:extension base="TestEqualBaseType" >
            <xs:attribute name="Name" type="TestsAllowed" use="required" />
          </xs:extension>
        </xs:complexContent>
      </xs:complexType>
     
      <xs:complexType name="TestRangeType">
        <xs:complexContent>
          <xs:extension base="TestRangeBaseType" >
            <xs:attribute name="Name" type="TestsAllowed" use="required" />
          </xs:extension>
        </xs:complexContent>
      </xs:complexType>
     
      <xs:complexType name="TestLessType">
        <xs:complexContent>
          <xs:extension base="TestLessBaseType" >
            <xs:attribute name="Name" type="TestsAllowed" use="required" />
          </xs:extension>
        </xs:complexContent>
      </xs:complexType>
     
      <xs:complexType name="TestEqualBaseType">
        <xs:attribute name="Expected" type="xs:string" use="required" />
        <xs:attribute name="Tolerance" type="xs:double" />
      </xs:complexType>
     
      <xs:complexType name="TestRangeBaseType">
        <xs:attribute name="MinInclusiveValue" type="xs:string" use="required" />
        <xs:attribute name="MaxInclusiveValue" type="xs:string" use="required" />
      </xs:complexType>
     
      <xs:complexType name="TestLessBaseType">
        <xs:attribute name="MaxExclusiveValue" type="xs:string" use="required" />
      </xs:complexType>
     
      <xs:simpleType name="TestsAllowed">
        <xs:restriction base="xs:string">
          <xs:enumeration value="Tension de la pile quand la carte est alimentée" />
          <xs:enumeration value="Tension de pile quand la carte n’est pas alimentée" />
        </xs:restriction>
      </xs:simpleType>
     
    </xs:schema>

    2.a) xml du test de mesure des volages

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <?xml version="1.0" encoding="utf-8" ?>
    <TestInput
      xmlns="http://tempuri.org/BT_MEAS_VOLTAGE_POWER"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://tempuri.org/BT_MEAS_VOLTAGE_POWER BT_MEAS_VOLTAGE_POWER.xsd"
      Description="Mesure des tensions et des courants consommés via le processeur ARM7 présent sur la carte du banc de test">
     
      <TestRange Name="Vext charge"    MinInclusiveValue="3.9"  MaxInclusiveValue="4.5"/>
      <TestEqual Name="Tension 3.3V"   Expected="3.3"  Tolerance="0.1"/>
      <TestEqual Name="Tension 1.2V"   Expected="1.2"  Tolerance="0.1"/>
     
    </TestInput>

    2.b) schema validant ce xml

    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
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
     
    <?xml version="1.0" encoding="utf-8" ?>
    <xs:schema id="BT_MEAS_VOLTAGE_POWER"
                      targetNamespace="http://tempuri.org/BT_MEAS_VOLTAGE_POWER"
                      elementFormDefault="qualified"
                      xmlns="http://tempuri.org/BT_MEAS_VOLTAGE_POWER"
                      xmlns:mstns="http://tempuri.org/BT_MEAS_VOLTAGE_POWER"
                      xmlns:xs="http://www.w3.org/2001/XMLSchema">
     
      <xs:element name="TestInput">
        <xs:complexType>
          <xs:sequence minOccurs="1" maxOccurs="unbounded">
            <xs:group ref="TestType"/>
          </xs:sequence>
          <xs:attribute name="Description" type="xs:string" use="required"/>
        </xs:complexType>
      </xs:element>
     
      <xs:group name ="TestType">
        <xs:choice>
          <xs:element name="TestRange" type="TestRangeType"/>
          <xs:element name="TestEqual" type="TestEqualType"/>
          <xs:element name="TestLess" type="TestLessType"/>
        </xs:choice>
      </xs:group>
     
      <xs:complexType name="TestEqualType">
        <xs:complexContent>
          <xs:extension base="TestEqualBaseType" >
            <xs:attribute name="Name" type="TestsAllowed" use="required" />
          </xs:extension>
        </xs:complexContent>
      </xs:complexType>
     
      <xs:complexType name="TestRangeType">
        <xs:complexContent>
          <xs:extension base="TestRangeBaseType" >
            <xs:attribute name="Name" type="TestsAllowed" use="required" />
          </xs:extension>
        </xs:complexContent>
      </xs:complexType>
     
      <xs:complexType name="TestLessType">
        <xs:complexContent>
          <xs:extension base="TestLessBaseType" >
            <xs:attribute name="Name" type="TestsAllowed" use="required" />
          </xs:extension>
        </xs:complexContent>
      </xs:complexType>
     
      <xs:complexType name="TestEqualBaseType">
        <xs:attribute name="Expected" type="xs:string" use="required" />
        <xs:attribute name="Tolerance" type="xs:double" />
      </xs:complexType>
     
      <xs:complexType name="TestRangeBaseType">
        <xs:attribute name="MinInclusiveValue" type="xs:string" use="required" />
        <xs:attribute name="MaxInclusiveValue" type="xs:string" use="required" />
      </xs:complexType>
     
      <xs:complexType name="TestLessBaseType">
        <xs:attribute name="MaxExclusiveValue" type="xs:string" use="required" />
      </xs:complexType>
     
     
      <xs:simpleType name="TestsAllowed">
        <xs:restriction base="xs:string">
          <xs:enumeration value="Tension 3.3V" />
          <xs:enumeration value="Tension 1.2V" />
          <xs:enumeration value="Vext charge" />
        </xs:restriction>
      </xs:simpleType>
     
    </xs:schema>
    Comme vous le constates la seule différence entre les deux fichier xsd est le simpleType "TestsAllowed".
    Les seules parties que j'ai reussi a mettre en commun uniquement estTestEqualBaseType, TestRangeBaseType et TestLessBaseType. Il m'est dont possible de les mettre dans un fichier xsd qui est importé () dans chaqu'un de mes tests, toutefois le code dupliqué reste important a savoir:

    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
     
      <xs:element name="TestInput">
        <xs:complexType>
          <xs:sequence minOccurs="1" maxOccurs="unbounded">
            <xs:group ref="TestType"/>
          </xs:sequence>
          <xs:attribute name="Description" type="xs:string" use="required"/>
        </xs:complexType>
      </xs:element>
     
      <xs:group name ="TestType">
        <xs:choice>
          <xs:element name="TestRange" type="TestRangeType"/>
          <xs:element name="TestEqual" type="TestEqualType"/>
          <xs:element name="TestLess" type="TestLessType"/>
        </xs:choice>
      </xs:group>
     
      <xs:complexType name="TestEqualType">
        <xs:complexContent>
          <xs:extension base="TestEqualBaseType" >
            <xs:attribute name="Name" type="TestsAllowed" use="required" />
          </xs:extension>
        </xs:complexContent>
      </xs:complexType>
     
      <xs:complexType name="TestRangeType">
        <xs:complexContent>
          <xs:extension base="TestRangeBaseType" >
            <xs:attribute name="Name" type="TestsAllowed" use="required" />
          </xs:extension>
        </xs:complexContent>
      </xs:complexType>
     
      <xs:complexType name="TestLessType">
        <xs:complexContent>
          <xs:extension base="TestLessBaseType" >
            <xs:attribute name="Name" type="TestsAllowed" use="required" />
          </xs:extension>
        </xs:complexContent>
      </xs:complexType>
    J'ai longtemps cherché a m'en sortir en reproduisant le mecanisme d'heritage ce qu'on appele les methode virtuel en c++. Mais il me semble que xsd ne permet pas de le faire.

    Peut être avez vous une solution a me proposer pour garder un couple xsd/xml par test avec un minimum de code redondant entre les fichier xsd.

    Merci de m'avoir lu, j'espère avoir été assez clair.

  2. #2
    Rédacteur

    Avatar de Erwy
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2003
    Messages
    4 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 967
    Points : 10 927
    Points
    10 927
    Par défaut
    XML Schema permet de "mutualiser" ces éléments et types via le système des imports

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xs:import schemaLocation="..."></xs:import>

Discussions similaires

  1. Réponses: 1
    Dernier message: 25/03/2015, 14h22
  2. Comment mettre le curseur d'un Memo sur le Canvas d'une Form ?
    Par julie20 dans le forum Composants VCL
    Réponses: 3
    Dernier message: 27/08/2003, 13h24
  3. Réponses: 2
    Dernier message: 19/08/2003, 15h45
  4. Comment mettre en place une structure 3 tiers.
    Par WOLO Laurent dans le forum Débats sur le développement - Le Best Of
    Réponses: 13
    Dernier message: 27/07/2003, 22h01
  5. Comment mettre plusieurs objets ds un composant ?
    Par Fleury dans le forum Composants VCL
    Réponses: 7
    Dernier message: 24/05/2003, 17h34

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