私はswiplを使用しています。下のparts.plデータベースファイルをWebページから照会しようとしていますが、どのようにクエリを投稿し、データベースに「クエリ」してそれらの結果を返すかわかりません。プロローグのWebページからプロログデータベースを照会するにはどうすればいいですか?
例えば、私ができると思っているのは、 'part(jeep、100、A、B)'のようなswiplコマンドラインのようにクエリを入力することだけです。同じ結果がページに戻ってきました。
誰でもこれを行う方法に関する少しの指針を与えることができます。これまでに私が得たことがここにあります。
:- use_module(library(http/thread_httpd)).
:- use_module(library(http/http_dispatch)).
:- use_module(library(http/http_error)).
:- use_module(library(http/html_write)).
:- use_module(library(http/http_client)).
:- use_module(parts).
:- http_handler('/', my_query_form, []).
server(Port) :-
http_server(http_dispatch, [port(Port)]).
my_query_form(Request) :-
reply_html_page(
my_style,
[title('My Test')],
[\page_content(Request)]).
page_content(_Request) -->
html(
[
form([action='/landing', method='POST'], [
p([], [
label([for=model], 'Model '),
input([name=model, type=textarea])
]),
p([], [
label([for=major], 'Major '),
input([name=major, type=textarea])
]),
p([], [
label([for=minor], 'Minor '),
input([name=part, type=textarea])
]),
p([], input([name=submit, type=submit, value='Search'], []))
])]).
:- http_handler('/landing', landing_pad, []).
landing_pad(Request) :-
member(method(post), Request), !,
http_read_data(Request, Data, []),
format('Content-type: text/html~n~n', []),
format('<p>', []),
portray_clause(Data),
format('</p<p>=======~n', []),
portray_clause(Request),
format('</p>').
:- multifile
user:body//2.
user:body(my_style, Body) -->
html(body([
div(id(top), h3('Parts Query')),
div(id(beta), p(i('(beta)'))),
div(id(content), Body)
])).
これは私のparts.plファイルです。
:- module(parts,[part/4]).
% part(model, major, minor, description).
part(jeep, 100, 1000, 'description of 100-1000').
part(jeep, 100, 1001, 'description of 100-1001').
part(jeep, 100, 1002, 'description of 100-1002').
part(jeep, 101, 1000, 'description of 101-1000').
part(jeep, 101, 1001, 'description of 101-1001').
part(jeep, 101, 1002, 'description of 101-1002').
part(ford, 101, 1000, 'description of 101-1000').
アップデート:(私の最新の実際に問い合わせを行いますが、データベース全体を返す)
landing_pad(Request) :-
member(method(post), Request), !,
http_read_data(Request, Data, []),
format('Content-type: text/html~n~n', []),
format('<p>', []),
memberchk(model=Model, Data),
findall(p(Model, Major, Minor, Description),
part(Model, Major, Minor, Description), Descriptions),
maplist(description, Descriptions),
format('</p>').
description(p(M,A,I,D)) :- format("~q ~q:~q - ~q</br>", [M,A,I,D]).
あなたはすでにあなた自身で遠くに印象的に取得することができました。私はちょうどあなたがサーバーコードで 'part/4'を呼んでいるところは見ません....あなたの質問にこれを置くのを忘れましたか? –
@Ender:最新の編集には、クエリ全体が失敗する間違いが含まれています。また、これを修正しても、**データベース全体を返さない**。これをさらに詳しくチェックしてください。あなたの例の要素が、あなたが項目を分かりやすく伝えるような方法で選択されているなら、間違いなく助けになるでしょう。 – mat