Atom feeds have been invented in 2005. I prefer Atom over the four incompatible-with-each-other RSS formats because it is properly standardized.
After making an Atom feed, it is important to validate it to see if it's correct and every feed reader is able to understand it.
Online services
There are two web services to validate feeds:
- feedvalidator.org
- validator.w3.org/feed/, which validates by URL and copy&paste input.
Offline validation
At the time of writing, feedvalidator.org was broken and could not be used. Also during development, the feed most often is not available at a publicly accessible URL and thus validation by URL does not work. And copy&pasting is cumbersome. Validating the atom feed on your own machine without network requirements is to be preferred.
Atom feeds have to be validated on two levels:
Well-formedness
To check if your feed complies to the XML rules, simply check if it is well-formed:
$ xmllint --noout /path/to/feed.atom
If you get no output all is fine and the feed is valid XML (e.g. its tags are properly nested).
Schema validity
Apart from following the XML rules, Atom feeds also have to adhere to
the rules that RFC 4287 defines.
The RFC even contains a machine-readable Atom feed schema in
appendix B: RELAX NG Compact Schema
.
Unfortunately xmllint is not able to work with RELAX NG compact files, but trang can be used to convert .rnc to "normal" .rng files:
$ trang -I rnc -O rng atom.rnc atom.rng
Now we can use the atom.rng schema file to validate our feed:
$ xmllint --noout --relaxng atom.rng http://cweiske.de/tagebuch/feed/ http://cweiske.de/tagebuch/feed/ validates
XML schema
At the time of writing in 2017, I know of not a single working XML schema file for the Atom feed specification.
www.kbcafe.com/rss/atom.xsd.xml does not even detect a missing <id> tag thus cannot be trusted.
The OASIS CMIS atom feed schema is broken; xmllint reports an error when I try to use it:
complex type 'atomPersonConstruct': The content model is not determinist.