2013-01-18 15 views
6

Wenn ich meinen Prolog-HTTP-Server an Port 9000 an localhost gebunden habe, wie kann ich Prolog veranlassen, den richtigen Pfad für meine Bilder zu generieren? Zum Beispiel, wenn meine .pl Dateien und .jpg oder .png Dateien auf dem Desktop befinden, wie kann ich den Server machen generiert Code wie folgt:Wie fügt man ein Bild in eine HTML-Seite ein, die dynamisch von Prolog bedient wird?

<img src="C:\Users\Luka\\Desktop\ImageName.ext"/>, wobei „ext“ für die Erweiterung steht. Ich habe mir die Dokumentation von SWI-Prolog und this tutorial angesehen, aber ich finde alle diese abstrakten Pfade sehr verwirrend. Ich habe viel Erfahrung mit Web-Servern, aber das ist sehr unterschiedlich und ich habe schreckliche Probleme, es zu verstehen.

Hier ist mein Versuch, das aus, was ich (oder zumindest ich glaube, ich habe) gelernt haben, in der gesamten SWI-Prolog-Dokumentation und dem oben genannten 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']) 
    ). 

wieder Vielen Dank im Voraus für Deine große Geduld. :-)

Antwort

7

Es ist wahr, dass es nicht einfach ist, Ihr Problem zu lösen. Bitte lesen Sie sorgfältig this 'How to' Seite, Abschnitt Serving many 'server support' files. Hier

ist der Code, den ich getestet:

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

und der HTML-Code, verwendet diese Ressourcen

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' 
     ]). 

Ich nehme zur Kenntnis, dass beide Spezifikationen img(src='images/swipl.png')undimg(src='/images/swipl.jpeg') Arbeit, und dieses 'Feature' trägt um das Verhalten der Schnittstelle zu verwischen.

Hier ist der Ausgang

enter image description here

HTH

+0

Funktioniert es für CSS- und JS-Dateien? –

1

Denken Sie daran, dass der Prolog-Server in der Tat die SERVER ist, nicht ein Plug-in zu Apache. Das bedeutet, Sie müssen Prolog haben, um das Bild zu bedienen. Natürlich ist es sehr praktisch, wenn Ihr Web-Server statische Dateien sendet, also dient das Beispiel von Carlo sowohl dem Bildverzeichnis als auch dem HTML, um es einzuschließen.

Verwandte Themen