View source with raw comments or as raw
   1:- use_module(library(semweb/rdf_db)).
   2:- use_module(library(http/html_write)).
   3
   4:- rdf_register_ns(rss, 'http://purl.org/rss/1.0/').
   5:- rdf_register_ns(dc, 'http://purl.org/dc/elements/1.1/').
   6
   7rss_to_html_list(Resource, Source, Target) :-
   8	rdf_load(Source),
   9	rdf(Resource, rss:title, literal(Title)),
  10	phrase(rss_html_list(Title), TargetHtml),
  11	tell(Target),
  12	print_html(TargetHtml),
  13	told.
  14
  15rss_html_list(ChannelTitle) -->
  16	page(\rss_list_head(ChannelTitle),
  17	     \rss_list_body(ChannelTitle)).
  18
  19rss_list_head(PageTitle) -->
  20	html([title([PageTitle])]).
  21rss_list_body(Header) -->
  22	{ findall(Item, rdf(Item, rdf:type, rss:item), Items),
  23	  sort(Items, Unique)
  24	},
  25	html([h2(align(center),[Header]),
  26	      ul(\rss_list_items(Unique))]).
  27
  28rss_list_items([]) -->
  29	[].
  30rss_list_items([First_item|Rest_of_items]) -->
  31	html([li([\list_item_content(First_item)])]),
  32	rss_list_items(Rest_of_items).
  33
  34list_item_content(Item) -->
  35	{rdf(Item,dc:description,literal(Description))},
  36	html([\rss_link(Item),br([]),Description]).
  37
  38rss_link(Item) -->
  39	{ rdf(Item,rss:link,literal(Link)),
  40	  rdf(Item,rss:title,literal(Title))
  41	},
  42	html(i(a(href(Link),Title))).