6

如果我已将 Prolog HTTP 服务器绑定到localhost端口 9000,如何让 Prolog 为我的图像生成正确的路径?例如,如果我的.pl文件和.jpg/或.png文件位于桌面上,如何让服务器生成如下 HTML 代码:

<img src="C:\Users\Luka\\Desktop\ImageName.ext"/>

ext部分代表扩展。我查看了 SWI-Prolog 的文档和本教程,但我发现所有这些抽象路径都非常令人困惑。我在 Web 服务器方面有很多经验,但这有很大不同,我在理解它时遇到了可怕的问题。

这是我的尝试,由我在整个 SWI-Prolog 文档和上述教程中学到的(或者至少我认为我已经掌握的)组成:

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

再次提前感谢您的巨大耐心。:-)

4

2 回答 2

7

确实,解决您的问题并不简单。请仔细阅读“操作方法”页面的第 部分Serving many 'server support' files

这是我测试的代码:

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

以及使用该资源的 HTML

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

我注意到规范img(src='images/swipl.png') img(src='/images/swipl.jpeg')工作,这个“功能”有助于模糊界面行为。

这里的输出

在此处输入图像描述

高温高压

于 2013-01-18T08:30:42.037 回答
1

请记住,prolog 服务器确实是 SERVER,而不是 apache 的插件。这意味着您需要让 prolog 为图像提供服务。当然,让您的 Web 服务器发送静态文件非常方便,因此 Carlo 的示例确实同时提供图像目录和包含它的 html。

于 2013-01-19T01:13:07.337 回答