<commit_before>Feed specifications
~~~~~~~~~~~~~~~~~~~

This document lists the various feed types supported by the Feed component,
general information about each feed type, and the related specifications
documents and RFCs.

.. contents:: Table of Contents


Feeds equivalence
=================

Feed elements
-------------

+----------------------------+-------------------------+----------------------------+---------------------------+
|         ezcFeed            |           ATOM          |            RSS1            |           RSS2            |
+============================+=========================+============================+===========================+
| |ezcFeed-id|_ !            | |ATOM-id|_ !            | |RSS1-about|_ !            | x                         |
+----------------------------+-------------------------+----------------------------+---------------------------+
| |ezcFeed-title|_ !         | |ATOM-title|_ !         | |RSS1-title|_ !            | |RSS2-title|_ !           |
+----------------------------+-------------------------+----------------------------+---------------------------+
| |ezcFeed-updated|_ !       | |ATOM-updated|_ !       | x                          | |RSS2-lastBuildDate|_ ?   |
+----------------------------+-------------------------+----------------------------+---------------------------+
| |ezcFeed-author|_ !*       | |ATOM-author|_ !*       | x                          | |RSS2-managingEditor|_ ?  |
+----------------------------+-------------------------+----------------------------+---------------------------+
| |ezcFeed-description|_ !   | |ATOM-subtitle|_ ?      | |RSS1-description|_ !      | |RSS2-description|_ !     |
+----------------------------+-------------------------+----------------------------+---------------------------+
| |ezcFeed-link|_ !*         | |ATOM-link|_ !*         | |RSS1-link|_ !             | |RSS2-link|_ !            |
+----------------------------+-------------------------+----------------------------+---------------------------+
| |ezcFeed-image|_ ?         | |ATOM-logo|_ ?          | |RSS1-image|_ ?            | |RSS2-image|_ ?           |
+----------------------------+-------------------------+----------------------------+---------------------------+
| |ezcFeed-category|_ ?*     | |ATOM-category|_ ?*     | x                          | |RSS2-category|_ ?*       |
+----------------------------+-------------------------+----------------------------+---------------------------+
| |ezcFeed-copyright|_ ?     | |ATOM-rights|_ ?        | x                          | |RSS2-copyright|_ ?       |
+----------------------------+-------------------------+----------------------------+---------------------------+
| |ezcFeed-generator|_ ?     | |ATOM-generator|_ ?     | x                          | |RSS2-generator|_ ?       |
+----------------------------+-------------------------+----------------------------+---------------------------+
| |ezcFeed-ttl|_ ?           | x                       | x                          | |RSS2-ttl|_ ?             |
+----------------------------+-------------------------+----------------------------+---------------------------+
| |ezcFeed-skipHours|_ ?     | x                       | x                          | |RSS2-skipHours|_ ?       |
+----------------------------+-------------------------+----------------------------+---------------------------+
| |ezcFeed-skipDays|_ ?      | x                       | x                          | |RSS2-skipDays|_ ?        |
+----------------------------+-------------------------+----------------------------+---------------------------+
| |ezcFeed-rating|_ ?        | x                       | x                          | |RSS2-rating|_ ?          |
+----------------------------+-------------------------+----------------------------+---------------------------+
| |ezcFeed-cloud|_ ?         | x                       | x                          | |RSS2-cloud|_ ?           |
+----------------------------+-------------------------+----------------------------+---------------------------+
| |ezcFeed-webMaster|_ ?     | x                       | x                          | |RSS2-webMaster|_ ?       |
+----------------------------+-------------------------+----------------------------+---------------------------+
| |ezcFeed-language|_ ?      | x                       | x                          | |RSS2-language|_ ?        |
+----------------------------+-------------------------+----------------------------+---------------------------+
| |ezcFeed-textInput|_ ?     | x                       | |RSS1-textinput|_ ?        | |RSS2-textInput|_ ?       |
+----------------------------+-------------------------+----------------------------+---------------------------+
| |ezcFeed-icon|_ ?          | |ATOM-icon|_ ?          | x                          | x                         |
+----------------------------+-------------------------+----------------------------+---------------------------+
| |ezcFeed-contributor|_ ?   | |ATOM-contributor|_ ?*  | x                          | x                         |
+----------------------------+-------------------------+----------------------------+---------------------------+
| |ezcFeed-item|_ !*         | |ATOM-entry|_ ?*        | |RSS1-item|_ !*            | |RSS2-item|_ !*           |
+----------------------------+-------------------------+----------------------------+---------------------------+

| ! = required
| ? = optional
| * = can appear multiple times
| x = no equivalence


Item elements
-------------

+---------------------------------+-------------------------------+------------------------------+------------------------------+
|           ezcFeed               |            ATOM               |             RSS1             |            RSS2              |
+=================================+===============================+==============================+==============================+
| |ezcFeed-item-id|_ !            | |ATOM-entry-id|_ !            | |RSS1-item-about|_ !         | |RSS2-item-guid|_ ?          |
+---------------------------------+-------------------------------+------------------------------+------------------------------+
| |ezcFeed-item-title|_ !         | |ATOM-entry-title|_ !         | |RSS1-item-title|_ !         | |RSS2-item-title|_ !         |
+---------------------------------+-------------------------------+------------------------------++-----------------------------+
| |ezcFeed-item-updated|_ !       | |ATOM-entry-updated|_ !       | x                            | x                            |
+---------------------------------+-------------------------------+------------------------------+------------------------------+
| |ezcFeed-item-author|_ !*       | |ATOM-entry-author|_ !*       | x                            | |RSS2-item-author|_ ?        |
+---------------------------------+-------------------------------+------------------------------+------------------------------+
| |ezcFeed-item-link|_ !*         | |ATOM-entry-link|_ !*         | |RSS1-item-link|_ !          | |RSS2-item-link|_ !          |
+---------------------------------+-------------------------------+------------------------------+------------------------------+
| |ezcFeed-item-description|_ !   | |ATOM-entry-summary|_ !       | |RSS1-item-description|_ !   | |RSS2-item-description|_ !   |
+---------------------------------+-------------------------------+------------------------------+------------------------------+
| |ezcFeed-item-published|_ ?     | |ATOM-entry-published|_ ?     | x                            | |RSS2-item-pubDate|_ ?       |
+---------------------------------+-------------------------------+------------------------------+------------------------------+
| |ezcFeed-item-category|_ ?*     | |ATOM-entry-category|_ ?*     | x                            | |RSS2-item-category|_ ?*     |
+---------------------------------+-------------------------------+------------------------------+------------------------------+
| |ezcFeed-item-copyright|_ ?     | |ATOM-entry-rights|_ ?        | x                            | x                            |
+---------------------------------+-------------------------------+------------------------------+------------------------------+
| |ezcFeed-item-contributor|_ ?*  | |ATOM-entry-contributor|_ ?*  | x                            | x                            |
+---------------------------------+-------------------------------+------------------------------+------------------------------+
| |ezcFeed-item-comments|_ ?      | x                             | x                            | |RSS2-item-comments|_ ?      |
+---------------------------------+-------------------------------+------------------------------+------------------------------+
| |ezcFeed-item-enclosure|_ ?     | |ATOM-entry-link|_ ?*         | x                            | |RSS2-item-enclosure|_ ?     |
+---------------------------------+-------------------------------+------------------------------+------------------------------+

| ! = required
| ? = optional
| * = can appear multiple times
| x = no equivalence


ezcFeed
=======

Specifications
--------------


Feed elements
-------------

ezcFeed-author
``````````````


ezcFeed-category
````````````````


ezcFeed-cloud
`````````````

Allows processes to register with a cloud to be notified of updates to the
channel, implementing a lightweight publish-subscribe protocol for RSS feeds.

Optional (not recommended). Only `RSS2`_ feeds will have this element after
generating the feed. It will be ignored for the other feed types
(`RSS1`_, `ATOM`_).

Can appear only once.

Has the required attributes: *domain*, *port*, *path*, *registerProcedure*,
*protocol*.

Create example::

  // $feed is an ezcFeed object
  $cloud = $feed->add( 'cloud' );
  $cloud->domain = 'rpc.sys.com';
  $cloud->port = 80;
  $cloud->path = '/RPC2';
  $cloud->registerProcedure = 'myCloud.rssPleaseNotify';
  $cloud->protocol = 'xml-rpc';

Parse example::

  // $feed is an ezcFeed object
  $cloud = $feed->cloud;
  $domain = $cloud->domain;
  $port = $cloud->port;
  $path = $cloud->path;
  $registerProcedure = $cloud->registerProcedure;
  $protocol = $cloud->protocol;

Equivalents: `ezcFeed-cloud`_, ATOM-none, RSS1-none, `RSS2-cloud`_.


ezcFeed-contributor
```````````````````


ezcFeed-copyright
`````````````````


ezcFeed-description
```````````````````


ezcFeed-generator
`````````````````


ezcFeed-icon
````````````


ezcFeed-id
``````````


ezcFeed-image
`````````````


ezcFeed-item
````````````

Feed entry.

Optional (recommended) for ATOM. Required for RSS1 and RSS2.

Multiple entries can appear.

Create example::

  // $feed is an ezcFeed object
  $item = $feed->add( 'item' );

  // set $item properties, for example:
  $item->title = 'Item title';

Parse example::

  // $feed is an ezcFeed object
  foreach ( $feed->items as $item )
  {
      // get $item properties, for example:
      $title = $item->title;
  }

Equivalents: `ezcFeed-item`_, `ATOM-entry`_, `RSS1-item`_, `RSS2-item`_.


ezcFeed-language
````````````````


ezcFeed-link
````````````


ezcFeed-rating
``````````````


ezcFeed-skipDays
````````````````

A hint for aggregators telling them which days they can skip when reading the
feed.

Optional (not recommended). Only `RSS2`_ feeds will have this element after
generating the feed. It will be ignored for the other feed types
(`RSS1`_, `ATOM`_).

Can appear only once.

Can have up to 7 *day* elements, each with a value from ``Monday`` to ``Sunday``.

Create example::

  // $feed is an ezcFeed object
  $skip = $feed->add( 'skipDays' );
  $day = $skip->add( 'day' );
  $day->set( 'Monday' );
  $day = $skip->add( 'day' );
  $day->set( 'Friday' );

Parse example::

  // $feed is an ezcFeed object
  $days = array( 'Monday' => false, /*...*/ 'Sunday' => false );
  foreach ( $feed->skipDays as $skip )
  {
      $days[$skip->get()] = true;
  }

Equivalents: `ezcFeed-skipDays`_, ATOM-none, RSS1-none, `RSS2-skipDays`_.


ezcFeed-skipHours
`````````````````

A hint for aggregators telling them which hours they can skip when reading the
feed.

Optional (not recommended). Only `RSS2`_ feeds will have this element after
generating the feed. It will be ignored for the other feed types
(`RSS1`_, `ATOM`_).

Can appear only once.

Can have up to 24 *hour* elements, each with an integer value from ``0``
(midnight) to ``23``. The value ``24`` can also be used for midnight.

Create example::

  // $feed is an ezcFeed object
  $skip = $feed->add( 'skipHours' );
  $day = $skip->add( 'hour' );
  $day->set( '1' );
  $day = $skip->add( 'hour' );
  $day->set( '7' );

Parse example::

  // $feed is an ezcFeed object
  $hours = array( '0' => false, /*...*/ '24' => false );
  foreach ( $feed->skipHours as $skip )
  {
      $hours[$skip->get()] = true;
  }

Equivalents: `ezcFeed-skipHours`_, ATOM-none, RSS1-none, `RSS2-skipHours`_.


ezcFeed-textInput
`````````````````


ezcFeed-title
`````````````


ezcFeed-ttl
```````````


ezcFeed-updated
```````````````


ezcFeed-webMaster
`````````````````


Item elements
-------------

ezcFeed-item-author
```````````````````


ezcFeed-item-category
`````````````````````


ezcFeed-item-comments
`````````````````````


ezcFeed-item-contributor
````````````````````````<commit_msg>- Added some ezcFeed elements (description, title, textInput).<commit_after>Feed specifications
~~~~~~~~~~~~~~~~~~~

This document lists the various feed types supported by the Feed component,
general information about each feed type, and the related specifications
documents and RFCs.

.. contents:: Table of Contents


Feeds equivalence
=================

Feed elements
-------------

+----------------------------+-------------------------+----------------------------+---------------------------+
|         ezcFeed            |           ATOM          |            RSS1            |           RSS2            |
+============================+=========================+============================+===========================+
| |ezcFeed-id|_ !            | |ATOM-id|_ !            | |RSS1-about|_ !            | x                         |
+----------------------------+-------------------------+----------------------------+---------------------------+
| |ezcFeed-title|_ !         | |ATOM-title|_ !         | |RSS1-title|_ !            | |RSS2-title|_ !           |
+----------------------------+-------------------------+----------------------------+---------------------------+
| |ezcFeed-updated|_ !       | |ATOM-updated|_ !       | x                          | |RSS2-lastBuildDate|_ ?   |
+----------------------------+-------------------------+----------------------------+---------------------------+
| |ezcFeed-author|_ !*       | |ATOM-author|_ !*       | x                          | |RSS2-managingEditor|_ ?  |
+----------------------------+-------------------------+----------------------------+---------------------------+
| |ezcFeed-description|_ !   | |ATOM-subtitle|_ ?      | |RSS1-description|_ !      | |RSS2-description|_ !     |
+----------------------------+-------------------------+----------------------------+---------------------------+
| |ezcFeed-link|_ !*         | |ATOM-link|_ !*         | |RSS1-link|_ !             | |RSS2-link|_ !            |
+----------------------------+-------------------------+----------------------------+---------------------------+
| |ezcFeed-image|_ ?         | |ATOM-logo|_ ?          | |RSS1-image|_ ?            | |RSS2-image|_ ?           |
+----------------------------+-------------------------+----------------------------+---------------------------+
| |ezcFeed-category|_ ?*     | |ATOM-category|_ ?*     | x                          | |RSS2-category|_ ?*       |
+----------------------------+-------------------------+----------------------------+---------------------------+
| |ezcFeed-copyright|_ ?     | |ATOM-rights|_ ?        | x                          | |RSS2-copyright|_ ?       |
+----------------------------+-------------------------+----------------------------+---------------------------+
| |ezcFeed-generator|_ ?     | |ATOM-generator|_ ?     | x                          | |RSS2-generator|_ ?       |
+----------------------------+-------------------------+----------------------------+---------------------------+
| |ezcFeed-ttl|_ ?           | x                       | x                          | |RSS2-ttl|_ ?             |
+----------------------------+-------------------------+----------------------------+---------------------------+
| |ezcFeed-skipHours|_ ?     | x                       | x                          | |RSS2-skipHours|_ ?       |
+----------------------------+-------------------------+----------------------------+---------------------------+
| |ezcFeed-skipDays|_ ?      | x                       | x                          | |RSS2-skipDays|_ ?        |
+----------------------------+-------------------------+----------------------------+---------------------------+
| |ezcFeed-rating|_ ?        | x                       | x                          | |RSS2-rating|_ ?          |
+----------------------------+-------------------------+----------------------------+---------------------------+
| |ezcFeed-cloud|_ ?         | x                       | x                          | |RSS2-cloud|_ ?           |
+----------------------------+-------------------------+----------------------------+---------------------------+
| |ezcFeed-webMaster|_ ?     | x                       | x                          | |RSS2-webMaster|_ ?       |
+----------------------------+-------------------------+----------------------------+---------------------------+
| |ezcFeed-language|_ ?      | x                       | x                          | |RSS2-language|_ ?        |
+----------------------------+-------------------------+----------------------------+---------------------------+
| |ezcFeed-textInput|_ ?     | x                       | |RSS1-textinput|_ ?        | |RSS2-textInput|_ ?       |
+----------------------------+-------------------------+----------------------------+---------------------------+
| |ezcFeed-icon|_ ?          | |ATOM-icon|_ ?          | x                          | x                         |
+----------------------------+-------------------------+----------------------------+---------------------------+
| |ezcFeed-contributor|_ ?   | |ATOM-contributor|_ ?*  | x                          | x                         |
+----------------------------+-------------------------+----------------------------+---------------------------+
| |ezcFeed-item|_ !*         | |ATOM-entry|_ ?*        | |RSS1-item|_ !*            | |RSS2-item|_ !*           |
+----------------------------+-------------------------+----------------------------+---------------------------+

| ! = required
| ? = optional
| * = can appear multiple times
| x = no equivalence


Item elements
-------------

+---------------------------------+-------------------------------+------------------------------+------------------------------+
|           ezcFeed               |            ATOM               |             RSS1             |            RSS2              |
+=================================+===============================+==============================+==============================+
| |ezcFeed-item-id|_ !            | |ATOM-entry-id|_ !            | |RSS1-item-about|_ !         | |RSS2-item-guid|_ ?          |
+---------------------------------+-------------------------------+------------------------------+------------------------------+
| |ezcFeed-item-title|_ !         | |ATOM-entry-title|_ !         | |RSS1-item-title|_ !         | |RSS2-item-title|_ !         |
+---------------------------------+-------------------------------+------------------------------++-----------------------------+
| |ezcFeed-item-updated|_ !       | |ATOM-entry-updated|_ !       | x                            | x                            |
+---------------------------------+-------------------------------+------------------------------+------------------------------+
| |ezcFeed-item-author|_ !*       | |ATOM-entry-author|_ !*       | x                            | |RSS2-item-author|_ ?        |
+---------------------------------+-------------------------------+------------------------------+------------------------------+
| |ezcFeed-item-link|_ !*         | |ATOM-entry-link|_ !*         | |RSS1-item-link|_ !          | |RSS2-item-link|_ !          |
+---------------------------------+-------------------------------+------------------------------+------------------------------+
| |ezcFeed-item-description|_ !   | |ATOM-entry-summary|_ !       | |RSS1-item-description|_ !   | |RSS2-item-description|_ !   |
+---------------------------------+-------------------------------+------------------------------+------------------------------+
| |ezcFeed-item-published|_ ?     | |ATOM-entry-published|_ ?     | x                            | |RSS2-item-pubDate|_ ?       |
+---------------------------------+-------------------------------+------------------------------+------------------------------+
| |ezcFeed-item-category|_ ?*     | |ATOM-entry-category|_ ?*     | x                            | |RSS2-item-category|_ ?*     |
+---------------------------------+-------------------------------+------------------------------+------------------------------+
| |ezcFeed-item-copyright|_ ?     | |ATOM-entry-rights|_ ?        | x                            | x                            |
+---------------------------------+-------------------------------+------------------------------+------------------------------+
| |ezcFeed-item-contributor|_ ?*  | |ATOM-entry-contributor|_ ?*  | x                            | x                            |
+---------------------------------+-------------------------------+------------------------------+------------------------------+
| |ezcFeed-item-comments|_ ?      | x                             | x                            | |RSS2-item-comments|_ ?      |
+---------------------------------+-------------------------------+------------------------------+------------------------------+
| |ezcFeed-item-enclosure|_ ?     | |ATOM-entry-link|_ ?*         | x                            | |RSS2-item-enclosure|_ ?     |
+---------------------------------+-------------------------------+------------------------------+------------------------------+

| ! = required
| ? = optional
| * = can appear multiple times
| x = no equivalence


ezcFeed
=======

Specifications
--------------


Feed elements
-------------

ezcFeed-author
``````````````


ezcFeed-category
````````````````


ezcFeed-cloud
`````````````

Allows processes to register with a cloud to be notified of updates to the
channel, implementing a lightweight publish-subscribe protocol for RSS feeds.

Optional (not recommended). Only `RSS2`_ feeds will have this element after
generating the feed. It will be ignored for the other feed types
(`RSS1`_, `ATOM`_).

Can appear only once.

Has the required attributes: *domain*, *port*, *path*, *registerProcedure*,
*protocol*.

Create example::

  // $feed is an ezcFeed object
  $cloud = $feed->add( 'cloud' );
  $cloud->domain = 'rpc.sys.com';
  $cloud->port = 80;
  $cloud->path = '/RPC2';
  $cloud->registerProcedure = 'myCloud.rssPleaseNotify';
  $cloud->protocol = 'xml-rpc';

Parse example::

  // $feed is an ezcFeed object
  $cloud = $feed->cloud;
  $domain = $cloud->domain;
  $port = $cloud->port;
  $path = $cloud->path;
  $registerProcedure = $cloud->registerProcedure;
  $protocol = $cloud->protocol;

Equivalents: `ezcFeed-cloud`_, ATOM-none, RSS1-none, `RSS2-cloud`_.


ezcFeed-contributor
```````````````````


ezcFeed-copyright
`````````````````


ezcFeed-description
```````````````````

A short description of the feed.

Required.

Can appear only once.

`ATOM`_ has an optional attribute *type* with possible values ``text``
(default), ``html``, ``xhtml``.

`ATOM`_ has an optional attribute *lang* which specifies the language of the
text. A list of allowed languages can be found here:
http://www.rssboard.org/rss-language-codes. This attribute is accessed through
ezcFeed as *language*.

The *type* and *lang* `ATOM`_ attributes won't appear in the generated feed
when creating `RSS1`_ and `RSS2`_ feeds.

Create example::

  // $feed is an ezcFeed object
  $feed->description = 'Feed description';
  $feed->description->type = 'text'; // ATOM only, ignored in RSS1 and RSS2
  $feed->description->language = 'de'; // ATOM only, ignored in RSS1 and RSS2

Parse example::

  // $feed is an ezcFeed object
  $description = $feed->description;
  $type = $feed->description->type; // ATOM only
  $language = $feed->description->language; // ATOM only

Equivalents: `ezcFeed-description`_, `ATOM-subtitle`_, `RSS1-description`_,
`RSS2-description`_.


ezcFeed-generator
`````````````````


ezcFeed-icon
````````````


ezcFeed-id
``````````


ezcFeed-image
`````````````


ezcFeed-item
````````````

Feed entry.

Optional (recommended) for ATOM. Required for RSS1 and RSS2.

Multiple entries can appear.

Create example::

  // $feed is an ezcFeed object
  $item = $feed->add( 'item' );

  // set $item properties, for example:
  $item->title = 'Item title';

Parse example::

  // $feed is an ezcFeed object
  foreach ( $feed->items as $item )
  {
      // get $item properties, for example:
      $title = $item->title;
  }

Equivalents: `ezcFeed-item`_, `ATOM-entry`_, `RSS1-item`_, `RSS2-item`_.


ezcFeed-language
````````````````


ezcFeed-link
````````````


ezcFeed-rating
``````````````


ezcFeed-skipDays
````````````````

A hint for aggregators telling them which days they can skip when reading the
feed.

Optional (not recommended). Only `RSS2`_ feeds will have this element after
generating the feed. It will be ignored for the other feed types
(`RSS1`_, `ATOM`_).

Can appear only once.

Can have up to 7 *day* elements, each with a value from ``Monday`` to ``Sunday``.

Create example::

  // $feed is an ezcFeed object
  $skip = $feed->add( 'skipDays' );
  $day = $skip->add( 'day' );
  $day->set( 'Monday' );
  $day = $skip->add( 'day' );
  $day->set( 'Friday' );

Parse example::

  // $feed is an ezcFeed object
  $days = array( 'Monday' => false, /*...*/ 'Sunday' => false );
  foreach ( $feed->skipDays as $skip )
  {
      $days[$skip->get()] = true;
  }

Equivalents: `ezcFeed-skipDays`_, ATOM-none, RSS1-none, `RSS2-skipDays`_.


ezcFeed-skipHours
`````````````````

A hint for aggregators telling them which hours they can skip when reading the
feed.

Optional (not recommended). Only `RSS2`_ feeds will have this element after
generating the feed. It will be ignored for the other feed types
(`RSS1`_, `ATOM`_).

Can appear only once.

Can have up to 24 *hour* elements, each with an integer value from ``0``
(midnight) to ``23``. The value ``24`` can also be used for midnight.

Create example::

  // $feed is an ezcFeed object
  $skip = $feed->add( 'skipHours' );
  $day = $skip->add( 'hour' );
  $day->set( '1' );
  $day = $skip->add( 'hour' );
  $day->set( '7' );

Parse example::

  // $feed is an ezcFeed object
  $hours = array( '0' => false, /*...*/ '24' => false );
  foreach ( $feed->skipHours as $skip )
  {
      $hours[$skip->get()] = true;
  }

Equivalents: `ezcFeed-skipHours`_, ATOM-none, RSS1-none, `RSS2-skipHours`_.


ezcFeed-textInput
`````````````````

Specifies a text input box that can be displayed with the feed.

Optional (not recommended).

Can appear only once. Only `RSS1`_ and `RSS2`_ feeds will have this element
after generating the feed. It will be ignored for `ATOM`_.

For `RSS1`_ it has the required attribute *about*, which should have the same
value as the *link* sub-element.

Has four required sub-elements: *title*, *description*, *name*, *link* (same
for `RSS1`_ and `RSS2`_).

Create example::

  // $feed is an ezcFeed object
  $textInput = $feed->add( 'textInput' );
  $textInput->title = 'Text input title';
  $textInput->description = 'Text input description';
  $textInput->name = 'Text input name';
  $textInput->link = 'Text input link';

Parse example::

  // $feed is an ezcFeed object
  $textInput = $feed->textInput;
  $title = $textInput->title;
  $description = $textInput->description;
  $name = $textInput->name;
  $link = $textInput->link;

Equivalents: `ezcFeed-textInput`_, ATOM-none, `RSS1-textinput`_,
`RSS2-textInput`_.


ezcFeed-title
`````````````

Human readable title for the feed. For example, it can be the same as the
website title.

Required.

Can appear only once.

`ATOM`_ has an optional attribute *type* with possible values ``text``
(default), ``html``, ``xhtml``.

`ATOM`_ has an optional attribute *lang* which specifies the language of the
text. A list of allowed languages can be found here:
http://www.rssboard.org/rss-language-codes. This attribute is accessed through
ezcFeed as *language*.

The *type* and *lang* `ATOM`_ attributes won't appear in the generated feed
when creating `RSS1`_ and `RSS2`_ feeds.

Create example::

  // $feed is an ezcFeed object
  $feed->title = 'Feed title';
  $feed->title->type = 'text'; // ATOM only, ignored in RSS1 and RSS2
  $feed->title->language = 'de'; // ATOM only, ignored in RSS1 and RSS2

Parse example::

  // $feed is an ezcFeed object
  $title = $feed->title;
  $type = $feed->title->type; // ATOM only
  $language = $feed->title->language; // ATOM only

Equivalents: `ezcFeed-title`_, `ATOM-title`_, `RSS1-title`_, `RSS2-title`_.


ezcFeed-ttl
```````````


ezcFeed-updated
```````````````


ezcFeed-webMaster
`````````````````


Item elements
-------------

ezcFeed-item-author
```````````````````


ezcFeed-item-category
`````````````````````


ezcFeed-item-comments
`````````````````````


ezcFeed-item-contributor
````````````````````````
{'fraction_non_alphanumeric': 0.42085355648535566, 'fraction_numerical': 0.005723849372384938, 'mean_word_length': 0.9639758085721799, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 101, 'https://': 0, 'lorem ipsum': 0, 'www.': 2, 'xml': 2}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 82, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '4002389', 'n_tokens_mistral': 7867, 'n_tokens_neox': 7053, 'n_words': 1589}