:- use_module(library(atom_feed)).
?- new_feed(file('xkcd.xml'), Feed),
   entry(Feed, Entry),
   link(Entry, Link),
   rel(Link, alternate),
   href(Link, Url).
Url = '' ;
Url = '' ;
Url = '' ;


Parse and query Atom Syndication Feeds and RSS feeds. This pack doesn't support every aspect of the Atom or RSS specs, but it does support many widely used aspects. It's intended as a relatively low level library on which more complex feed processing can be implemented.

Changes in this Version


Using SWI-Prolog 6.3 or later:

?- pack_install(atom_feed).

This module uses semantic versioning.

Source code available and pull requests accepted at

- Michael Hendricks <>

Prolog files
author/2True if Author is the 'author' of Item.
content/2True if Content is the 'content' of Entry.
description/2True if Entry has a Description.
email/2True if Name is email of Author.
entry/2True if Entry is an entry of Feed.
href/2True if Href is the 'href' attribute of Link.
id/2True if Id is the 'id' of Item.
link/2True if Link is a 'link' of Item.
name/2True if Name is the 'name' of Author.
new_feed/2Read a Feed from Source.
published/2True if Entry was published at time EpochSeconds.
rel/2True if Rel is the relationship between Link and its parent.
summary/2True if Summary is a summary of Entry.
title/2True if Title is the title of Item.
type/2True if Link has type attributed MediaType.
updated/2True if Entry was last updated at time EpochSeconds.