\chapter{Szindikációs formátumok}

\section{RSS}

Mint láttuk, számos próbálkozás előzte meg az RSS-t, de valódi áttörést csak ez a formátum hozott. Az RSS valójában egy egész formátumcsaládot jelent, amelyek megpróbálják ugyanazt a célt szolgálni: frissített tartalmat szállítani, és amelyek gyakorlatilag sajnos kivétel nélkül inkompatibilisek egymással.

Eredetileg Ramanathan V. Guha fejlesztette ki a Netscape-nél, a MyNetscape-pel való használathoz. 1999 márciusában hozták nyilvánosságra, ez volt a 0.90-es verzió, amely a Resource Description Framework (RDF) tervezetére épült, de végleges kiadásával már nem volt kompatibilis.

\subsection{RSS 0.90}

Az RSS az RDF Site Summary rövidítése. A következő példafeed a hivatalos specifikációból származik \cite{rssformat}.
\begin{CoolVerbatim}
<?xml version="1.0"?>
<rdf:RDF
 xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
 xmlns="http://channel.netscape.com/rdf/simple/0.9/"
 >
  <channel>
    <title>Mozilla Dot Org</title>
    <link>http://www.mozilla.org</link>
    <description>the Mozilla Organization web site</description>
  </channel>
  <image>
    <title>Mozilla</title>
    <url>http://www.mozilla.org/images/moz.gif</url>
    <link>http://www.mozilla.org</link>
  </image>
  <item>
    <title>New Status Updates</title>
    <link>http://www.mozilla.org/status/</link>
  </item>
  <item>
    <title>Bugzilla Reorganized</title>
    <link>http://www.mozilla.org/bugs/</link>
  </item>
  <item>
    <title>Mozilla Party, 2.0!</title>
    <link>http://www.mozilla.org/party/1999/</link>
  </item>
  <item>
    <title>Unix Platform Parity</title>
    <link>http://www.mozilla.org/build/unix.html</link>
  </item>
  <item>
    <title>NPL 1.0M published</title>
    <link>http://www.mozilla.org/NPL/NPL-1.0M.html</link>
  </item>
</rdf:RDF>
\end{CoolVerbatim}

Mint az látszik, jólformált XML dokumentumról van szó, XML prológussal. Ezután a gyökérelem az \verb+rdf+ névtérből származó \verb+RDF+, mint minden RDF-do\-ku\-men\-tum\-nak. Ennél több köze nincs az RDF-hez, közvetlenül ezen elem gyermekeiként szerepelnek \verb+channel+, \verb+image+ és \verb+item+ elemek. A \verb+channel+ elem írja le a feedet, a \verb+title+, \verb+description+ és \verb+link+ elemek tartalma rendre a csatorna nevét, hosszabb szöveges leírását és az oldal URL-jét adja meg. \verb+channel+ elemből egyetlen szerepelhet az állományban, megadása kötelező. Az \verb+image+ elem a csatornához tartozó ikont jelöli, gyermekei a \verb+title+, \verb+url+ és \verb+link+, amelyek az ikon címét, forrásának URL-jét és az oldalra mutató linket képviseli. Ezután néhány \verb+item+ elem következik, amelyben a \verb+title+ és \verb+link+ egy címet és URL-t ad meg. A specifikáció itt megenged egy további \verb+textinput+ elemet, benne \verb+title+, \verb+description+, \verb+name+ és \verb+link+ elemekkel, ezt tetszőleges adat visszaküldésére lehet használni, HTTP GET metódus használatával.

Az RSS 0.90 számos megszorítást tesz a tartalomra. Először is, a file egésze nem lehet nagyobb 8 kilobyte-nál, és 15 feedelemnél nem tartalmazhat többet. Karakterkészlet tekintetében egyedül az ASCII-t támogatja, de használhatók a HTML-ben megengedett karakterentitás-hivatkozások; más karakterkészlet nem használható. A szövegben sehol sem használhatók a \verb+'+, \verb+"+, \verb+&+, \verb+<+ és \verb+>+ karakterek, ezeket mind a megfelelő HTML entitásra kell lecserélni. Különösen az \verb+url+ és \verb+link+ elemek tartalmában kell odafigyelni a \verb+&+ karakterre, amennyiben dinamikus lapnak adunk át GET-paramétert. Azokon az elemeken belül, amelyek URL-t tartalmaznak, csak a \verb+http://+ és az \verb+ftp://+ előtag megengedett, a többi érvénytelennek minősül (így a \verb+https+ is).

Ez a változat még nem igazán tekinthető szindikációs formátumnak, inkább csak egy oldal összefoglalójának.

\subsection{RSS 0.91}

A Netscape 1999 júliusában kiadta az RSS következő verziójának leírását, egyrészt megszabadítva az RDF csomagolástól, másrészt jelentősen kibővítve a Dave Winer által kifejlesztett ScriptingNews formátum néhány elemével. Így olyan hasznos információk kerültek bele, mint az egyes elemek megjelenésének és frissítésének dátuma, nyelv információ, kontakt információk. A Netscape egyúttal át is nevezte a formátumot \emph{Rich Site Summary}-ra. Fő fejlesztője Dan Libby.

Az RSS 0.91 már megköveteli a feedtől, hogy nem csak jólformált, hanem érvényes XML is legyen. Ennek érdekében kötelezővé teszik a dokumentumtípus-deklaráció használatát, hogy DTD-vel érvényesíthető legyen. Nincsenek a formátumban vegyes tartalmú elemek, vagyis egy elem tartalma csak más elemek, vagy szöveges adat lehet. 

Ebben a formátumban az XML-fa gyökere az \verb+rss+ elem, amelynek egyetlen gyermeke egyetlen \verb+channel+ lehet. Attribútum csak egy van, ez pedig az \verb+rss+ elem \verb+version+ attribútuma, értéke kötelezően \verb+0.91+. A formátum további részletei az alábbi felsorolás szerint alakulnak:

\begin{itemize}
  \item \verb+<rss>+ pontosan 1, a feed gyökere
  \begin{itemize}
    \item \verb+<channel>+ pontosan 1, egy feedben egy csatorna lehet
    \begin{itemize}
      \item \verb+<description>+ pontosan 1, a csatorna leírását tartalmazza
      \item \verb+<language>+ pontosan 1, a csatorna nyelvét jelöli
      \item \verb+<link>+ pontosan 1, arra a weboldalra mutat, amelynek a tartalmát leírja
      \item \verb+<title>+ pontosan 1, a csatorna címe
      \item \verb+<copyright>+ legfeljebb 1, szabadszöveges, nem ellenőrzött
      \item \verb+<docs>+ legfeljebb 1, olyan URL, amelyen a csatorna leírása megtalálható
      \item \verb+<image>+ legfeljebb 1, egy képet vagy ikont rendel a csatornához
      \begin{itemize}
        \item \verb+<url>+ pontosan 1, a kép forrása
        \item \verb+<link>+ pontosan 1, a kép hivatkozása (az oldalra)
        \item \verb+<title>+ pontosan 1, a kép címe
        \item \verb+<description>+ legfeljebb 1, a kép leírása
        \item \verb+<width>+ legfeljebb 1, szélesség
        \item \verb+<height>+ legfeljebb 1, magasság
      \end{itemize}
      \item \verb+<item>+ tetszőleges sok, a csatornán elhelyezett elemek
      \begin{itemize}
        \item \verb+<title>+ pontosan 1, az elem címe
        \item \verb+<link>+ pontosan 1, az elem URL-je
        \item \verb+<description>+ legfeljebb 1, az elem leírása
      \end{itemize}
      \item \verb+<lastBuildDate>+ legfeljebb 1, az utolsó módosítás dátuma
      \item \verb+<managingEditor>+ legfeljebb 1, az összeállításért felelős személy emailcíme
      \item \verb+<pubDate>+ legfeljebb 1, publikálás dátuma
      \item \verb+<rating>+ legfeljebb 1, figyelmen kívül hagyott
      \item \verb+<skipDays>+ legfeljebb 1, lista a nem figyelt napokról
      \begin{itemize}
        \item \verb+<day>+ legalább 1, egy napot jelöl
      \end{itemize}
      \item \verb+<skipHours>+ legfeljebb 1, lista a nem figyelt órákról
      \begin{itemize}
        \item \verb+<day>+ legalább 1, egy órát jelöl
      \end{itemize}
      \item \verb+<textinput>+ tetszőleges sok, feedback célra
      \begin{itemize}
        \item \verb+<title>+ pontosan 1
        \item \verb+<link>+ pontosan 1
        \item \verb+<description>+ pontosan 1
        \item \verb+<name>+ pontosan 1
      \end{itemize}
      \item \verb+<webMaster>+ legfeljebb 1, az oldalért felelős személy emailcíme
    \end{itemize}
  \end{itemize}
\end{itemize}

Az XML-ből következően HTML-tartalmak továbbra sem megengedettek a tartalomban, és minden tiltott karaktert a megfelelő entitásra kell cserélni (mint a korábbi kiadásban). A támogatott karakterkódolások száma jelentősen kibővült, messze nem teljes, de már támogatja az ISO-8859 sorozat több tagját és az UTF-8-at. A nyelvek jelölésére bevezették a \verb+language+ elemet, amelynek tartalma a specifikációban megadott listából lehet egy elem (az angol változatain kívül elsősorban európai nyelveket tartalmaz a lista). Több helyen megadható dátum, de ennek formátumára nincs megkötés (a hivatalos példa az RFC 822, az ARPA Internet szöveges üzenetek formátumátumáról szóló 1982-es standard szerinti formátumot használja).

\subsubsection{UserLand RSS 0.91}

2000 áprilisában az America Online által irányított Netscape áttervezte a My\-Net\-scape-et, eltávolította az RSS-támogatást és a DTD-t az oldalról. Ez gyakorlatilag tulajdonos nélkül hagyta a formátumot, ami később kaotikus verziózáshoz és további inkompatibilitáshoz vezetett. Dave Winer ragadta magához az irányítást, és a UserLand weboldalán publikálta az RSS 0.91 módosított változatát. Lényegében új verzióról van szó, azonos verziószámmal! Technikailag abban különbözik a Net\-scape verziójától, hogy nem használ DTD-t, így azonban a HTML-ben szokásos entitások sem használhatók, amelyet a Netscape DTD-je megengedett, vagyis annak egy részhalmaza lett a UserLand RSS 0.91. Ennek szerzői jogait Winer magáénak tulajdonította. A UserLand specifikáció kimondja, hogy az RSS már nem egy rövidítés, csak egy név.

Néhány formátumváltozás is történt ebben a verzióban. Winer a \verb+textInput+ elemet használja a \verb+textinput+ helyett, valamint a \verb+skipHours+-on belül a \verb+hour+ a 0--23 tartomány helyett az 1--24 tartományból vehet fel értéket.

\subsection{RSS 1.0}

A Netscape megrendülése után egy másik csoport, az RSS-Dev csoport is megmozdult. Az eredeti 0.90-es specifikációt alapul véve egy új változatot hoztak létre a formátumból. Az RDF-alapú vonalat vitték tovább, de már sokkal modulárisabban felépítve. Például itt vezették be külső szótárak, többek között a Dublin Core használatát. Az RSS ismét RDF Site Summary-t jelent! A csoport állítása szerint kompatibilis a 0.90-es verzióval, ez azonban féligazság: a régi elemek is egy új névtérben vannak.

A dokumentum gyökere itt is \verb+rdf:+\linebreak[0]\verb+RDF+, amelynek gyermekei egy \verb+channel+ és több \verb+image+, \verb+item+ és \verb+textinput+ elem lehet. Ezek mindegyikét azonosító URI-val kell ellátni a \verb+rdf:+\linebreak[0]\verb+about+ attribútum segítségével. Az \verb+item+-ben a korábban létező \verb+title+ és \verb+link+ mellett megjelenik a 0.91-ben bevezetett \verb+description+ elem is, ebben leírás adható meg. A kép, a textinputok és az itemek nem tartoznak automatikusan a csatornához, ehhez a \verb+channel+-en belül meg kell adni az \verb+image+, \verb+textinput+, \verb+items+ elemeket. Az \verb+image+ és \verb+textinput+ elemeken belül az \verb+rdf:+\linebreak[4]\verb+resource+ attribútummal kell azonosítani, hogy melyik külső szinten megadott \verb+image+ és \verb+textinput+ \emph{erőforrás} tartozik a csatornához, illetve az \verb+items+ elemen belül \verb+rdf:+\linebreak[0]\verb+Seq+ segítségével szabványos RDF módszerrel kell felsorolni a csatornához tartozó elemeket, konkrétan \verb+rdf:+\linebreak[0]\verb+li+ elem \verb+rdf:+\linebreak[0]\verb+resource+ attribútumával megadni az item azonosítóját (URI).

A fenti tömör leírást szemlélteti az alábbi példa, a hivatalos specifikációból \cite{rssformat}.

\begin{CoolVerbatim}
<?xml version="1.0"?>
<rdf:RDF 
 xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
 xmlns="http://purl.org/rss/1.0/"
 >
  <channel rdf:about="http://www.xml.com/xml/news.rss">
    <title>XML.com</title>
    <link>http://xml.com/pub</link>
    <description>
      XML.com features a rich mix of information and services 
      for the XML community.
    </description>
    <image rdf:resource="http://xml.com/universal/images/xml_tiny.gif" />
    <items>
      <rdf:Seq>
        <rdf:li resource="http://xml.com/pub/2000/08/09/xslt/xslt.html" />
        <rdf:li resource="http://xml.com/pub/2000/08/09/rdfdb/index.html" />
      </rdf:Seq>
    </items>
  </channel>
  <image rdf:about="http://xml.com/universal/images/xml_tiny.gif">
    <title>XML.com</title>
    <link>http://www.xml.com</link>
    <url>http://xml.com/universal/images/xml_tiny.gif</url>
  </image>
  <item rdf:about="http://xml.com/pub/2000/08/09/xslt/xslt.html">
    <title>Processing Inclusions with XSLT</title>
    <link>http://xml.com/pub/2000/08/09/xslt/xslt.html</link>
    <description>
     Processing document inclusions with general XML tools can be 
     problematic. This article proposes a way of preserving inclusion 
     information through SAX-based processing.
    </description>
  </item>
  <item rdf:about="http://xml.com/pub/2000/08/09/rdfdb/index.html">
    <title>Putting RDF to Work</title>
    <link>http://xml.com/pub/2000/08/09/rdfdb/index.html</link>
    <description>
     Tool and API support for the Resource Description Framework 
     is slowly coming of age. Edd Dumbill takes a look at RDFDB, 
     one of the most exciting new RDF toolkits.
    </description>
  </item>
</rdf:RDF>
\end{CoolVerbatim}

Az RSS ezen változatából kimaradtak, ismét hiányoznak a szindikációhoz elengedhetetlen dátumadatok, viszont hozzáadhatóak külső szótárak, például a Dublin Core segítségével. Ezeket a szótárakat a specifikáció moduloknak nevezi. Egy modul hozzáadásához a feed (mint XML dokumentum) gyökerében el kell helyezni a megfelelő névtérdeklarációt (például ,,\verb+xmlns:dc=...+''), majd ezután használható a dokumentumban azon elemen belül, amelynek tartalmára vonatkozik az adat (például \verb+feed+-en belül \verb+dc:+\linebreak[0]\verb+date+, \verb+dc:+\linebreak[0]\verb+creator+ vagy \verb+dc:+\linebreak[0]\verb+rights+). 

\subsection{RSS 0.92-0.94}

Az RSS 1.0 kiadása után 16 nappal Winer kiadta az RSS 0.92-es változatát, amely a UserLand RSS 0.91-et veszi alapul. Ez a verzió opcionálissá teszi a csatorna \verb+language+ és a feedelemek összes elemét. Az \verb+item+ elem alatt bevezeti a \verb+source+, a \verb+category+ és az \verb+enclosure+ elemeket, valamint a \verb+channel+ elem alatt a \verb+cloud+ elemet. Fontos változás, hogy a \verb+description+ tartalommodellje sima szövegről HTML-re változik.

Working draft formában megjelenik még az RSS 0.93 és 0.94. Az RSS 0.93 több \verb+enclosure+ elemet is megenged az \verb+item+ alatt, és bevezeti az \verb+expirationDate+ elemet. Az RSS 0.94 aztán ez utóbbit elveti, és vezeti a \verb+description+ elemen belül a \verb+type+ attribútumot, hogy meghatározható legyen, milyen formátumot követ a tartalom (sima szöveg vagy HTML). Az RSS 0.93 és 0.94 soha nem lett kiadva, sőt, a 0.94-es verzió leírása nem is található meg, mert az a 2.0-ra mutat, annak ellenére, hogy tudjuk, hogy van eltérés a két változat között. \cite{myth}

\subsection{RSS 1.1}

Az 1.0-s változat továbbgondolása egy független fejlesztőtől, egyetlen csoport, szervezet sem támogatta, az RSS-Dev sem.

\subsection{RSS 2.0}

2002 augusztusában végül megszületik Winertől az RSS 2.0, amely \emph{állítása szerint} megegyezik a 0.94-es verzióval. Az RSS jelentése itt már \emph{Really Simple Syndication}. Winer eltávolítja a \verb+type+ attribútumot, a \verb+channel+ alatt bevezeti a \verb+ttl+, az \verb+item+ alatt a \verb+author+, \verb+category+, \verb+comments+, \verb+guid+ elemeket. Az RSS 2.0 lehetővé teszi a specifikációban nem definiált elemek használatát, ha azok egy definiált névtérben vannak elhelyezve. A példa eredeti forrása a \cite{rssformat}.

\begin{CoolVerbatim}
<?xml version="1.0"?>
<rss version="2.0">
  <channel>
    <title>Liftoff News</title>
    <link>http://liftoff.msfc.nasa.gov/</link>
    <description>Liftoff to Space Exploration.</description>
    <language>en-us</language>
    <pubDate>Tue, 10 Jun 2003 04:00:00 GMT</pubDate>
    <lastBuildDate>Tue, 10 Jun 2003 09:41:01 GMT</lastBuildDate>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>Weblog Editor 2.0</generator>
    <managingEditor>editor@example.com</managingEditor>
    <webMaster>webmaster@example.com</webMaster>
    <item>
      <title>Star City</title>
      <link>http://liftoff.msfc.nasa.gov/news/2003/news-starcity.asp</link>
      <description>How do Americans get ready to work with Russians aboard
        the International Space Station? They take a crash course in
        culture, language and protocol at Russia's
        &lt;a href="http://howe.iki.rssi.ru/GCTC/gctc_e.htm"&gt;Star
        City&lt;/a&gt;.
      </description>
      <pubDate>Tue, 03 Jun 2003 09:39:21 GMT</pubDate>
      <guid>http://liftoff.msfc.nasa.gov/2003/06/03.html#item573</guid>
    </item>
    <item>
      <description>Sky watchers in Europe, Asia, and parts
        of Alaska and Canada will experience a &lt;a
        href="http://science.nasa.gov/headlines/y2003/30may_solareclipse.htm"&gt;
        partial eclipse of the Sun&lt;/a&gt; on Saturday, May 31st.
      </description>
      <pubDate>Fri, 30 May 2003 11:06:42 GMT</pubDate>
      <guid>http://liftoff.msfc.nasa.gov/2003/05/30.html#item572</guid>
    </item>
    <item>
      <title>The Engine That Does More</title>
      <link>http://liftoff.msfc.nasa.gov/news/2003/news-VASIMR.asp</link>
      <description>Before man travels to Mars, NASA hopes to design new
        engines that will let us fly through the Solar System more quickly.
        The proposed VASIMR engine would do that.
      </description>
      <pubDate>Tue, 27 May 2003 08:37:32 GMT</pubDate>
      <guid>http://liftoff.msfc.nasa.gov/2003/05/27.html#item571</guid>
    </item>
  </channel>
</rss>
\end{CoolVerbatim}

\begin{figure}
\begin{center}
\includegraphics[width=\textwidth]{feedhistory_hori.eps}
\end{center}
\caption{A szindikációs formátumok fejlődése}
\label{fig:syndtree}
\end{figure}

\section{Atom}

2003. június 16-án Sam Ruby szoftverfejlesztő lejegyzett blogjában egy rövid gondolatsort arról, hogy szerinte mitől lesz egy bejegyzés megfelelően leírt \cite{ruby}. A bejegyzés szinte lavinát indított el, hozzászólásaikban sokan csatlakoztak Ruby-hoz, további ötletekkel is szolgáltak. Kicsit később elindítottak egy wiki oldalt, ahol tovább gyűjtötték az ötleteket. Ezzel kezdődött az Atom születésének folyamata.

Az Atom az RSS-hez hasonlóan egy webes szindikációs nyelv, az XML alkalmazása. Az Atom az RSS számos problémás részét megpróbálja kiküszöbölni, például sokkal részletesebben rögzíti a részleteit, többek között a dátumformátumot, szabályozza a hordozható tartalmat, részletesebben írja le a bejegyzéseket. Számos más előnye is van az RSS-sel szemben. Az Atom az Internet Engineering Task Force (IETF) által beiktatott szabvány, rendelkezik bejegyzett MIME-típussal. Csak két verziója létezik, és a végleges verziót ajánlják használatra.

\Aref{fig:syndtree}. ábra a formátumok fejlődését mutatja \cite{syndtreewp}.

\subsection{Atom 1.0}

Az Atom formátumában leírt összes elem a \url{http://www.w3.org/2005/Atom} névtérben van. Egy Atom formátumú dokumentum kétféle gyökerű lehet, vagy a \verb+atom:+\linebreak[0]\verb+feed+, vagy az \verb+atom:+\linebreak[0]\verb+entry+ elemmel kezdődik. A formátumban minden elemen belül megengedett az \verb+xml:+\linebreak[0]\verb+lang+ és az \verb+xml:+\linebreak[0]\verb+base+ attribútumok használata, amelyek rendre a nyelvet és azt az URI-t határozzák meg, amelyhez képest a relatív URI-k feloldása történik. Az Atom definiál néhány konstrukciót, amelyet különböző helyeken lehet használni a dokumentumban, ezek szöveget, dátumot vagy személyt írnak le.

\subsubsection{Konstrukciók}

A szöveget illetve tartalmat leíró konstrukció célja, hogy meghatározható legyen, mit is hordoz a dokumentumban egy adott elem. A legtöbb elemben ez használható. A hordozott tartalom típusát az adott elem \verb+atom:+\linebreak[0]\verb+type+ attribútuma határozza meg, melynek értéke \verb+text+, \verb+html+ vagy \verb+xhtml+ lehet. A \verb+text+ és \verb+html+ esetében az elem csak szöveget tartalmazhat, más elemet nem, és az XML által szövegben nem megengedett karaktereket szöktetni kell. A különbség természetesen a tartalommodellben van\footnote{A tartalommodell megadását az RSS előbb megoldja, majd a megoldást elveti. Pedig ez egyáltalán nem triviális: például a ,,\verb+<+'' szöveget text esetén \verb+&lt;+, html esetén \verb+&amp;lt;+ sorozattal kell leírni.}. Az \verb+xhtml+ esetében az elem gyermeke egy \verb+xhtml+ névtérből származó \verb+div+ lesz, amelyen belül szabadon megadható az XHTML tartalom.

A dátum konstrukció arra szolgál, hogy jól definiált módon egységesítse a dátumleírást. Ennek megfelelően megköveteli a dátumok ISO-8601 szabvány szerinti leírását. Ez az egységes megjelenés mellett azért is előnyös, mert a W3C XMLSchema is ezt használja, így egy erre épülő validátor képes ellenőrizni érvényességét.

A személyt leíró konstrukció három gyermekelemmel rendelkezik: az \verb+atom:+\linebreak[0]\verb+name+, \verb+atom:+\linebreak[0]\verb+uri+ és \verb+atom:+\linebreak[0]\verb+email+ elemekkel, amelyek a személy nevét, weboldalának címét és emailcímét adják meg tartalmukban. Ez a konstrukció megengedi a más szótárból származó elemekkel való kiterjesztését is.

\subsubsection{Törzselemek}

Az \verb+atom:+\linebreak[0]\verb+feed+ elem rendelkezik kötelező, ajánlott és opcionális gyermekelemekkel. Kötelező megadni az \verb+atom:+\linebreak[0]\verb+id+, \verb+atom:+\linebreak[0]\verb+title+ és \verb+atom:+\linebreak[0]\verb+updated+ elemeket. Ajánlott elemei legalább egy \verb+atom:+\linebreak[0]\verb+author+ és legalább egy \verb+atom:+\linebreak[0]\verb+link+ elem. Opcionálisan megadható egy vagy több \verb+atom:+\linebreak[0]\verb+category+, \verb+atom:+\linebreak[0]\verb+contributor+, egy \verb+atom:+\linebreak[0]\verb+generator+, \verb+atom:+\linebreak[0]\verb+icon+, \verb+atom:+\linebreak[0]\verb+logo+, \verb+atom:+\linebreak[0]\verb+rights+ és \verb+atom:+\linebreak[0]\verb+subtitle+ elem. Az \verb+atom:+\linebreak[0]\verb+feed+ szabadon kiterjeszthető.

Az \verb+atom:+\linebreak[0]\verb+entry+ egy feedelem leírására szolgál. Az \verb+atom:+\linebreak[0]\verb+feed+-hez hasonlóan ennek is kötelező megadni az \verb+atom:+\linebreak[0]\verb+id+, \verb+atom:+\linebreak[0]\verb+title+ és \verb+atom:+\linebreak[0]\verb+updated+ elemeket. Legalább egy \verb+atom:+\linebreak[0]\verb+author+ és egy \verb+atom:+\linebreak[0]\verb+link+ itt is javasolt, valamint egy \verb+atom:+\linebreak[0]\verb+content+ és/vagy \verb+atom:+\linebreak[0]\verb+summary+ elem, hogy tartalmat is hordozzon. Opcionálisak az \verb+atom:+\linebreak[0]\verb+category+, \verb+atom:+\linebreak[0]\verb+contributor+, \verb+atom:+\linebreak[0]\verb+published+, \verb+atom:+\linebreak[0]\verb+source+, \verb+atom:+\linebreak[0]\verb+rights+ elemek megadása (az \verb+atom:+\linebreak[0]\verb+published+ és \verb+atom:+\linebreak[0]\verb+source+ kivételével mindegyikből több is lehet).

Az \verb+atom:+\linebreak[0]\verb+content+ elem hordozza a tartalmat. Ezt úgy határozták meg, hogy szinte bármilyen tartalmat képes legyen szállítani. Ennek megfelelően egyrészt a szöveg konstrukció szabályai érvényesek rá, másrészt típusaként a \verb+atom:+\linebreak[0]\verb+type+ attribtumban megadható MIME-típus. Ha ez a típus ,,\verb-/xml-''-re vagy ,,\verb-+xml-''-re végződik, akkor az elem gyermeke tetszőleges XML tartalom lehet, ha az megfelel a MIME-típusnak. Ha nem XML-tartalomról van szó, akkor Base-64 kódolásban kell tárolni a tartalmat, vagy megadható az \verb+atom:+\linebreak[0]\verb+src+ attribútum, amely URI-val jelöli ki a hálózaton a tartalmat, ebben az esetben lehet üres ez az elem.

\subsubsection{Metaadat-elemek}

Ezek az elemek az \verb+atom:+\linebreak[0]\verb+feed+ vagy \verb+atom:+\linebreak[0]\verb+entry+ tartalmát írják le, a nevük általában önmagukért beszélnek. Az \verb+atom:+\linebreak[0]\verb+author+ és \verb+atom:+\linebreak[0]\verb+contributor+ elemek személykonstrukciók, szülőelemük készítőit jelölik. Az \verb+atom:+\linebreak[0]\verb+title+, \verb+atom:+\linebreak[0]\verb+subtitle+, \verb+atom:+\linebreak[0]\verb+summary+, \verb+atom:+\linebreak[0]\verb+rights+ elemek szövegkonstrukciók. Az \verb+atom:+\linebreak[0]\verb+updated+ és \linebreak \verb+atom:+\linebreak[0]\verb+published+ elemek dátumkonstrukciók. A fenti, máshogy nem meghatározott elemek saját leírással rendelkeznek.

Az \verb+atom:+\linebreak[0]\verb+id+ elem az egyik legalapvetőbb elem, amely biztosítja, hogy egy feed vagy feedelem azonosítható legyen, mert univerzálisan egyedi azonosító megadását követeli meg, amely a feed vagy feedelem esetleges változása esetén is megmarad. Tartalma egy URI lehet. Két ID összehasonlításánál számít a kisbetű-nagybetű különbség és az URI \verb+%+ jellel való szöktetése is. Olyannyira komolyan veszi a specifikáció az azonosítást, hogy ha két különböző dokumentumban különböző helyeken azonos ID-t detektál az aggregátor, lépéseket tehet az eredeti elem kiderítésére, mielőtt értesíti a felhasználót.

Az \verb+atom:+\linebreak[0]\verb+link+ egy másik nagyon fontos elem, számos más elemen belül megjelenhet, és rengeteg attribútuma van, úgy mint \verb+atom:+\linebreak[0]\verb+href+, \verb+atom:+\linebreak[0]\verb+rel+, \verb+atom:+\linebreak[0]\verb+type+, \verb+atom:+\linebreak[0]\verb+hreflang+, \verb+atom:+\linebreak[0]\verb+title+ és \verb+atom:+\linebreak[0]\verb+length+, ezek rendre az URI-ját, a szülőjével mint elemmel való viszonyát, a mutatott erőforrás MIME-típusát, nyelvét, címét, és hosszát határozzák meg. Az \verb+atom:+\linebreak[0]\verb+rel+ értéke \verb+alternate+, \verb+related+, \verb+self+, \verb+enclosure+ illetve \verb+via+ lehet.

Az \verb+atom:+\linebreak[0]\verb+icon+ és \verb+atom:+\linebreak[0]\verb+logo+ a vizuális reprezentációt hivatottak kifejezni, tartalmuk URI lehet. Az \verb+atom:+\linebreak[0]\verb+generator+ a feedet kiszolgáló szoftverkomponenst jelöli, két attribútuma az \verb+atom:+\linebreak[0]\verb+uri+ és \verb+atom:+\linebreak[0]\verb+version+, tartalmuk szöveges lehet.

Az \verb+atom:+\linebreak[0]\verb+category+ szolgál a feedelem besorolására, három atribútuma, az \linebreak\verb+atom:+\linebreak[0]\verb+term+, \verb+atom:+\linebreak[0]\verb+scheme+ és \verb+atom:+\linebreak[0]\verb+label+. Az első megadása kötelező, ez a besorolás vagy kategória megnevezése. A második egy URI, amely megjelöli a kategorizálás módját, a harmadik pedig egy ember által olvasható szöveges leírást ad (rendszerint megegyezhet az elsővel).

Végül \verb+atom:+\linebreak[0]\verb+source+ használható arra, hogy amikor egy már meglévő feed olvasásával hozunk létre egy másikat, megőrizzük az eredeti adatait is, amíg már a sajátot továbbítjuk. Ez az \verb+atom:+\linebreak[0]\verb+entry+ elemen belül jelenhet meg. A teljesség kedvéért lehetséges gyermekelemei: \verb+atom:+\linebreak[0]\verb+author+, \verb+atom:+\linebreak[0]\verb+category+, \verb+atom:+\linebreak[0]\verb+contributor+, \verb+atom:+\linebreak[0]\verb+generator+, \verb+atom:+\linebreak[0]\verb+icon+, \verb+atom:+\linebreak[0]\verb+id+, \verb+atom:+\linebreak[0]\verb+link+, \verb+atom:+\linebreak[0]\verb+logo+, \verb+atom:+\linebreak[0]\verb+rights+, \verb+atom:+\linebreak[0]\verb+subtitle+, \verb+atom:+\linebreak[0]\verb+title+, \verb+atom:+\linebreak[0]\verb+updated+. Ennek az elemnek a kiterjesztése megengedett (minthogy az \verb+atom:+\linebreak[0]\verb+entry+-nek is).

\subsubsection{A formátum kiterjesztése}

Az Atom szabadon kiterjeszhető tetszőleges XML-jelöléssel azokon a pontokon, ahol ez megengedett. Bármilyen elem, amely az Atom szótárában nincs benne, idegen jelölésnek tekintendő. A specifikáció megköveteli, hogy az Atomot fogyasztó feedproceszorok ne álljanak le hibával, ha olyan helyen észlelnek idegen jelölést, ahol használható. Ezek a helyek az \verb+atom:+\linebreak[0]\verb+feed+, \verb+atom:+\linebreak[0]\verb+entry+, \verb+atom:+\linebreak[0]\verb+source+ elemekben és a személyt leíró konstrukcióban vannak.

A verziókövetés új névtérrel történhet a jövőben.

\subsection{Példa egy Atom feedre}

A példa forrása \acite{atomenabled}.

\begin{CoolVerbatim}
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Example Feed</title>
  <subtitle>A subtitle.</subtitle>
  <link href="http://example.org/feed/" rel="self"/>
  <link href="http://example.org/"/>
  <updated>2003-12-13T18:30:02Z</updated>
  <author>
    <name>John Doe</name>
    <email>johndoe@example.com</email>
  </author>
  <id>urn:uuid:60a76c80-d399-11d9-b91C-0003939e0af6</id>
  <entry>
    <title>Atom-Powered Robots Run Amok</title>
    <link href="http://example.org/2003/12/13/atom03"/>
    <id>urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a</id>
    <updated>2003-12-13T18:30:02Z</updated>
    <summary>Some text.</summary>
  </entry>
</feed>
\end{CoolVerbatim}

\section{Az RSS és az Atom összehasonlítása}

Bár alapvetően ugyanazt a célt szolgálják, a két formátum számos helyen eltér. Jól látszik, hogy az Atom későbbi, a felhalmozott tapasztalatokat kihasználó formátum, és jobban figyelembe veszi az érvényben lévő szabványokat. A \cite{atomcompared} szerint a következő lényeges különbségek figyelhetők meg:

\begin{description}
	\item[Tartalom típusa]Az RSS 2.0 tartalmazhat sima szöveget vagy szöktetett HTML kódot, de nem mondja meg, hogy valójában melyiket is tartalmazza. Az Atom tartalmazhat sima szöveget, HTML, XML, XHTML és Base64-kódolt tartalmat, vagy hivatkozást egy külső tartalomra, típusmegjelöléssel.
	\item[Tartalom]Az RSS 2.0 egy \verb+description+ elemben tárolja a tartalmat, ami lehet egy összefoglaló vagy teljes szöveg. Az Atom külön \verb+atom:+\linebreak[0]\verb+summary+ és \verb+atom:+\linebreak[0]\verb+content+ elemeket definiál, és az \verb+atom:+\linebreak[0]\verb+summary+ megadása javasolt, ha a tartalom nem szöveges.
	\item[Névterek]Az Atom névtérben definiált, az RSS 2.0 viszont nem.
	\item[Relatív URI-k]Az Atom az XML-be beépített \verb+xml:+\linebreak[0]\verb+base+-t használja a relatív URI-k feloldásánál. Az RSS 2.0-ban ez nem definiált.
	\item[Nyelv]Az Atom az XML-be beépített \verb+xml:+\linebreak[0]\verb+lang+ attribútumot használja a nyelv megjelölésére, az RSS 2.0 saját \verb+language+ elemét.
	\item[Azonosítók]Az Atom megköveteli, hogy minden bejegyzés saját \emph{globálisan egyedi ID-vel} rendelkezzen, ami a bejegyzések megbízható frissítéséhez elengedhetetlen.
	\item[Érvényes feed]Az Atom 1.0 megengedi, hogy a dokumentum egyetlen bejegyzésből álljon, az RSS 2.0 a teljes feedet fogad el dokumentumként.
	\item[Dátumok]Az Atom rögzíti a dátumok formátumát az RFC 3339-nek megfelelően (mely az ISO 8601-nek megfelel), az RSS 2.0 nem, ezért ott több különböző formátum terjedt el.
	\item[MIME-típus]Az Atom MIME-típusa \verb-application/-\linebreak[0]\verb-atom+xml-, melyet az IANA regisztrált. Az RSS 2.0 nem rendelkezik regisztrált MIME-típussal, de gyakran az \verb-application/-\linebreak[0]\verb-rss+xml--t használják.
	\item[XML séma]Az Atom rendelkezik XML-sémával, az RSS 2.0 nem.
	\item[Standard]Az Atom az IETF által standardizált, nyílt és fejleszthető standard. Az RSS nem standard, és nem fejleszthető szabadon.
	\item[Digitális aláírás]Az Atom 1.0 rendelkezik arról, hogyan lehet rá XML digitális aláírás alkalmazni.
	\item[Elterjedtség]Az RSS 1.0 és 2.0 még mindig elterjedtebb és széles körben használt. Általában preferált formátum az Atom-mal szemben. Sok oldal csak egy formátumban publikálja feedjeit, ez gyakrabban az RSS. Gyakran az Atom-ra is RSS-ként hivatkoznak.
\end{description}

\section{Konklúzió}

A két formátum versengésének a mai napig tanúi lehetünk. A frissített tartalmak és epizodikus weboldalak szállítására számos példát láttunk jóval a technikák elterjedését megelőzően is. A technikák és formátumok időközben folyamatosan fejlődtek, és mára a két komolyabb versenyző maradt, az RSS és az Atom. Amellett, hogy az RSS korábbi és mostanáig is nagyobb ismertséget és népszerűséget élvez, mint az Atom, nem lehet elmenni nyilvánvaló hibái mellett.

Az RSS kezdeti egyszerűségében majdnem használhatatlan volt arra, amire ma használják, Dave Winer ScriptingNews formátuma nagyobb potenciállal rendelkezhetett, ráadásul egy olyan RDF-en alapult, amely végső kiadására megváltozott. A következő verzióban már letisztították az RDF-et, de ezzel inkompatibilissé lett, egyúttal gyakorlatilag magába olvasztotta a ScriptingNews fontos elemeit. A Netscape hanyatlásakor azonban gazdátlanul maradt, és a fejlesztése több ágon folytatódott, ráadásul nem vettek figyelembe számos tényezőt, nem szabályoztak sok kérdést, így aztán a fejlesztők saját belátásuk szerint dolgoztak a formátummal. Több verzióra fel kellett készíteni a szoftvereket (egyes források kilenc különböző, inkompatibilis verziót említenek).

Bár az Atom fejlesztése is megtorpant egy időre, mégis sikerült egy ágon tartani a fejlesztését, amelybe gyakorlatilag bárki beleszólhatott, egy közösség döntött a funkciók, módszerek, formátumok befoglalásáról vagy kizárásáról. A szervezet végül sikerrel vitte végig az IETF-en a standardizálási folyamatot. Ebben feltétlenül szerepet játszott a projekt nyíltsága és a már meglévő szabványok felhasználása. A fejlesztők számára is egyszerűbb egyetlen verzióval, meglévő eszközökkel és meghatározott szabályok között dolgozni, olyan formátummal, amely ráadásul szabadon fejleszthető.

Fontos megjegyezni, hogy az RSS 1.0 az RDF-et alapul véve jobban átgondoltan, az RDF mint erőforrásleíró nyelv szellemében tartalmazza egy weboldal összefoglalását, amely elősegítheti a szemantikus web fejlődését.\footnote{A szemantikus web fejlődése nehéz folyamat lehet, mert alapvetően a ,,tyúk vagy tojás'' problémában szenved: amíg nincs fogyasztó, nincs értelme RDF-et előállítani; és fordítva - amíg nincs RDF-et előállító szoftver, nem lesz olyan sem, amely felhasználná azt.}

Bár az RSS elerjedtsége jelenleg nagyobb mint az Atomé, munkámat elsősorban az Atom köré építem, egyrészt a magasabb fokú interoperabilitás érdekében, másrészt az Atom mint szabványos formátum terjesztéséért.
