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 :

[SWI-Prolog] html+prolog+base de données


Sujet :

Prolog

  1. #1
    Membre du Club
    Inscrit en
    Janvier 2009
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 86
    Points : 46
    Points
    46
    Par défaut [SWI-Prolog] html+prolog+base de données
    salut,


    depuis quelques temps je me demande jusqu'où peut aller swi-prolog point de vue compatibilité avec les autres langages. Y a-t-il une possibilité de travailler avec Html et un SGBD comme est le cas pour PHP ou JSP... c'est-à-dire comme un langage de traitement ?

    si oui je veux bien un exemple



  2. #2
    Alp
    Alp est déconnecté
    Expert éminent sénior

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Points : 11 860
    Points
    11 860
    Par défaut
    Salut,

    Je te conseille de te renseigner sur les "Prolog Server Pages" (PSP).
    Ca donne par exemple ça : http://people.brandeis.edu/~btripp/p...ht/flight.html

    Avec ce code :
    http://people.brandeis.edu/~btripp/p.../flight.pl.txt
    http://people.brandeis.edu/~btripp/p...flight.psp.txt

  3. #3
    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 y a aussi une librairie web SWI-Prolog
    Un exemple de mini serveur de calcul en SWI-Prolo :
    <Program files>\pl\doc\packages\examples\http\calc.pl
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  4. #4
    Membre du Club
    Inscrit en
    Janvier 2009
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 86
    Points : 46
    Points
    46
    Par défaut html+prolog+...
    merci pour votre correspondance, cependant j'ai pas bien compri ce qu'il doit donner en execution.Et est ce qu'on a besoin d'un apache web server ? et si oui, est ce comment doit on le configurer pour qu'il travaille avec swi prolog?
    merci

  5. #5
    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 n'est pas nécessaire d'avoir un serveur apache, regarde l'exemple de calc.pl cité dans mon précédent post.
    C'est vrai que c'est un peu frustre, mais c'est une base de départ.
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  6. #6
    Membre du Club
    Inscrit en
    Janvier 2009
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 86
    Points : 46
    Points
    46
    Par défaut html+prolog+...
    je crois que j'ai pa compri l'exemple de calc.pl en plus, ce que je voulais c'est que l'affichage soit ds une page html et prolog s'execute en arriere, du genre des pages html comme interface. j'ai cherché ds le sens de prolog server pages mais il y a pas assez de doc et le seul pdf que j'ai trouvé dit que l'interaction entre prolog et les pages html se fait grace à un server apache...

  7. #7
    Membre du Club
    Inscrit en
    Janvier 2009
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 86
    Points : 46
    Points
    46
    Par défaut demande d'eclaircissement
    salut j'ai essayé de voir un exemple plus clair pour me permettre de comprendre au moins le processus... et voila un exemple que j'ai essayé d'executer mais sans resultat a part l'affichage de la page html sans effectuer le traitement demandé (ici la reponse à la question saisie 'query' ).

    le code fichier family.pl
    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
    :- use_module(library('http/thread_httpd')).
     
    :- use_module(library('http/html_write')).
     
    :- use_module(library('http/http_session')).
     
    :- use_module(library('http/http_error')).
     
     
     
     
    sibling(X,Y) :- parent(Z,X), parent(Z,Y).
    parent(X,Y) :- father(X,Y).
    parent(X,Y) :- mother(X,Y).
    mother(trude, sally).
    father(tom, sally).
    father(tom, erica).
    father(mike, tom).
    female(trude).
    male(tom).
    male(mike).
     
     
    % Checks so that the user doesn't try and do things he or she shouldn't
    check(sibling(_,_)).
    check(parent(_,_)).
    check(mother(_,_)).
    check(father(_,_)).
    check(male(_)).
    check(female(_)).
    check((X,Y)) :- check(X), check(Y).
    check((X;Y)) :- check(X), check(Y).
    check('!').
     
     
    go(Get) :-
    	% Get the query from the GET request
    	member(q=Query,Get),
    	% Convert to a term
    	catch(atom_to_term(Query, Term, Bindings),_,fail),
    	nonvar(Term),
    	% Check user has supplied a valid query
    	check(Term),
    	!,
    	% Find all solutions
    	forall(Term, (bind(Bindings), write(Term), nl)),
    	!.
     
    % This binds a Variable=Name list so that unbound variables are bound to their Name
    bind([]).
     
    bind([A=A|T]) :-
    	!,
    	bind(T).
     
    bind([_|T]) :-
    	bind(T).

    et le code ds la page html est ceci:
    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
    <html>
    <head>
         <title>PSP Demo</title>
    </head>
    <body>
     
    <a href="template.prolog?t=psp#psp">Back</a><br>
    <a href="c:\family_tree\family.html">View Source</a><br><br>
     
    <!-- Just show the database, plain old text -->
    Database:
    <pre>
    sibling(X,Y) :- parent(Z,X), parent(Z,Y).
    father(X,Y) :- parent(X,Y), male(X).
    mother(X,Y) :- parent(X,Y), female(X).
    parent(X,Y) :- father(X,Y).
    parent(X,Y) :- mother(X,Y).
    mother(trude, sally).
    father(tom, sally).
    father(tom, erica).
    father(mike, tom).
    female(trude).
    male(tom).
    male(mike).
    </pre>
     
    <!-- Work out what the query was -->
    <?, (member(q=Query,Get);Query='No Query Supplied') ,?>
     
    <!-- Show the query -->
    Query:
    <pre>
    <?= Query ?>
    </pre>
     
    <!-- Show the solutions -->
    Solutions:
    <pre>
    <?, once(
                 go(Get)
             ;
                 ?>Error: Invalid Term (The query must be a valid prolog query)<?
        )
      ,?></pre>
     
    <!-- And have an input box for the next query -->
    <form method="GET" action="c:\family_tree\family.pl">
    New Query: <input type="text" name="q"><br>
    <input type="submit">
    </form>
    Sample Queries:
    <pre>
    male(X).
    sibling(X,Y).
    father(X,sally).
    sibling(sally,X).
    parent(X,Y),parent(Y,Z).
    </pre>
    </body>
    </html>

  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
    J'ai un peu regardé ce que tu voulais et j'ai adapté l'exemple 'calc.pl' fourni dans la doc SWI-Prolog

    C'est une ébauche de début de création de serveur Prolog, mais ça marche quand même !
    (testé sous Vista avec IE7, et Firefox 3.0)

    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
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    :- use_module(library('http/thread_httpd')).
    :- use_module(library('http/html_write')).
    :- use_module(library('http/http_session')).
    :- use_module(library('http/http_error')).
     
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    %% Lancement du serveur
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    server :-
    	server(3000, []),
    	write(user_output, 
    		'lancez votre browser à l\'adresse http://localhost:3000/.'),
    	nl(user_output).
     
    server(Port, Options) :-
    	http_server(reply,
    		    [ port(Port),
    		      timeout(20)
    		    | Options
    		    ]).
     
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % etude de la requete client
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    reply(Request) :-
    	memberchk(path(Path), Request),
    	reply(Path, Request).
     
    reply('/essai', Request) :-
    	memberchk(search(Search), Request),
    	write(user_output,Search), nl(user_output),	
    	memberchk(foncteur=F, Search),
    	memberchk(names=N, Search),
     
    	% debug sur la console du serveur
    	write(user_output,F), nl(user_output),
    	write(user_output,N), nl(user_output),
     
    	% création du prédicat
    	Q =.. [F, N, X],
     
    	% une petite gestion d'erreur
    	(   call(Q) ->
    	      (	 write(user_output,X), nl(user_output),
    	         sformat(Str, '~w(~w, ~w)', [F,N,X]));
    	      sformat(Str, 'Erreur : ~w échoue', [Q])),
     
    	write(user_output, Str), nl(user_output),
    	page(Str).
     
     
    reply(/, _Request) :-
    	page('Bonjour, interrogez maintenant la base de données').
     
    % la sélection du prédicat
    foncteur -->
    	html(select(name(foncteur),
    		    [ option([selected], father),
    		      option([], mother),
    		      option([], parent),
    		      option([], sibling)
    		    ])).
     
    % la sélection du premier argument
    names -->
    	html(select(name(names),
    		    [ option([selected], trude),
    		      option([], tom),
    		      option([], mike),
    		      option([], sally),
    		      option([], erika)
    		    ])).
     
    % création de la page
    page(Message) :-
    	reply_page('Session HTTP Prolog en ligne !',
    		   [ h2('Simple interrogation  de bdd en Prolog'),
    		     h3(Message),
    		     form([ action('/essai'),
    			    method('GET')
    			  ],
    			  table([align(center), border(1)],
    				[ tr(td('Tapez votre requete')),
    				  tr(td([ \foncteur,
    					  \names,
    					  input([ type(submit),
    						  value('Envoi !')
    						])
    					]))
    				]))
    		   ]).
     
    % envoi de la page
    reply_page(Title, Content) :-
    	phrase(page(title(Title), Content), HTML),
    	format('Content-type: text/html~n~n'),
    	print_html(HTML).
     
     
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    %% la base de données
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     
    sibling(X,Y) :- parent(Z,X), parent(Z,Y).
    parent(X,Y) :- father(X,Y).
    parent(X,Y) :- mother(X,Y).
    mother(trude, sally).
    father(tom, sally).
    father(tom, erica).
    father(mike, tom).
    female(trude).
    male(tom).
    male(mike).
    Réponse en cas de réussite




    Réponse en cas d'échec :

    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  9. #9
    Membre du Club
    Inscrit en
    Janvier 2009
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 86
    Points : 46
    Points
    46
    Par défaut PSP
    merci TRAP D. votre exemple m'a permis de voir plus clair dans ce sens. En plus j'ai pu installé PSP et cela m'a été plus pratique dans mon travail...Merci

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

Discussions similaires

  1. Prolog et base de données ACCESS
    Par LovaMickael dans le forum Prolog
    Réponses: 29
    Dernier message: 02/12/2014, 07h06
  2. Insérer un tableau HTML en base de données
    Par Blo0d4x3 dans le forum Langage
    Réponses: 5
    Dernier message: 31/10/2010, 19h25
  3. [php5]tableau HTML + enregistrement base de données
    Par fanette dans le forum Langage
    Réponses: 20
    Dernier message: 06/06/2007, 16h12
  4. [Conception] HTML et Bases de données
    Par Jukien dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 08/04/2006, 14h52
  5. Réponses: 9
    Dernier message: 20/01/2006, 12h04

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