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 :

Désordre et répétition + any


Sujet :

Valider XML

  1. #1
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut Désordre et répétition + any
    Bonjours
    j'ai un pb je reçois des XML (dont je veux définir le schéma) qui on la particularité d'avoir un élément avec des fils dans de désordre et pour certains répété
    un bon exemple est toujours plus parlant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?xml version="1.0" encoding="windows-1250"?>
    <xml>
      <element>
        <fils1 />
        <fils2 />
        <fils3 />
        <fils4 />
        <fils5 />
        <fils6 />
        <fils7 />
        <repeted />
        <repeted />
      </element>
    </xml>
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?xml version="1.0" encoding="windows-1250"?>
    <xml>
      <element>
        <fils4 />
        <fils1 />
        <fils2 />
        <repeted />
        <fils3 />
        <fils6 />
        <fils5 />
        <repeted />
        <fils7 />
      </element>
    </xml>
    si je définis mon XSD avec une séquence, je peux mettre un élément répété mais les élément son trié et mon deuxième xml est invalide
    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
    <xsd:schema xmlns="myNS" targetNamespace="myNS" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
      <xsd:complexType name="myElement">
        <xsd:sequence>
          <xsd:element minOccurs="0" name="fils1" type="xsd:string" />
          <xsd:element minOccurs="0" name="fils2" type="xsd:string" />
          <xsd:element minOccurs="0" name="fils3" type="xsd:string" />
          <xsd:element minOccurs="0" name="fils4" type="xsd:string" />
          <xsd:element minOccurs="0" name="fils5" type="xsd:string" />
          <xsd:element minOccurs="0" name="fils6" type="xsd:string" />
          <xsd:element minOccurs="0" name="fils7" type="xsd:string" />
          <xsd:element minOccurs="0" maxOccurs="unbounded" name="repeted" type="xsd:string" />
        </xsd:sequence>
      </xsd:complexType>
      <xsd:element name="element" type="myElement" />
    </xsd:schema>
    Si je mets all mes élément ne sont pas triés mais je ne peux pas répéter d'éléments et c'est alors les deux qui sont invalide
    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
    <xsd:schema xmlns="myNS" targetNamespace="myNS" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
      <xsd:complexType name="myElement">
        <xsd:all>
          <xsd:element minOccurs="0" name="fils1" type="xsd:string" />
          <xsd:element minOccurs="0" name="fils2" type="xsd:string" />
          <xsd:element minOccurs="0" name="fils3" type="xsd:string" />
          <xsd:element minOccurs="0" name="fils4" type="xsd:string" />
          <xsd:element minOccurs="0" name="fils5" type="xsd:string" />
          <xsd:element minOccurs="0" name="fils6" type="xsd:string" />
          <xsd:element minOccurs="0" name="fils7" type="xsd:string" />
          <xsd:element minOccurs="0" name="repeted" type="xsd:string" />
        </xsd:all>
      </xsd:complexType>
      <xsd:element name="element" type="myElement" />
    </xsd:schema>
    de plus mes émetteurs ont la fâcheuse tendance à ajouter des attributs ou des éléments non prévus.

    du coup j'escomptais ajouter un attribut any pour accepter n'importe quoi d'autre. or si je mets any le schéma devient ambigu et invalide
    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="windows-1250"?>
    <xml>
      <element>
        <fils4 />
        <fils1 />
        <fils2 />
        <repeted />
        <fils3 />
        <fils6 />
        <fils5 />
        <undeclaredelement />
        <repeted />
        <fils7 />
      </element>
    </xml>
    Je suis preneur de toute piste permettant de répondre à ce besoin
    soit donc un élément avec 7 fils présent une seule fois dans le désordre 1 fils répétable et acceptant l'ajout de fils inconnus.

    A+JYT

  2. #2
    Membre actif Avatar de Mamypirate
    Homme Profil pro
    Samouraï
    Inscrit en
    Mai 2011
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Samouraï
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2011
    Messages : 108
    Points : 211
    Points
    211
    Par défaut
    Je ne vois pas comment tu pourrais t'en sortir sans rendre le schema (très/trop) permissif.

    J'ai rencontré le même problème en me livrant à un exercice similaire. Le XSD final était tellement permissif qu'il en perdait sa fonction et son utilité.

    Le problème n'est pas pris dans le bon sens : le XSD devrait évidemment être défini avant les fichiers XML ... L'opération inverse n'a pas vraiment de sens. Après je suppose que tu en as bien conscience et que tu n'as pas le choix .

    Tu peux essayer cet outil, Trang, qui propose de générer un XSD à partir de plusieurs fichiers XML. Il t'aidera peut être à résoudre ton casse-tête !

    Bon courage.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    try {
    findSignature();
    } catch(InspirationNotFoundException e) {
    e.printStackTrace();
    }

  3. #3
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    Merci
    Je crains de devoir en passer par un truc totalement permissif

    afin que mon collecteur accepte n'importe quoi dans n'importe quel ordre.
    de mettre derrière une transformation xslt vers un format plus rigide
    et de gérer les rejets après cette transformation.

    genre séquence de any avec anyattribute
    une transfo qui copie /fils1 ... /fils7 etc. dans la structure attendue et qui ignore le reste
    ensuite je valide avec le shemas rigide au cas ou des champs ne serait pas remplis ou absent après la transformation
    je rejette le message s'il y a un pb
    je l'accepte sinon et je passe à la suite.

    Je n'ai pour l'instant pas trouvé mieux. mais ça oblige à une transformation avant validation.

    A+JYT

  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 sekaijin Voir le message
    Je n'ai pour l'instant pas trouvé mieux. mais ça oblige à une transformation avant validation.
    Valider par le code métier, peut-être ? De toute façon il y a bien une logique métier à un moment ou à un autre, et ça me semble plus sûr et bien plus simple.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. Répétition de données identiques...
    Par Regis.C dans le forum XML/XSL et SOAP
    Réponses: 6
    Dernier message: 15/04/2004, 21h46
  2. Stopper la répétition du clavier
    Par Chris89 dans le forum Assembleur
    Réponses: 6
    Dernier message: 17/10/2003, 20h53
  3. bouttons à répétition
    Par shumy dans le forum C++Builder
    Réponses: 3
    Dernier message: 26/10/2002, 18h16
  4. utilisation du meta type ANY
    Par Anonymous dans le forum CORBA
    Réponses: 1
    Dernier message: 15/04/2002, 12h36

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