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 :

[Debutant] pbl de validation d'un élément xs:unique


Sujet :

Valider XML

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2005
    Messages : 2
    Par défaut [Debutant] pbl de validation d'un élément xs:unique
    Bonjour à tous,

    Je débute en xml et j'ai un problème pour valider une contrainte d'unicité.

    Voici mon schéma "test.xsd" (très simplifié, mais autonome). La racine est un élément "Syntax" qui contient des "Command" (ici limitées à un "Code" et un "Verb"). Je désire assurer que le "Code" soit unique.
    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
    <?xml version="1.0" encoding="utf-8" ?>
    <xs:schema targetNamespace="http://www.lorsim.be/lscli" elementFormDefault="qualified" xmlns="http://www.lorsim.be/lscli" xmlns:lscli="http://www.lorsim.be/lscli" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
     
    <xs:complexType name="Command">
      <xs:sequence>
        <xs:element name="Code" type="xs:string" />
        <xs:element name="Verb" type="xs:string" />
      </xs:sequence>
    </xs:complexType>
     
    <xs:element name="Syntax">
      <xs:complexType>
        <xs:sequence>
          <xs:element name="Name" type="xs:string" />
          <xs:element name="Command" type="Command" minOccurs="0" maxOccurs="unbounded" />
        </xs:sequence>
      </xs:complexType>
      <xs:unique name="UniqueCommandCode">
        <xs:selector xpath="Command" />
        <xs:field xpath="Code" />
      </xs:unique>
    </xs:element>
     
    </xs:schema>
    Et voici un exemple "test.xml", volontairement erroné. La dernière commande a le même "Code" que la première (et le même "Verb" que la seconde, d'ailleurs).
    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
    <?xml version="1.0" encoding="utf-8" ?>
    <Syntax xmlns="http://www.lorsim.be/lscli">
      <Name>ms1</Name>
        <Command>
          <Code>HELP</Code>
          <Verb>Aide</Verb>
        </Command>
        <Command>
          <Code>QUIT</Code>
          <Verb>Quitter</Verb>
        </Command>
        <Command>
          <Code>HELP</Code>
          <Verb>Quitter</Verb>
        </Command>
    </Syntax>
    Si j'essaye de valider tout cela avec le validateur http://apps.gotdotnet.com/xmltools/xsdvalidator/, il me dit que tout est bon. J'ai essayé avec des tas d'xpath différents, mais sans réussir à obtenir la détection de l'erreur de non-unicité du "Code".
    Dans la foulée, j'ai essayé de faire mon propre validateur avec msxml en local sur mon pc (juste pour voir) . En gros, j'utilise le même formulaire qu'eux, tandis que mon bouton "valider" appelle un JavaScript qui fait fondamentalement ceci (XmlFile étant une variable dans laquelle j'ai récupéré le chemin vers "test.xml") :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var xmlDoc = new ActiveXObject("Microsoft.XMLDOM")
    xmlDoc.async="false"
    xmlDoc.load(XmlFile)
    if ( xmlDoc.parseError.errorCode != 0 )
      ...
    A ce stade, ça ne marche pas mieux, mais il est vrai que je n'ai pas trouvé comment lui indiquer où se trouve le fichier "test.xsd" correspondant.

    Voici donc les deux questions que je pose :
    1. Est-ce que c'est leur validateur qui ne marche pas (j'en doute) ou alors qu'est-ce que je loupe ?
    2. Comment faire pour que mon objet xmlDoc utilise le schéma "test.xsd" pour valider "test.xml" ? J'ai bien quelques éléments de réponse ailleurs sur ce site (http://www.developpez.net/forums/vie...140877#2140877) sauf qu'on y utilise un objet DocumentBuilderFactory en Java, alors que j'aurai voulu continuer avec le parseur msxml et en javascript. Est-ce possible ?

    Pardon d'avoir été aussi long, j'essayerai de faire mieux la prochaine fois !!!
    Et merci d'avance.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 23
    Par défaut
    les chemins XPath exprimés dans une contrainte unique doivent être qualifiés (avec un namespace).

    Essaie comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <xs:unique name="UniqueCommandCode">
        <xs:selector xpath="lscli:Command" />
        <xs:field xpath="lscli:Code" />
    </xs:unique>
    Note que tous les valideurs (validateurs?) ne font pas forcément de vérification sur la contrainte d'unicité. Xerces, par exemple, ne le fait pas par défaut (propriété http://apache.org/xml/features/validation/schema-full-checking à activer).

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2005
    Messages : 2
    Par défaut
    Merci krappa,

    Ca marche en effet, à ma grande surprise parce qu'il me semble que j'avais essayé cela aussi, sans succès. Mais je pense que j'avais qualifié le selector et pas le field... En tous cas, maintenant ça marche.

    Bonne semaine à tous

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

Discussions similaires

  1. validation d'un élément d'une liste box
    Par piotrr dans le forum Windows Forms
    Réponses: 5
    Dernier message: 19/09/2007, 23h42
  2. [XSD][Debutant]Contenu variable à valider
    Par Aymerik dans le forum Valider
    Réponses: 2
    Dernier message: 09/11/2006, 10h52
  3. [debutant] erreur de validation DTD/schema
    Par loic_86 dans le forum Valider
    Réponses: 1
    Dernier message: 13/01/2006, 22h04
  4. Réponses: 15
    Dernier message: 21/06/2004, 16h52
  5. [debutant] PBL variable resultat & sql dynamic
    Par DaxTaz dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 16/06/2004, 09h44

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