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

Prolog Discussion :

Lecture et interprétation d'un champ XML/SGML vennant d'une base de données


Sujet :

Prolog

  1. #1
    Membre à l'essai
    Inscrit en
    Décembre 2010
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 30
    Points : 19
    Points
    19
    Par défaut Lecture et interprétation d'un champ XML/SGML vennant d'une base de données
    Bonjour à tous,

    dans le post http://www.developpez.net/forums/d12...arbres-n-aire/ nous voyons comment lire et modifier une structure XML/SGML lue depuis un fichier (encore merci pour le coup de main). Dans mon cas, la structure XML/SGML n'est pas lue depuis un fichier mais depuis un base de données comme suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    test2:-
        odbc_connect('MySQL_VULCAN',_,[user(root),password(''),alias(db),open(once)]).
        findall(L, odbc_query(db,"SELECT monChamp FROM MATABLE WHERE id=1",L),MyData),
    write(MyData),nl,
        odbc_disconnect(db).
    Avec ce code, on sait aller executer la requete SQL: SELECT monChamp FROM MATABLE WHERE id=1 sur une base de données (via odbc) et en afficher le resultat.

    Dans notre cas, le contenu de monChamp sera une structure XML/SGML, pour simplifier nous prendrons comme exemple la structure du post modification-darbres-n-aire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?sgml version="1.0" encoding="UTF-8" ?>
    <menagerie>
    	<animal type="chat" name="a1"></animal>
    	<animal type="chat" name="a2" ></animal>
    	<animal type="chat" name="a3"></animal>
    	<animal type="rat"  name="a4"></animal>
    	<animal type="chien"  name="a5"></animal>
    	<niche>
    		<animal type="chien"  name="a6"> </animal>
    		<animal type="chien"  name="a7"> </animal>
    	</niche>
    </menagerie>
    La question est donc: comment faire charger la structure de manière à transformer pour traiter les données issues de la base ?

    pour rappel, on avait:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    test :-
    	load_sgml_file('e:/in.xml', Txt),
    	Txt = [_,E],
    	insert(E,  E1),
    	write(E1).
    j'ai tenté de comrpendre le code source sgml.pl, mais je dois avouer rester sec.

    question subsidiaire il existe un pretty_print très sympatique pour les affichages XML/HTML qui ne semble plus fonctionner avec du SGML, y aurait-il un équivalent ?

    d'avance merci :O)

    Cdt,

    jfv.work

  2. #2
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    question subsidiaire il existe un pretty_print très sympatique pour les affichages XML/HTML qui ne semble plus fonctionner avec du SGML, y aurait-il un équivalent ?
    Ce n'est pas du tout un pretty_print, c'est que ce qui est récupéré en lecture html contient des retours chariot et autres caractères inutiles qui polluent l'information récupérées.

  3. #3
    Membre à l'essai
    Inscrit en
    Décembre 2010
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 30
    Points : 19
    Points
    19
    Par défaut
    pretty_print est le nom de la "fonction" pas le résultat effectivement

  4. #4
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    En ce qui concerne la lecture des données récupérées lors de la requête odbc, ion peut peut-être essayé en utilisant les stream eg :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    test2:-
        odbc_connect('MySQL_VULCAN',_,[user(root),password(''),alias(db),open(once)]).
        findall(L, odbc_query(db,"SELECT monChamp FROM MATABLE WHERE id=1",L),MyData),
        write(MyData),nl,
        load_sgml_file(stream(MyData), Txt),
        writeln(Txt),
        odbc_disconnect(db).
    C'est juste une suggestion, à tester, il se peut que ça ne marche pas du tout.

  5. #5
    Membre à l'essai
    Inscrit en
    Décembre 2010
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 30
    Points : 19
    Points
    19
    Par défaut
    Après un test: j'ai un message d'erreur:
    sqml_parse/2: stream `la structure sgml` does not exist.
    je suppose donc que la conversion de la chaîne lue dans la base en stream n'est pas effective

    cdt,

    jfv

  6. #6
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Est-il possible d'avoir le résultat de la requete odbc ?

  7. #7
    Membre à l'essai
    Inscrit en
    Décembre 2010
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 30
    Points : 19
    Points
    19
    Par défaut
    oui le résultat en question est:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?sgml version="1.0" encoding="UTF-8" ?>
    <menagerie>
    	<animal type="chat" name="a1"></animal>
    	<animal type="chat" name="a2" ></animal>
    	<animal type="chat" name="a3"></animal>
    	<animal type="rat"  name="a4"></animal>
    	<animal type="chien"  name="a5"></animal>
    	<niche>
    		<animal type="chien"  name="a6"> </animal>
    		<animal type="chien"  name="a7"> </animal>
    	</niche>
    </menagerie>

  8. #8
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Il est sous forme d'atome, de terme de liste ?

  9. #9
    Membre à l'essai
    Inscrit en
    Décembre 2010
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 30
    Points : 19
    Points
    19
    Par défaut
    ça répond positivement à un test atom(), donc je suppose que c'est un atome.

  10. #10
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Ceci fonctionne, il faut chercher de ce coté :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    test :-
    	SGML = '<?sgml version="1.0" encoding="UTF-8" ?>
    <menagerie>
    <animal type="chat" name="a1"></animal>
    <niche>
    <animal type="chien"  name="a6"> </animal>
    </niche>
    </menagerie>',
    	atom_chars(SGML, Str),
    	open_chars_stream(Str, Stream),
    	load_sgml_file(Stream, Txt),
    	Txt = [_,E],
    	insert(E,  E1),
    	print(E1).

  11. #11
    Membre à l'essai
    Inscrit en
    Décembre 2010
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 30
    Points : 19
    Points
    19
    Par défaut
    ça marche très bien, encore une fois merci beaucoup

    cdt,

    jfv.work

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

Discussions similaires

  1. Réponses: 19
    Dernier message: 27/10/2011, 14h01
  2. Réponses: 11
    Dernier message: 24/05/2011, 09h50
  3. Quand utiliser un fichier xml au lieu d'une base de données?
    Par ChriGoLioNaDor dans le forum Décisions SGBD
    Réponses: 4
    Dernier message: 27/04/2010, 14h22
  4. [XML] XML en natif dans une base de données relationnelle
    Par evlad dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 05/04/2007, 09h31
  5. Champs de type XML dans une base de données
    Par Flocodoupoil dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 07/07/2004, 18h57

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