# Atom (Format)

Atom wird in der Computertechnik als Oberbegriff für zwei Standards genutzt:
* das Atom Syndication Format (ASF), ein XML-Format, ermöglicht den plattformunabhängigen Austausch von Informationen z. B. für Web-Feeds.
* das Atom Publishing Protocol (APP, wobei sich AtomPub eingebürgert hat) wurde geschaffen, um das Erstellen und Bearbeiten von Webressourcen auf der Basis von einfachem HTML und XML zu ermöglichen.
Die beiden Atom-Standards bieten somit die Möglichkeit, Webinhalte zu verbreiten (ASF) und zu bearbeiten (APP).

## Atom Syndication Format

Das Syndikationsformat (ASF) ist die am häufigsten anzutreffende Umsetzung der Atom-Standards. ASF wird entwickelt, um die Nachfolge von RSS anzutreten. Es ist die moderne Form eines Newsletters.
Atom entstand aus dem Bedürfnis heraus, die Vorteile der unterschiedlichen RSS-Formate in einem neuen Format zusammenzufassen und um neue Elemente zu ergänzen. Dabei haben die Entwickler – in überwiegender Mehrzahl Blogger – ASF auch so gestaltet, um den speziellen Bedürfnissen von Blogs und Nachrichtenseiten gerecht zu werden. Die maßgeblichen Unterstützer von Atom sind in der Industrievereinigung AtomEnabled Alliance organisiert.
Die aktuelle Version des Atom Syndication Formats ist der IETF-Entwurf vom 11. August 2005, welcher von der IESG im August 2005 als Proposed Standard verabschiedet und im Dezember 2005 als RFC 4287 veröffentlicht wurde. Die meisten größeren Feed-Anbieter arbeiten bereits daran, das Format zu unterstützen. Der MIME-Typ von Atom ist application/atom+xml.
Das Aufbereiten von Informationen in ein standardisiertes Austauschformat nennt man auch Aggregation.

### Unterschiedliche Inhaltstypen

Die hauptsächliche Besonderheit von Atom gegenüber RSS ist die Möglichkeit, dass bei inhaltstragenden Elementen ausdrücklich angegeben werden kann, in welchem Format die Inhalte kodiert sind. In RSS 2.0 beispielsweise kann im description-Element reiner Text oder maskiertes HTML stehen, ohne dass ein verarbeitendes Programm weiß, worum es sich gerade handelt. Atom fordert eine Eindeutigkeit, indem inhaltstragende Elemente ein type-Attribut bekommen. Neben reinem Text und maskiertem HTML ist es zudem möglich, direkt XHTML-Markup mit Namensraum-Angabe einzubetten. Sinnvoll ist XHTML aber vor allem im content-Element.
Beispiel für reinen Text im title-Element:
Das type-Attribut kann in diesem Fall auch weggelassen werden, da text der Standardwert des Attributs ist.
Beispiel für HTML im summary-Element:
Die HTML-eigenen Zeichen <, > und & werden mit den Entity-Referenzen &lt;, &gt; und &amp; umschrieben. Alternativ kann der Inhalt in einem CDATA-Abschnitt untergebracht werden:
Beispiel für XHTML im content-Element:
Das content-Element bekommt ein div-Element aus dem XHTML-Namensraum als Kind. Darin können weitere XHTML-Elemente direkt notiert werden.

## Atom-Programmierschnittstelle (AtomPub)

Die Atom-Programmierschnittstelle kann beispielsweise genutzt werden, um mit einer Client-Applikation auf die in einer Weblog-Software hinterlegten Inhalte Einfluss zu nehmen.

### Funktionsweise

Die Kommunikation mit dem System funktioniert nach dem REST-Prinzip:

#### GET

    um Informationen über bereits vorhandene Elemente einzuholen und andere Nur-Lese-Zugriffe auszuführen.

#### PUT

    um ein bekanntes Element zu bearbeiten.

#### POST

    kreiert ein neues, dynamisch benanntes Element.

#### DELETE

    führt zur Löschung eines Elementes.
Diese Aktionen werden in Verbindung mit den drei hauptsächlichen URIs verwendet, wobei das Datenaustauschformat ein so genannter „Atom Entry“ ist, ein Fragment/Eintrag eines vollen Atom-Feeds.

#### PostURI

    erwartet POST. Wird verwendet, um neue Elemente anzulegen. Schickt man einen Atom Entry an diese URI, so wird ein neues Element erzeugt.

#### EditURI

    erwartet PUT, GET oder DELETE. Wird zum Bearbeiten von Elementen benötigt. Auch hier erfolgt der Datenaustausch über den Atom Entry.

#### FeedURI

    erwartet GET. Repräsentiert ein komplettes Atom-Feed.
Die Atom-Programmierschnittstelle und das Atom Syndication Format ergänzen sich somit.