Chris@14: :- module(urispace,[init/0]). Chris@14: Chris@14: Chris@14: :- use_module(library('http/thread_httpd')). Chris@14: :- use_module(library('semweb/rdf_db')). Chris@14: :- use_module(log). Chris@14: :- use_module(config). Chris@14: :- use_module(mapping). Chris@14: Chris@14: server(Port, Options) :- Chris@14: http_server(reply,[ port(Port),timeout(20)| Options]). Chris@14: Chris@14: Chris@14: Chris@14: /** Chris@14: * Closes the servlet Chris@14: */ Chris@14: reply(Request) :- Chris@14: log:log(Request), Chris@14: member(path('/quit'), Request), !, Chris@14: format('Connection: close~n', []), Chris@14: format('Content-type: text/html~n~n', []), Chris@14: format('Bye Bye~n'). Chris@14: Chris@14: Chris@14: /** Chris@14: * Sends back 303 to RDF document describing the resource Chris@14: */ Chris@14: reply(Request) :- Chris@14: member(path(Path),Request), Chris@14: member(accept(AcceptHeader),Request), Chris@14: format(user_error,'Accept header: ~w ',[AcceptHeader]), Chris@14: %accept_rdf(AcceptHeader), Chris@14: concat_atom(PatternX,'/',Path), Chris@14: delete(PatternX,'',Pattern), Chris@14: mapping:see_other_rdf(requested_pattern(Pattern),redirect_pattern(RedirectP)), Chris@14: !, Chris@14: concat_atom(RedirectP,Redirect), Chris@14: log:log('Sending a 303 towards ~w',Redirect), Chris@14: throw(http_reply(see_other(Redirect),[])). Chris@14: Chris@14: accept_rdf('application/rdf+xml'). Chris@14: %accept_rdf('text/xml'). Chris@14: accept_rdf(AcceptHeader) :- Chris@14: sub_atom(AcceptHeader,_,_,_,'application/rdf+xml'). Chris@14: %accept_rdf(AcceptHeader) :- Chris@14: % sub_atom(AcceptHeader,_,_,_,'text/xml'). Chris@14: Chris@14: /** Chris@14: * Sends back towards the default representation of the resource Chris@14: * (usually html) Chris@14: */ Chris@14: reply(Request) :- Chris@14: member(path(Path),Request), Chris@14: concat_atom(PatternX,'/',Path), Chris@14: delete(PatternX,'',Pattern), Chris@14: mapping:see_other(requested_pattern(Pattern),redirect_pattern(RedirectP)), Chris@14: !, Chris@14: concat_atom(RedirectP,Redirect), Chris@14: log:log('Sending a 303 towards ~w',Redirect), Chris@14: throw(http_reply(see_other(Redirect),[])). Chris@14: Chris@14: init :- Chris@14: config:port(P), Chris@14: server(P,[]), Chris@14: nl, Chris@14: writeln(' - Server launched'),nl. Chris@14: Chris@14: :- Chris@14: nl,writeln('----------------'),nl, Chris@14: writeln(' - Launch the server by running ?-init.'), Chris@14: writeln(' - To change the port, change config.pl'),nl,writeln('----------------'),nl. Chris@14: Chris@14: