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 :

Validation de schéma XML simple. . .


Sujet :

Valider XML

  1. #1
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 763
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 763
    Points : 52 554
    Points
    52 554
    Billets dans le blog
    5
    Par défaut Validation de schéma XML simple. . .
    Bonjour, je me prends la tête avec l'imbitable grammaire XSD sur un truc simple. J'ai besoin de doc XML de la sorte :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <notes> --> c'est la racine donc une seule occurrence et pas de données dedans.
       <note utilisateur="tartempion" horodatage="2017-01T01:20:33:44"> --> c'est un ensemble non limité de notes avec comme attribut un nom d'utilisateur et une date heure de postage
          bla bla bla --> le contenu de la note elle même
       </note>
       <note utilisateur="tduchemol" horodatage="2017-02-13T11:12:13"> 
          lkedzj pùzef EZAFR ùpoezafr  w!setj 
       </note>
    </notes>
    Voici le schéma que j'ai tenté :

    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
    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
      targetNamespace="http://XSpace.com/ODS" 
      xmlns="http://XSpace.com/ODS" 
      elementFormDefault="qualified">
     
     <xs:annotation>
      <xs:documentation xml:lang="en">
       Purchase order schema for Example.com.
       Copyright 2000 Example.com. All rights reserved.
      </xs:documentation>
     </xs:annotation>
     
     <xs:element name="notes" type="XMLnotes"/>
     
     <xs:complexType name="XMLnotes">
       <xs:sequence>
         <xs:element name="notes" minOccurs="0" maxOccurs="1" type="ALLnotes"/>
       </xs:sequence>
     </xs:complexType>
     
     <xs:complexType name="ALLnotes">
       <xs:sequence>
         <xs:element name="note" minOccurs="0" maxOccurs="unbounded" type="xs:string"/>
       </xs:sequence>
       <xs:attribute name = "horodatage" type = "xs:dateTime"/>
       <xs:attribute name = "utilisateur" type = "xs:string"/>
     </xs:complexType>
     
    </xs:schema>
    Sauf que ça marche pas.... Quand j'essaye de valider ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    '<notes>
       <note horodatage ="2016-01-01T11:21:33" utilisateur = "tartempion">
    bla bla bla
       </note>
    </notes>'
    Il me répond : Validation XML*: déclaration introuvable pour l'élément 'notes'. Emplacement*: /*:notes[1]

    Merci de me dire ce qui ne va pas !

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  2. #2
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    Si je ne me trompe pas, l'élément notes est du type ALLnotes et ça c'est fait. Le type complexe XMLnotes n'est pas nécessaire et peut se retirer.
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <xs:element name="notes" type="ALLnotes"/>
     
    <xs:complexType name="ALLnotes">
        <xs:sequence>
            <xs:element name="note" minOccurs="0" maxOccurs="unbounded" type="xs:string"/>
        </xs:sequence>
        <xs:attribute name = "horodatage" type = "xs:dateTime"/>
        <xs:attribute name = "utilisateur" type = "xs:string"/>
    </xs:complexType>

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 763
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 763
    Points : 52 554
    Points
    52 554
    Billets dans le blog
    5
    Par défaut
    ça marche pas mieux....

    Je te donne le code sous MS SQL Server complet :

    1) le schéma de validation
    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
    CREATE XML SCHEMA COLLECTION XSC_NOTE AS 
    N'<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
      targetNamespace="http://XSpace.com/ODS" 
      xmlns="http://XSpace.com/ODS" 
      elementFormDefault="qualified">
     
       <xs:element name="notes" type="ALLnotes"/>
     
       <xs:complexType name="ALLnotes">
           <xs:sequence>
               <xs:element name="note" minOccurs="0" maxOccurs="unbounded" type="xs:string"/>
           </xs:sequence>
           <xs:attribute name = "horodatage" type = "xs:dateTime"/>
           <xs:attribute name = "utilisateur" type = "xs:string"/>
       </xs:complexType>
     
    </xs:schema>';
    GO
    2) la table de test :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CREATE TABLE T_NOT (ID INT IDENTITY, NOTE XML (XSC_NOTE))
    GO
    3) une insertion
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    INSERT INTO T_NOT VALUES (
    N'<notes>
       <note horodatage ="2016-01-01T11:21:33" utilisateur = "tartempion">
    bla bla bla
       </note>
    </notes>');
    4) le message d'erreur
    Msg*6913, Niveau*16, État*1, Ligne*32
    Validation XML*: déclaration introuvable pour l'élément 'notes'. Emplacement*: /*:notes[1]


    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  4. #4
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    Avant que j'y regarde les infos supplémentaires, attention au attribut targetNamespace. J'ai pris comme une sample racourci dans le premier post. Je pense qu'il est sous-entendu que la racine notes soit qualifiée pour que le schéma soit pertinent?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <notes xmlns="http://XSpace.com/ODS">
    Ce n'est pas ça? Si non, on doit retirer les attributs targetNamespace et la declaration de namespace en défaut (xmlns="..."), et puis elementFormDefaut si on veut.

  5. #5
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    Le schéma comme tel, la partie 3) s'écrit comme ça dans le même sens mentionné dessus.
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    INSERT INTO T_NOT VALUES (
    N'<notes xmlns="http://XSpace.com/ODS">
       <note horodatage ="2016-01-01T11:21:33" utilisateur = "tartempion">
    bla bla bla
       </note>
    </notes>');

  6. #6
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 763
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 763
    Points : 52 554
    Points
    52 554
    Billets dans le blog
    5
    Par défaut
    On avance mais c'est pas encore ça :

    1) XML schema simplifié
    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
    CREATE XML SCHEMA COLLECTION XSC_NOTE AS 
    N'<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
      elementFormDefault="qualified">
     
       <xs:element name="notes" type="ALLnotes"/>
     
       <xs:complexType name="ALLnotes">
           <xs:sequence>
               <xs:element name="note" minOccurs="0" maxOccurs="unbounded" type="xs:string"/>
           </xs:sequence>
           <xs:attribute name = "horodatage" type = "xs:dateTime"/>
           <xs:attribute name = "utilisateur" type = "xs:string"/>
       </xs:complexType>
     
    </xs:schema>';
    GO
    2) table de destination
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CREATE TABLE T_NOT (ID INT IDENTITY, NOTE XML (XSC_NOTE))
    GO
    3) insertion
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    INSERT INTO T_NOT VALUES (
    N'<notes>
       <note horodatage ="2016-01-01T11:21:33" utilisateur = "tartempion">
    bla bla bla
       </note>
    </notes>');
    4) erreur sur attribut horodatage
    Validation XML*: l'attribut 'horodatage' n'est pas autorisé dans ce contexte. Emplacement*: /*:notes[1]/*:note[1]/@*:horodatage

    Bref, je patauge !

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  7. #7
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    C'est vrai et je m'excuse de n'avoir pas regarder plus soigneusement.
    Code xml : 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
    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
     
        <xs:element name="notes" type="ALLnotes"/>
     
        <xs:complexType name="ALLnotes">
           <xs:sequence>
               <xs:element name="note" minOccurs="0" maxOccurs="unbounded">
                   <xs:complexType>
                       <xs:simpleContent>
                           <xs:extension base="xs:string">
                               <xs:attribute name = "horodatage" type = "xs:dateTime"/>
                               <xs:attribute name = "utilisateur" type = "xs:string"/>
                           </xs:extension>
                       </xs:simpleContent>
                   </xs:simpleContent>
               </xs:complexType>
           </xs:sequence>
       </xs:complexType>
     
    </xs:schema>

  8. #8
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 763
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 763
    Points : 52 554
    Points
    52 554
    Billets dans le blog
    5
    Par défaut
    C'est pas grave, mais c'était encore faux.... mal réveillé ??? ;-)

    J'ai rectifié comme suit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
        <xs:complexType name="ALLnotes">
           <xs:sequence>
               <xs:element name="note" minOccurs="0" maxOccurs="unbounded">
                   <xs:complexType>
                       <xs:simpleContent>
                           <xs:extension base="xs:string">
                               <xs:attribute name = "horodatage" type = "xs:dateTime"/>
                               <xs:attribute name = "utilisateur" type = "xs:string"/>
                           </xs:extension>
                       </xs:simpleContent>
                   </xs:complexType>
              </xs:element>
           </xs:sequence>
       </xs:complexType>
    Tu avait mis 2 fois </xs:simpleContent> et oublié la fermeture de element... Au passage je connaissait pas simpleContent...

    Je vais voir ce que cela donne !

    Merci

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  9. #9
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    C'est ça que j'entends d'écrire - trop pressé !

  10. #10
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    Merci tardif à SQLpro de faire un listing complet bien corrigé et sans faute. Je peux donc être tranquille de laisser mon post inédité sans crainte de n'égarer personne. Merci encore !

Discussions similaires

  1. [JDOM] Validation avec un schéma XML
    Par tet.dum dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 22/11/2006, 22h37
  2. [DOM] validation d'un XML par un schéma
    Par zevince dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 12/06/2006, 16h01
  3. Réponses: 3
    Dernier message: 27/02/2006, 14h14
  4. [Xml/Xsd]valider son fichier Xml avec un schéma xsd
    Par ePoX dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 09/02/2006, 22h30
  5. [SAX] Valider un flux XML à partir d'un schéma
    Par spidetra dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 23/11/2005, 16h16

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