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.