2013-01-18 22 views
6

Se il server HTTP Prolog è stato collegato a localhost alla porta 9000, come posso fare in modo che Prolog generi il percorso corretto per le mie immagini? Per esempio, se i miei file .pl e .jpg o .png file si trovano sul desktop, come faccio a rendere il server di generare codice come questo:Come includere un'immagine in una pagina HTML servita dinamicamente da Prolog?

<img src="C:\Users\Luka\\Desktop\ImageName.ext"/>, dove "ext" sta per estensione. Ho dato un'occhiata alla documentazione di SWI-Prolog e allo this tutorial, ma trovo molto confusi tutti i percorsi astratti. Ho molta esperienza con i server Web, ma questo è molto diverso e sto avendo problemi terribili a comprenderlo.

Ecco il mio tentativo, composto da quello che ho imparato (o almeno penso di avere) in tutta la documentazione SWI-Prolog e la suddetta tutorial:

:- use_module(library(http/thread_httpd)). 
:- use_module(library(http/http_dispatch)). 
:- use_module(library(http/http_parameters)). 
:- use_module(library(http/html_write)). 
file_search_path('*', 'C:\\Users\\Luka\\Desktop\\'). 

server(Port) :- 
    http_server(http_dispatch, [port(Port)]). 

:- http_handler(root(.), render_base, []). 
:- http_handler('/form', process_form, []). 

process_form(Request) :- 
    http_parameters(Request, 
      [name(Name,[atom])]), 
      reply_html_page('Posted data: ',['',Name]). 

render_base(_Request) :- 
    reply_html_page(
     title('Naslov'), 
     img([src='/image.png', alt='Incident']) 
    ). 

Grazie ancora in anticipo per la tua enorme pazienza. :-)

risposta

7

È vero che non è semplice risolvere il problema. Leggere attentamente la sezione "come" della sezione this, sezione Serving many 'server support' files.

Ecco il codice che ho provato:

http:location(images, root(images), []). 
user:file_search_path(icons, '/home/carlo/prolog'). 
:- http_handler(images(.), serve_files_in_directory(icons), [prefix]). 

e il codice HTML che utilizza le risorse

intro --> 
    html([p(ol([li('select a path'), 
      li('scan resources from it'), 
      li('RDF-ize them'), 
      li('browse with foldable SVG') 
      ])), 
      \sep, 
      'png before', img(src='images/swipl.png'), 'png after', 
      \sep, 
      'jpeg before', img(src='/images/swipl.jpeg'), 'jpeg after' 
     ]). 

faccio notare che entrambe le specifiche img(src='images/swipl.png')eimg(src='/images/swipl.jpeg') lavoro, e questo contribuisce 'possibilità' per sfocare il comportamento dell'interfaccia.

Qui l'uscita

enter image description here

HTH

+0

Funziona con file css e js? –

1

Ricordate che il server prologo è davvero il server, non un plug-in per Apache. Ciò significa che è necessario che il prologo serva l'immagine. Ovviamente è molto utile che il tuo server web invii file statici, quindi l'esempio di Carlo serve entrambi la directory dell'immagine e l'html per includerlo.