4.1. Taşıyıcı Elemanlar

4.1.1. "atom:feed" Elemanı

"atom:feed" elemanı bir Atom Ulama Belgesinin belge (yani, tepe seviyeden) elemanıdır yani, ulam ile ilgili veri ve öteveri için bir taşıyıcıdır. Çocuk elemanları, öteveri elemanlarını takibeden sıfır veya daha fazla sayıda atom:entry elemanından oluşur.

atomFeed =
   element atom:feed {
      atomCommonAttributes,
      (atomAuthor*
       & atomCategory*
       & atomContributor*
       & atomGenerator?
       & atomIcon?
       & atomId
       & atomLink*
       & atomLogo?
       & atomRights?
       & atomSubtitle?
       & atomTitle
       & atomUpdated
       & extensionElement*),
      atomEntry*
   }

Bu belirtim, atom:feed içindeki atom:entry elemanları arasında bir öncelik belirtmez.

Bu belirtim tarafından tanımlanan çocuk elemanlar (bu elemanların bazılarının varlığı gereklidir):

  • atom:feed elemanının atom:entry çocuklarının her biri en azından birer atom:author elemanı içermedikçe, atom:feed elemanlarının bir veya daha fazla sayıda atom:author elemanı içermesi gerekir *ZORUNLU*.
  • atom:feed elemanları herhangi bir sayıda atom:category elemanı içerebilir *SEÇİMLİK*.
  • atom:feed elemanları herhangi bir sayıda atom:contributor elemanı içerebilir *SEÇİMLİK*.
  • atom:feed elemanlarının birden fazla atom:generator elemanı içermemesi gerekir *ZORUNLU*.
  • atom:feed elemanlarının birden fazla atom:icon elemanı içermemesi gerekir *ZORUNLU*.
  • atom:feed elemanlarının birden fazla atom:logo elemanı içermemesi gerekir *ZORUNLU*.
  • atom:feed elemanlarının, ne eksik ne fazla tam olarak bir tane atom:id elemanı içermesi gerekir *ZORUNLU*.
  • atom:feed elemanları, "self" değerli bir rel özniteliği olan tek bir atom:link elemanı içermelidir *ÖNERİ*. Bu atom:link elemanının içeriği Atom Ulama Belgelerinin alınacağı, Atom ulamını sunan yerin tercihli adresidir (URI).
  • atom:feed elemanları, "alternate" değerli bir rel özniteliği olup aynı zamanda type ve hreflang özniteliklerinde de aynı değerlere sahip birden fazla atom:link elemanı içermemelidir *ZORUNLU*.
  • atom:feed elemanları, yukarıda açıklananlar dışında başka atom:link elemanları içerebilir *SEÇİMLİK*.
  • atom:feed elemanlarının birden fazla atom:rights elemanı içermemesi gerekir *ZORUNLU*.
  • atom:feed elemanlarının birden fazla atom:subtitle elemanı içermemesi gerekir *ZORUNLU*.
  • atom:feed elemanlarının, ne eksik ne fazla tam olarak bir tane atom:title elemanı içermesi gerekir *ZORUNLU*.
  • atom:feed elemanlarının, ne eksik ne fazla tam olarak bir tane atom:updated elemanı içermesi gerekir *ZORUNLU*.

Eğer bir Atom Ulama Belgesinde aynı atom:id değerli çok sayıda atom:entry elemanı görünüyorsa, bunlar aynı girdiyi ifade ediyor demektir. Bunların atom:updated zaman damgaları farklı olmalıdır *ÖNERİ*.

Eğer bir Atom Ulama Belgesi aynı atom:id ile çok sayıda girdi içeriyorsa, Atom İşlemcileri bunların tümünü göstermeyi seçebilecekleri gibi bir kısmını da gösterebilir. Tipik bir davranış, en yeni atom:updated zaman damgasını içeren girdiyi göstermek olurdu.

4.1.1.1. Metinsel İçeriğin Sağlanması

Deneyimler, ulamların metinsel içeriği içermesinin içermemesinden genelde daha faydalı olduğunu öğretmektedir. Bazı uygulamalar (tamamen metin dizinleri üretenler gibi), işlevlerini yerine getirebilmek için az da olsa metin veya (X)HTML içerik gerektirir. Ulam üreticilerinin bu gibi hususlardan haberi olması gerekir. Her atom:entry elemanının, içerdiği takdirde atom:title ve atom:content elemanlarının içeriğinin boş olmaması ve atom:content içermemesi halinde, boş olmayan bir atom:summary elemanı içermesi tercih edilmelidir. Bununla birlikte, bir atom:summary elemanının yokluğu bir hata değildir ve Atom İşlemcilerinin böyle bir yokluk durumunda başarısızlık göstermemesi gerekir *ZORUNLU*.

4.1.2. "atom:entry" Elemanı

atom:entry elemanı, girdi ile ilgili veri ve öteveri için bir taşıyıcı görevi görmesi bakımından başlıbaşına bir girdi içerir. Bir atom:feed elemanının bir çocuğu olarak karşımıza çıkabileceği gibi tek başına bir Atom Girdi Belgesinin belge (yani, tepe seviyeden) elemanı olarak da karşımıza çıkabilir.

atomEntry =
   element atom:entry {
      atomCommonAttributes,
      (atomAuthor*
       & atomCategory*
       & atomContent?
       & atomContributor*
       & atomId
       & atomLink*
       & atomPublished?
       & atomRights?
       & atomSource?
       & atomSummary?
       & atomTitle
       & atomUpdated
       & extensionElement*)
   }

Bu belirtim atom:entry elemanının çocukları arasında bir öncelik belirtmez.

Bu belirtim tarafından tanımlanan çocuk elemanlar (bu elemanların bazılarının varlığı gereklidir):

  • Bir atom:entry elemanı içinde, bir atom:author elemanı içeren bir atom:source elemanı veya bir Atom Ulama Belgesi içinde, kendi atom:author elemanını içeren bir atom:feed elemanı olmadıkça atom:entry elemanlarının bir veya daha fazla sayıda atom:author elemanı içermesi gerekir *ZORUNLU*.
  • atom:entry elemanları herhangi bir sayıda atom:category elemanı içerebilir *SEÇİMLİK*.
  • atom:entry elemanları birden fazla sayıda atom:content elemanı içermemelidir *ZORUNLU*.
  • atom:entry elemanları herhangi bir sayıda atom:contributor elemanı içerebilir *SEÇİMLİK*.
  • atom:entry elemanlarının, ne eksik ne fazla tam olarak bir tane atom:id elemanı içermesi gerekir *ZORUNLU*.
  • Hiç atom:content çocuğu olmayan atom:entry elemanlarının, değeri "alternate" olan bir rel özniteliğine sahip en az bir atom:link elemanı olmalıdır *ZORUNLU*.
  • atom:entry elemanları, "alternate" değerli bir rel özniteliği olup aynı zamanda type ve hreflang özniteliklerinde de aynı değerlere sahip birden fazla atom:link elemanı içermemelidir *ZORUNLU*.
  • atom:entry elemanları, yukarıda açıklananlar dışında başka atom:link elemanları içerebilir *SEÇİMLİK*.
  • atom:entry elemanları birden fazla sayıda atom:published elemanı içermemelidir *ZORUNLU*.
  • atom:entry elemanları birden fazla sayıda atom:rights elemanı içermemelidir *ZORUNLU*.
  • atom:entry elemanları birden fazla sayıda atom:source elemanı içermemelidir *ZORUNLU*.
  • atom:entry elemanları şu iki durumdan birinde bir atom:summary elemanı içermelidir *ZORUNLU*:

    • atom:entry elemanı, bir "src" özniteliğine sahip (bu nedenle boştur) bir atom:content elemanı içeriyordur.
    • atom:entry elemanı Base64 kodlu bir içeriğe sahiptir; yani, atom:content elemanının "type" özniteliği bir MIME ortam türüdür [MIMEREG], ama bir XML ortam türü [RFC3023] değildir, "text/" ile başlamıyor ve "/xml" veya "+xml" ile bitmiyordur.
  • atom:entry elemanları birden fazla sayıda atom:summary elemanı içermemelidir *ZORUNLU*.
  • atom:entry elemanlarının, ne eksik ne fazla tam olarak bir tane atom:title elemanı içermesi gerekir *ZORUNLU*.
  • atom:entry elemanlarının, ne eksik ne fazla tam olarak bir tane atom:updated elemanı içermesi gerekir *ZORUNLU*.

4.1.3. atom:content Elemanı

atom:content elemanı bir girdiyi ya içerir ya da içeriğe bir bağlantı olur. atom:content elemanının içeriği lisana duyarlıdır.

atomInlineTextContent =
   element atom:content {
      atomCommonAttributes,
      attribute type { "text" | "html" }?,
      (text)*
   }

atomInlineXHTMLContent =
   element atom:content {
      atomCommonAttributes,
      attribute type { "xhtml" },
      xhtmlDiv
   }

atomInlineOtherContent =
   element atom:content {
      atomCommonAttributes,
      attribute type { atomMediaType }?,
      (text|anyElement)*
   }

atomOutOfLineContent =
   element atom:content {
      atomCommonAttributes,
      attribute type { atomMediaType }?,
      attribute src { atomUri },
      empty
   }

atomContent = atomInlineTextContent
 | atomInlineXHTMLContent
 | atomInlineOtherContent
 | atomOutOfLineContent
"type" Özniteliği

atom:content elemanında type özniteliğinin değeri "text", "html" veya "xhtml" olabilir *SEÇİMLİK*. Bu mümkün olmazsa, değerin bir MIME ortam türü sözdizimine uygun olması *ZORUNLU* ama birleşik bir tür olmaması gerekir *ZORUNLU* ([MIMEREG] belgesinin 4.2.6. bölümüne bakınız). Eğer ne type ne de src özniteliği sağlanmışsa, Atom İşlemcileri "text" değerli bir type özniteliği varmış gibi davranmalıdır.

"src" Özniteliği

atom:content bir src özniteliğine sahip olabilir *SEÇİMLİK*, ancak, değerinin bir uluslararası adres (IRI) [RFC3987] olması gerekir *ZORUNLU*. src özniteliği sağlanmışsa, atom:content içeriği boş olmalıdır *ZORUNLU*. Atom İşlemcileri içeriği almak için bu IRI'yi kullanabilir *SEÇİMLİK* veya uzak içeriği yoksaymayı ya da yerel içerikten farklı bir anlamda içermeyi seçebilir *SEÇİMLİK*.

src özniteliği sağlanmışsa, type özniteliği de sağlanmalı *ÖNERİ* ancak değeri "text", "html" veya "xhtml" değil bir MIME ortam türü [MIMEREG] olmalıdır *ZORUNLU*. Değer tavsiye niteliğindedir; içeriği sağlayan sunucu ayrıca bir ortam türü de sağlıyorsa. sunucu tarafından sağlanan ortam türü yetkindir.

4.1.3.1. İşlem Modeli

Atom Belgelerinin aşağıdaki kurallara uygun olması gerekir *ZORUNLU*. Atom İşlemcilerinin atom:content içeriğini uygulanabilir olan ilk kurala göre yorumlaması gerekir *ZORUNLU*.

  1. type değeri "text" ise, atom:content çocuk elemanlar içermemelidir *ZORUNLU*. Böyle bir metnin insanlarca okunabilecek şekilde içerileceği düşünülür. Bu nedenle, Atom İşlemcileri fazla boşlukları atabilir ve metni hizalamak ve özel yazıtipleri kullanmak gibi tekniklerle göze daha hoş gösterebilir *SEÇİMLİK*.

  2. type değeri "html" ise, atom:content çocuk elemanlar içermemeli *ZORUNLU* ve içerik HTML [HTML] olarak işlenmeye uygun olmalıdır *ÖNERİ*. HTML imleme öncelenmelidir; örneğin, "<br>" yerine "&lt;br>" yazılmalıdır. HTML imleme, önceleme kaldırıldıktan sonra doğrudan bir HTML <DIV> elemanı içinde geçerli kalacak şekilde yapılmalıdır *ÖNERİ*. İçeriği gösteren Atom İşlemcileri imlemeyi gösterime yardımcı olarak kullanabilir *SEÇİMLİK*.

  3. type değeri "xhtml" ise, atom:content çocuk eleman olarak tek bir XHTML div elemanı içermelidir *ZORUNLU*. İçerik, XHTML olarak işlenmeye elverişli olmalıdır *ÖNERİ*. XHTML div elemanının kendisi içeriğin parçası olarak ele alınmamalıdır *ZORUNLU*. İçeriği gösteren Atom İşlemcileri imlemeyi gösterime yardımcı olarak kullanabilir *SEÇİMLİK*. "&" ve "<" gibi karakterlerin öncelenmiş sürümleri imleme belirtmez, karakterlerin kendilerini ifade eder.

  4. type değeri bir XML ortam türü [RFC3023] ise veya "+xml" veya "/xml" (harf büyüklüğüne duyarsız) ile bitiyorsa, atom:content çocuk elemanlar içerebilir *SEÇİMLİK* ancak, belirtilen ortam türünde işlenmeye elverişli olmalıdır *ÖNERİ*. Eğer "src" özniteliği sağlanmamışsa, bu normalde, atom:content'in belirtilen türdeki XML belgenin kök elemanı olarak tek bir çocuk eleman içerdiği anlamına gelir.

  5. type değeri "text/" (harf büyüklüğüne duyarsız) ile başlıyorsa, atom:content çocuk elemanlar içeremez *ZORUNLU*.

  6. type özniteliğinin diğer tüm değerleri için atom:content içeriğinin [RFC3548] belgesinin 3. bölümünde açıklandığı gibi Base64 kodlu geçerli bir içerik olması gerekir *ZORUNLU*. Kodu çözüldüğünde, belirtilen ortam türünde işlenmeye elverişli olmalıdır *ÖNERİ*. Bu durumda, atom:content içinde, Base64 kodlamadaki karakterlerin önüne ve ardına boşluklar eklenmiş ve satırlar tek bir satır-sonu karakteri (U+000A) ile ayrılmış olabilir *SEÇİMLİK*.

4.1.4. Örnekler

XHTML içinde:

...
<content type="xhtml">
   <div xmlns="http://www.w3.org/1999/xhtml">
      This is <b>XHTML </b> content.
   </div>
</content>
...
<content type="xhtml">
   <xhtml:div xmlns:xhtml="http://www.w3.org/1999/xhtml">
      This is <xhtml:b>XHTML </xhtml:b> content.
   </xhtml:div>
</content>
...

Aşağıdaki örnekte, XHTML isim alanının, belgenin başlarında "xh" önekine bağlandığı varsayılmıştır:

...
<content type="xhtml">
   <xh:div>
      This is <xh:b>XHTML </xh:b> content.
   </xh:div>
</content>
...