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] extension d'un type suivant la valeur d'un attribut


Sujet :

Valider XML

  1. #1
    Membre éprouvé
    Avatar de Tifauv'
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 102
    Par défaut [XSD] extension d'un type suivant la valeur d'un attribut
    Bonjour,

    j'ai une structure XML de type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <module type="toto">...</module>
    En fonction de la valeur de type, les éléments contenus dans <module> varient, avec des parties communes.

    Dans le schéma XML, j'ai donc envisagé de faire un type abstrait ModuleType :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <complexType name="ModuleType" abstract="true">
      <attribute name="type" type="xsd:string" use="required" />
    </complexType>
    et des types concrets qui implémentent ModuleType comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <complexType name="BoardModuleType">
      <complexContent>
        <restriction base="ModuleType">
          <sequence>
            <element name="backend" type="BackendType" />
          </sequence>
          <attribute name="type" type="xsd:string" use="required" fixed="board" />
        </restriction>
      </complexContent>
    </complexType>
    Le problème est que pour déclarer les éléments de type ModuleType, j'ai fait comme j'aurais fait en POO :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <element name="module" type="ModuleType" />
    Et bien sûr quand je tente de valider un document, ça ne passe pas parce qu'il ne reconnaît pas les éléments supplémentaires de BackendModuleType.

    Si un spécialiste XSD a une idée, je suis preneur...

    Merci d'avance !

  2. #2
    Membre expérimenté
    Étudiant
    Inscrit en
    Février 2004
    Messages
    193
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 193
    Par défaut
    Je ne suis pas aller voir la spec de xml schema, mais il me semble d apres les deboirs que j ai pu avoir qu il n'est pas possible d'instancier un type abstrait.. donc de le definir en tant que type direct d'une balise element.

    XML Schema semble gerer l'heritage, les types abstraits, mais pas de polymorphisme. Oui, ca parait bete. ou alors les outils que j'ai utilisé etaient bugge.

    La solution est une structure en xsd:Choice.

  3. #3
    Membre éprouvé
    Avatar de Tifauv'
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 102
    Par défaut
    Le problème reste si je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <choice>
      <element name="module" type="BoardModuleType" />
      <element name="module" type="ModuleType" />
    </choice>
    car xmllint me jette en me disant que le schéma n'est pas déterministe (ce qu'il n'est effectivement pas).

  4. #4
    Expert confirmé
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 55

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Par défaut
    Bonjour,

    il n'est pas possible de contraindre un modèle de contenu selon le contenu d'un attribut ; il est préférable de conserver module comme structure abstraite, d'où seront dérivées par extension ou restriction toutes les autres (module-toto, module-truc, etc.). Ca correspond d'ailleurs plus à la définition de l'héritage telle qu'il est pratiqué dans d'autres langages...
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

  5. #5
    Membre éprouvé
    Avatar de Tifauv'
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 102
    Par défaut
    Merci, je craignais cette réponse, mais bon...

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 17/03/2007, 21h32
  2. tester le type d'une valeur saisie
    Par lalaurie40 dans le forum C
    Réponses: 1
    Dernier message: 09/10/2005, 22h52
  3. [XSD] test de la valeur d'un attribut
    Par ka0z dans le forum Valider
    Réponses: 3
    Dernier message: 21/08/2005, 21h46
  4. [VB.NET] Mise en forme d'une datagrid suivant une valeur
    Par Nesmontou dans le forum ASP.NET
    Réponses: 7
    Dernier message: 17/06/2005, 12h51
  5. 1 champ de type enum à 3 valeurs ou 2 champs booléens ?
    Par El Saigneur dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 22/01/2005, 09h53

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