我目前正在做一个项目,需要一些用prolog编写的web应用程序,我选择使用著名的swi prolog pwp库。它解析ascript with prolog queries inside an HTML file
。
我有一个页面响应以下请求示例:
/user?id=N
其中
N
是整数值。但是我很难读取html文件中请求的查询字符串
ID
。我有.pl文件:
showUser(UserId, Request) :-
reply_pwp_file(mydir('user_page.html'), [mime_type('text/html')], Request).
我不知道如何读取
UserId
或Request
来再次检索查询字符串中的用户id。我在html标记中尝试了这种方法:
<span pwp:ask="http_parameters(Request, [id(UserId, [optional(true)])])." pwp:use="UserId" />
以前有人遇到过这种麻烦吗?
非常感谢。
这里有一些有趣的链接可以帮助我们:
PWP/SGML Pages
SWI-Prolog HTTP Library
最佳答案
我花了一些时间,但至少我已经能够运行在~/pl devel/packages/http/examples中找到的demo_pwp.pl。现在,以后
?- server(1234).
我打开URL
http://localhost:1234/user_id.pwp?user_id=1&user_name=carlo
我在
~/pl-devel/packages/http/examples/pwp/user_id.pwp
文件中写的<?xml version="1.0"?>
<!DOCTYPE html>
<html xmlns:pwp="http://www.cs.otago.ac.nz/staffpriv/ok/pwp.pl">
<head>
<title>Context variables for PWP scripts</title>
</head>
<body>
<p>This PWP demo lists the context-parameters that are passed into
the script.
</p>
<ul>
<li pwp:ask="member(Name=Value, CONTEXT)">
<span class=name pwp:use="Name"/>
=
<span class=value pwp:use="writeq(Value)"/>
</li>
</ul>
<!-- here is the specific part for my answer -->
<p pwp:ask="memberchk('QUERY'=Q, CONTEXT),memberchk(user_id=UID,Q),memberchk(user_name=NAME,Q)">
UID : <span pwp:use="UID"/> / NAME : <span pwp:use="NAME"/>
</p>
<!-- nested access is well thought -->
<p pwp:ask="member('QUERY'=Q,CONTEXT)">
UID : <span pwp:use="UID" pwp:ask="member(user_id=UID,Q)"/>
/ NAME : <span pwp:use="NAME" pwp:ask="member(user_name=NAME,Q)"/>
</p>
</body>
</html>
(这是context.pwp的副本,底部添加了我的信息)
我得到了
This PWP demo lists the context-parameters that are passed into the script.
...
- QUERY = [user_id='1',user_name=carlo]
...
UID : 1 / NAME : carlo
UID : 1 / NAME : carlo
然后我可以确认朱利奥建议的指导方针是正确的。
关于http - 在Prolog中处理PWP HTML页面内的http查询字符串,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15887958/