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). |
Partager