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

Oracle Discussion :

[XML] Validation d'un document XML par un schéma (Oracle 9i)


Sujet :

Oracle

  1. #1
    Membre à l'essai
    Inscrit en
    Septembre 2003
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 30
    Points : 22
    Points
    22
    Par défaut [XML] Validation d'un document XML par un schéma (Oracle 9i)
    Bonjour !

    Voici ma situation:

    J'ai une table qui contient une colonne de type XMLType, me permettant de stocker un document XML.
    J'ai une autre table qui contient également une colonne de type XMLType, me permettant de stocker un schéma XSD.
    Je récupère un document dans une variable de type XMLType et le schéma dans une autre variable de type XMLType.

    Mon problème:
    Comment vérifier si mon document est conforme au schéma?

    j'ai trouvé les méthodes XMLIsValid() et isSchemaValidated() mais elles utilisent les URLs des schéma et pas directement un XMLType.

    Existe-t-il une solution?

    Merci

  2. #2
    Membre averti
    Inscrit en
    Novembre 2002
    Messages
    549
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 549
    Points : 436
    Points
    436
    Par défaut
    Salut à toi,

    J'ai travaillé sur le sujet, il y a plus d'1 an. Voici un script que j'ai réalisé de stockage d'un document XML de façon structurée avec XMLtype et XMLschema

    Attention, ce script fonctionne sous Oracle 9i.

    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
     
     
    --Création d'un répertoire du référentiel
    declare
    retour boolean;
    begin
    retour:=DBMS_XDB.CreateFolder('/public/cnam');
    retour:=DBMS_XDB.CreateResource('/public/cnam/commande.xml','<Nom>commande</Nom>');
    end;
     
    call dbms_xdb.Link('public/cnam/commande.xml','public/cnam','lien_commande.xml');
     
    --
    declare
    document varchar2(5000):= '<?xml version="1.0"?>  
    <schema 
    targetNamespace="http://www.cnam.com/TypeCommande.xsd" 
    xmlns:cmd="http://www.cnam.com/TypeCommande.xsd"
    xmlns="http://www.w3.org/2001/XMLSchema">
     
    <complexType name="TypeCommande">
    <sequence>
    	<element name="Numero" type="decimal"/>
    	<element name="Societe">
    	<simpleType>
    		<restriction base="string">
    		<maxLength value="100"/>
    		</restriction>
    	</simpleType>
    	</element>
    	<element name="LigneCommande" maxOccurs="1000">
    		<complexType>
    		<sequence>
    			<element name="Produit">
    			<simpleType>
    				<restriction base="string">
    				<maxLength value="1000"/>
    				</restriction>
    			</simpleType>
    			</element>
    			<element name="Prix" type="float"/>
    		</sequence>
    		</complexType>
    	</element>
    </sequence>
    </complexType>
    <element name="Commande" type="cmd:TypeCommande"/>
    </schema>';
    begin
    dbms_xmlschema.registerSchema('http://www.cnam.com/TypeCommande.xsd',document);
    end;
     
    --Création d'une table basé sur le schéma TypeCommande.xsd
    create table commande(
    id number,
    contenu XMLTYPE)
    xmltype column contenu
    XMLSCHEMA "http://www.cnam.com/TypeCommande.xsd" element "Commande";
     
    --insertion dans la table commande
    INSERT INTO COMMANDE VALUES(1,
    XMLTYPE('<Commande xmlns="http://www.cnam.com/TypeCommande.xsd"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.cnam.com/TypeCommande.xsd
    http://www.cnam.com/TypeCommande.xsd">
    	<Numero>1001</Numero>
    		<Societe>Oracle</Societe>
    			<LigneCommande>
    				<Produit>Livre_Tuning</Produit>
    				<Prix>25</Prix>
    			</LigneCommande>
    			<LigneCommande>
    				<Produit>Metalink_Support</Produit>
    				<Prix>1254</Prix>
    			</LigneCommande>
          </Commande>'));
    Voilà, j'espère que ces exemples vont te servir. Sinon, tu trouveras pas mal de docs sur XDB

    bon courage
    @
    PpPool

  3. #3
    Membre à l'essai
    Inscrit en
    Septembre 2003
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 30
    Points : 22
    Points
    22
    Par défaut
    Merci pour ta réponse, ça a l'air de correspondre à ce que je recherche, mais avec des petites modifications.

    Mais, à quoi sert la création d'un répertoire du référentiel ??
    Je vois pas trop comment ça marche. PEux-tu m'éclairer?

    Merci

  4. #4
    Membre averti
    Inscrit en
    Novembre 2002
    Messages
    549
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 549
    Points : 436
    Points
    436
    Par défaut
    Citation Envoyé par dam21
    Mais, à quoi sert la création d'un répertoire du référentiel ??
    Je vois pas trop comment ça marche. PEux-tu m'éclairer?
    Merci
    De mémoire, je te le répéte, je n'ai pas travaillé sur le sujet depuis plus d'1 an.
    La création de répertoire permet au référentiel XDB de retrouver les ressources XML. Tu peux ainsi gérer les privilèges d'accés à tes différents directory. Par défaut, tu as le répertoire PUBLIC, mais tu peux en créer autant que tu veux par schéma.
    Tu as la possibilité également d'accéder par HTTP à tes différents schémas XML
    Va voir du coté d'OEM, déroule l'arborescence Base de données XML/Ressources, tu verras mieux l'objectif.

    Voilà, sinon documente toi un peu avant sur le sujet, car ce n'est pas facile. Il faut savoir aussi que j'ai remarqué des 'comportements' bizarres d'oracle, qui notamment me refuser certains documents XML comme étant non conforme, alors que le schéma était pour moi correct !

    Jeunesse de la technologie ?????????

    @
    PpPool

  5. #5
    Membre à l'essai
    Inscrit en
    Septembre 2003
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 30
    Points : 22
    Points
    22
    Par défaut
    Dans le Schema Manager, j'ai rien qui ressemble à XML/Ressources. Est-ce que je regarde au bon endroit? Sinon, où puis-je trouver de la doc?


    Merci

  6. #6
    Membre à l'essai
    Inscrit en
    Septembre 2003
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 30
    Points : 22
    Points
    22
    Par défaut
    Re_bonjour,

    J'aurais voulu savoir si l'utilisation des schémas XML était possible sans utiliser XDB. De plus, je voudrais éviter d'enregistrer mon schéma comme une ressource.

    Je voudrais tout simplement utiliser un schéma comme étant de type XMLType ou CLOB.


    Merci

  7. #7
    Membre à l'essai
    Inscrit en
    Septembre 2003
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 30
    Points : 22
    Points
    22
    Par défaut
    Apparement, il n'y a pas de spécialiste dans ce domaine. Je considère donc que c'est impossible.

    Si quelqu'un a déjà entendu parler d'une solution , merci de me pévenir même si vous ne la connaissez pas. 9a me permettrait de savoir si je dois continuer mes recherches.

    Damien

  8. #8
    Membre à l'essai
    Inscrit en
    Septembre 2003
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 30
    Points : 22
    Points
    22
    Par défaut
    Apparement, il n'y a pas de spécialiste dans ce domaine. Je considère donc que c'est impossible.

    Si quelqu'un a déjà entendu parler d'une solution , merci de me pévenir même si vous ne la connaissez pas. 9a me permettrait de savoir si je dois continuer mes recherches.

    Merci

  9. #9
    Membre averti
    Inscrit en
    Novembre 2002
    Messages
    549
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 549
    Points : 436
    Points
    436
    Par défaut
    Bonjour à toi,

    tu veux seulement stocker des fichiers XSD ? c'est çà ? mais quel est l'intéret ?

    Le fait que tu les enregistres dans un référentiel comme XDB est de pouvoir vérifier la conformité de tes fichiers XML au moment de l'insertion dans la base. c'est qd même l'objectif d'une base de données XML.

    Je ne suis pas du tout spécialiste. Je peux par contre te recommander de potasser un bouquin : Oracle 9i sous Windows de G.Briard Chez Eyrolles => tu as un bon résumé des différentes solutions de stockage XML (structuré ou non, XMLType versus colonne de type CLOB et INDEX Oracle Text, interrogations XPath, XQuery, référentiel XDB, etc...). le sujet est vaste.

    exprime clairement ton besoin sur papier, et détermine si Oracle peut être une solution pour toi (n'oublie pas que XML est une technologie récente chez Oracle, tout n'est peut être pas encore au point).

    regardes aussi du coté de la 10g, peut être qu'il y a eut des maj du noyau XML (j'ai pas étudié le sujet);

    bon courage

    @
    PpPool

  10. #10
    Membre à l'essai
    Inscrit en
    Septembre 2003
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 30
    Points : 22
    Points
    22
    Par défaut
    Merci pour la référence du livre.

    Bien sûr, je veux vérifier la conformite de mon doc XML (c'est dans le sujet). Mon problème, c'est que je voulais savoir si c'était possible d'utiliser un XSD sans l'enregistrer dans un référentiel. Je voudrais l'enregister uniquement comme une donnée de type XMLType et c'est tout.
    Et ensuite pouvoir l'utiliser sans passer par un référentiel.

    Sinon, je suis obligé d'utiliser Oracle 9i et en plus sans le schéma XDB d'installé, donc je crois que c'est mission impossible

  11. #11
    Membre averti
    Inscrit en
    Novembre 2002
    Messages
    549
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 549
    Points : 436
    Points
    436
    Par défaut
    Citation Envoyé par dam21
    Merci pour la référence du livre.
    pas de problème

    Citation Envoyé par dam21
    Bien sûr, je veux vérifier la conformite de mon doc XML (c'est dans le sujet). Mon problème, c'est que je voulais savoir si c'était possible d'utiliser un XSD sans l'enregistrer dans un référentiel. Je voudrais l'enregister uniquement comme une donnée de type XMLType et c'est tout.
    Et ensuite pouvoir l'utiliser sans passer par un référentiel.
    çà ne marchera pas, c'est le seul moyen de vérifier par Oracle la conformité de ton fichier xml à tes spécifications XSD
    autre solution : vérifier la conformité avant l'insertion dans la base (par application), donc plus besoin de stocker ton schéma XSD dans le référentiel

    Citation Envoyé par dam21
    Sinon, je suis obligé d'utiliser Oracle 9i et en plus sans le schéma XDB d'installé, donc je crois que c'est mission impossible
    tu peux l'installer à tout moment il me semble sans problème. as tu été voir sur le site de documentation d'Oracle ?

    @
    PpPool

  12. #12
    Membre à l'essai
    Inscrit en
    Septembre 2003
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 30
    Points : 22
    Points
    22
    Par défaut
    Merci pour le complément d'info.

    En fait, l'installation du schéma XDB ne dépend pas de moi. En plus, il y a 300 sites concernés (donc tu imagines le boulot).

    La solution qui consiste à tester la conformité dans l'application est une bonne idée mais je peux pas vraiment l'utiliser. Le doc XML est issu d'une transformation XSL qui se fait en PL/SQL sous Oracle. C'est pas grave, on va supposer que le doc XML est correct puisque finalement, il est généré à partir de ma propre transformation XSL. C'était pour ajouter un contrôle supplémentaire.

  13. #13
    Membre averti
    Inscrit en
    Novembre 2002
    Messages
    549
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 549
    Points : 436
    Points
    436
    Par défaut
    en effet vu le contexte, tu n'as plus grand choix, c'est au niveau de tes procs pl/sql qu'il faut verrouiller au maximum les choses

    bon courage
    PpPool

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

Discussions similaires

  1. [XSD][Xerces] Validation d'un document XML
    Par cash3000 dans le forum Valider
    Réponses: 6
    Dernier message: 15/06/2006, 18h35
  2. validation d'un document XML par rapport à une DTD
    Par sebastien2222 dans le forum Valider
    Réponses: 1
    Dernier message: 03/03/2006, 15h41
  3. [XML] Méthode de validation d'un document xml en php
    Par samouille666 dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 14/02/2006, 21h56
  4. Validation d'un document XML avant sa création??
    Par mardona dans le forum Format d'échange (XML, JSON...)
    Réponses: 5
    Dernier message: 27/01/2006, 15h33
  5. Validation d'un document XML / DTD
    Par chris_tal1 dans le forum Valider
    Réponses: 2
    Dernier message: 16/07/2004, 15h19

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