This package allows you to parse SGML, XML and HTML data into a
Prolog data structure. The high-level interface defined in library(sgml)
provides access at the file-level, while the low-level interface defined
in the foreign module works with Prolog streams. Please use the source
of sgml.pl
as a starting point for dealing with data from
other sources than files, such as SWI-Prolog resources, network-sockets,
character strings, etc. The first example below loads an HTML
file.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN"> <html> <head> <title>Demo</title> </head> <body> <h1 align=center>This is a demo</title> Paragraphs in HTML need not be closed. This is called `omitted-tag' handling. </body> </html>
?- load_html('test.html', Term, []), print_term(Term, []). [ element(html, [], [ element(head, [], [ element(title, [], [ 'Demo' ]) ]), element(body, [], [ '\n', element(h1, [ align = center ], [ 'This is a demo' ]), '\n\n', element(p, [], [ 'Paragraphs in HTML need not be closed.\n' ]), element(p, [], [ 'This is called `omitted-tag\' handling.' ]) ]) ]) ].
The document is represented as a list, each element being an atom to
represent CDATA
or a term element(Name, Attributes,
Content)
. Entities (e.g. <
) are expanded and
included in the atom representing the element content or attribute
value.1Up to SWI-Prolog 5.4.x,
Prolog could not represent wide characters and entities that
did not fit in the Prolog characters set were emitted as a term number(+Code)
.
With the introduction of wide characters in the 5.5 branch this is no
longer needed.
These predicates are for basic use of the library, converting entire and self-contained files in SGML, HTML, or XML into a structured term. They are based on load_structure/3.
dialect(sgml)
dialect(xml)
dialect(HTMLDialect)
,
where HTMLDialect is html4
or html5
(default), depending on the Prolog flag html_dialect
. Both
imply the option shorttag(false)
. The option dtd(DTD)
is passed, where DTD is the HTML DTD as obtained using dtd(html,
DTD)
. See dtd/2.