1. #1
    Rédacteur
    Avatar de SQLpro
    Homme Profil pro
    Expert SGBDR & SQL, spécialiste Microsoft SQL Server
    Inscrit en
    mai 2002
    Messages
    17 015
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert SGBDR & SQL, spécialiste Microsoft SQL Server
    Secteur : Conseil

    Informations forums :
    Inscription : mai 2002
    Messages : 17 015
    Points : 39 508
    Points
    39 508
    Billets dans le blog
    1

    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...
    * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *

  2. #2
    Membre chevronné
    Inscrit en
    octobre 2011
    Messages
    1 043
    Détails du profil
    Informations forums :
    Inscription : octobre 2011
    Messages : 1 043
    Points : 1 813
    Points
    1 813

    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 SGBDR & SQL, spécialiste Microsoft SQL Server
    Inscrit en
    mai 2002
    Messages
    17 015
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert SGBDR & SQL, spécialiste Microsoft SQL Server
    Secteur : Conseil

    Informations forums :
    Inscription : mai 2002
    Messages : 17 015
    Points : 39 508
    Points
    39 508
    Billets dans le blog
    1

    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...
    * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *

  4. #4
    Membre chevronné
    Inscrit en
    octobre 2011
    Messages
    1 043
    Détails du profil
    Informations forums :
    Inscription : octobre 2011
    Messages : 1 043
    Points : 1 813
    Points
    1 813

    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 chevronné
    Inscrit en
    octobre 2011
    Messages
    1 043
    Détails du profil
    Informations forums :
    Inscription : octobre 2011
    Messages : 1 043
    Points : 1 813
    Points
    1 813

    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 SGBDR & SQL, spécialiste Microsoft SQL Server
    Inscrit en
    mai 2002
    Messages
    17 015
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert SGBDR & SQL, spécialiste Microsoft SQL Server
    Secteur : Conseil

    Informations forums :
    Inscription : mai 2002
    Messages : 17 015
    Points : 39 508
    Points
    39 508
    Billets dans le blog
    1

    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...
    * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *

  7. #7
    Membre chevronné
    Inscrit en
    octobre 2011
    Messages
    1 043
    Détails du profil
    Informations forums :
    Inscription : octobre 2011
    Messages : 1 043
    Points : 1 813
    Points
    1 813

    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 SGBDR & SQL, spécialiste Microsoft SQL Server
    Inscrit en
    mai 2002
    Messages
    17 015
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert SGBDR & SQL, spécialiste Microsoft SQL Server
    Secteur : Conseil

    Informations forums :
    Inscription : mai 2002
    Messages : 17 015
    Points : 39 508
    Points
    39 508
    Billets dans le blog
    1

    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...
    * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *

  9. #9
    Membre chevronné
    Inscrit en
    octobre 2011
    Messages
    1 043
    Détails du profil
    Informations forums :
    Inscription : octobre 2011
    Messages : 1 043
    Points : 1 813
    Points
    1 813

    Par défaut

    C'est ça que j'entends d'écrire - trop pressé !

  10. #10
    Membre chevronné
    Inscrit en
    octobre 2011
    Messages
    1 043
    Détails du profil
    Informations forums :
    Inscription : octobre 2011
    Messages : 1 043
    Points : 1 813
    Points
    1 813

    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 XML
    Réponses: 1
    Dernier message: 22/11/2006, 22h37
  2. [DOM] validation d'un XML par un schéma
    Par zevince dans le forum DOM
    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 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 XML
    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