---++ Hello World in HTML HTML can be written the same way as in [[Hello World][]], using the =|Content-type: text/html|= and using format/2 to emit HTML tags. However, this is a rather error-prone process. This page introduces library(http/html_write), which translates Prolog terms into well-formed HTML. We start with the simple [[example][]] below. == :- use_module(library(http/thread_httpd)). :- use_module(library(http/http_dispatch)). :- use_module(library(http/html_write)). % new :- http_handler(root(hello_world), say_hi, []). server(Port) :- http_server(http_dispatch, [port(Port)]). say_hi(_Request) :- reply_html_page(title('Hello World'), [ h1('Hello World'), p(['This example demonstrates generating HTML ', 'messages from Prolog' ]) ]). == The predicate reply_html_page/2 takes a description of the head and body of the HTML page and passes these to html//1. The argument to html//1 is either a list of terms or a single term. The functor-name of each term is an HTML-_tag_. It takes one or two arguments. If there is one argument, it is the HTML-_content_, again a term or a list of terms. If here are two arguments, the first specifies the HTML-_attributes_ and the second the content. Again, the attributes is a term or a list of terms, but these terms are of the form Attribute(Value) or Attribute=Value, at your choice. There is one exception to this rule: if an HTML-_tag_ cannot have a content (e.g., ), the first argument are the attributes. Below are a some examples. (1) shows specifying an attribute; (2) shows that has only one argument that is interpreted as an attributes (when in doubt, using =|img(, [])|= also works); (3) show lists of terms, (4 and 5) show that & and <> should _|not be escaped|_. == 1. span(class(product_class), 'Computers'), 2. img([width(32),height(32),src('/icons/computer.png')]), 3. table([ tr([ td('cell 1a'), td('cell 1b')]), tr([ td('cell 2a'), td('cell 2b')]) ]), 4. td(class(authors), 'Clocksin & Mellish'), 5. p(['we can also use ', i('A]]. For mixed files with large static parts and e.g., a dynamic table, [[PWP][]] is the Prolog-based answer to PHP, ASP, JSP, etc. One way to deploy the above described library(http/html_write) is to use Prolog data-manipulation to create the Prolog term that describes the body and then pass it to reply_html_page/2. The other is to use the [[rule definition facilities][]]. Note that [[PceEmacs][]] has support for colouring HTML elements: [[PceEmacsHello.png]] @see Source: hello_html.pl @see Next: [[Rule definition facilities][]]