Namespaces
RSS Extensions (Namespaces)
and FeedForAll V2.0 and FeedForAll Mac v1.5
This document covers:
Introduction of Namespaces
Extensions in FeedForAll
Extension Usage Introduction
For those of you who already know what XML namespaces
are, and just want to know how FeedForAll supports
them, pleases skip ahead to the Extensions in
FeedForAll Section.
For the rest, this section is for you. First of
all, what are RSS Extensions? Well, technically
they are called 'XML Namespaces', but we will
call them 'RSS Extensions', or just 'Extensions',
in most of this document, mainly because we will
be talking about how namespaces specifically apply
to RSS feeds, and extends their capabilities.
For this all to make sense, I am going to have
to go into a little boring history, so hang in
there... First came XML. XML is probably the most
flexible way to store data in a file. It is widely
used on the Internet, and in all kinds of other
applications. Entire books have been written on
the subject (which is a nice way to say I'm not
going into details about it here). All you really
need to know about XML is that it is a markup
language very similar to HTML. It defines how
to use tags (i.e. ) to describe information in
a file. Now the smart people who came up with
XML made it incredibly flexible, so that it could
handle just about any type of data know to mankind.
As a matter of fact, it is defined in such a generic
manor, that XML by itself is of little use. The
problem is that there are almost no tags defined
by the XML specification. In XML you can basically
make up what tags you want to use. You could use
things like '
<mytag>I put my data here</mytag> and
'<kdhdyeg> I like weird tag names </kdhdyeg>'
This is where RSS comes in. The RSS specification
defines what types of data can be included in an
RSS feed file, and the tags to use to describe it.
RSS defines tags like ,<image> , etc. This
is incredibly important because it allows groups
of people to format their data in a standard way,
so it can be used by many different programs. So,
for a while life was good. The RSS specification
defined the fields that could be used to store information,
to syndicate articles, blog entries, and other similar
types of information. Because RSS is so useful,
and became so successful, people wanted to start
using it for thing similar to syndicating articles,
but different.
I will use Apple's iTunes as an example. Apple wanted
a standard way to allow people to add their podcasts
(RSS feeds with audio enclosures - standard RSS
stuff), to their iTunes software and service. The
problem was, they needed the files to include additional
information. For example they wanted the duration
(i.e. hours/minutes/seconds) of the audio file,
to be included in the RSS feed. Here is where the
flexibility of RSS (because is uses XML) comes into
play. In RSS, you can add as may of your own tags,
and as much of your own data to the file as you
want. You can make stuff up and just add it in,
as long as it doesn't somehow conflict with any
of the existing RSS stuff in the file. So, what
this means is that apple can just start using a
tag named '<duration>' in their
iTunes podcasts. Life is good again... or not. Here
lies the problem. What is to stop more than one
person/company from using the same tag. Duration
in iTunes is used to describe the length of an audio
clip. Someone else may be using the '<duration>'
tag to describe how long there mother-in-law is
staying with them, and their '<duration>'
information is measured in days/months/ and if conceivably
possible, years. This brings up back to the original
problem that XML has of not having well defined
fields. Or, more importantly, people using the same
tag names for very different purposes.
Enter XML Namespaces, or as they pertain to us,
RSS Extensions. In XML (and therefore in RSS also),
at the beginning of the file you can define a prefix
to use before all of your custom tags. The prefix
declaration defines what the prefix will be and
what is is used for. I know that is kind of vague,
so I will give an example.
Here is the iTunes namespace declaration: xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd"
What this says is that 'itunes:' will go in front
of every tag that this namespace uses, and you can
find out more information about the tags used in
this namespace (i.e. what the heck they are for)
at http://www.itunes.com/DTDs/Podcast-1.0.dtd Our
mother-in-law host could also define his own namespace
like this: xmlns:mil="http://www.mydomain.com/motherinlaw.dtd"
Now, whenever you want to use an iTunes duration
in your RSS feed, the tag would look like this:
<itunes:duration> , and the mother-in-law
one would look like this <mil:duration>.
The use of namespaces basically allows you to extend
the capabilities of the standard RSS format, and
add your own mini-specification to it, without worrying
about interfering with other uses of RSS.
Hopefully some of that made at least a little sense.
If nothing else, understand that namespaces have
given rise to several useful RSS extensions that
are being widely used. RSS extensions have been
created and are being used by Apple, Yahoo!, Microsoft,
and many others. They basically allow people and
companies to add capabilities RSS feeds, and define
what the additional data is used for.
Extensions in FeedForAll
So, how does FeedForAll support RSS extensions (namespaces)?
The short answer is that FeedForAll v2.0 has full
and complete support for all RSS 2.0 Extensions.
The long answer is that FeedForAll has two levels
of support for extensions. There are 'well supported'
extensions, and 'generically supported' extensions.
The well supported extensions (for example iTunes)
have their own custom tab in FeedForAll, with nicely
laid out data fields, descriptions, and help info.
This makes it extremely easy to use these extensions
in your RSS feeds and podcasts. Now, realistically,
there is now way to do the same for every RSS Extension
in existence. There are just too may, many aren't
documented very well(if at all), and some are only
used internally within an organization or company.
For these namespaces FeedForAll allows users to
edit the namespace tags and data directly in an
XML editor.
How to use Extensions in FeedForAll Add an existing
extension to a feed:
1. Open your feed.
2. From the program's tabs choose 'Feed'
-> 'Extensions' -> 'General'.
3. Click the '+' button.
4. Select an extension from the list.
5. A new tab for that extension will now
appear under 'Extensions' for each of the 'Feed',
'Item' and 'Image' tabs.
Add an new (not yet defined) extension to a feed
1. Open your feed.
2. From the program's tab choose 'Feed' ->
'Extensions' -> 'General'.
3. Click the '+' button.
4. At the bottom of the 'Add namespace declaration'
screen, enter a name for this namespace. This will
be the prefix used before all the tags for this
new namespace
5. If the namespace has a DTD, enter the
URL to it also
Remove an extension from a feed:
1. Open your feed.
2. From the program's tabs choose 'Feed'
-> 'Extensions' -> 'General'.
3. Highlight the extension you want to remove.
4. Click the '-' button.
5. All data in your feed that uses the namespace
will be removed, and the namespace's tabs will disappear.
Edit data for an extension:
1. Well supported namespaces will have their
own tab under the 'Extensions' tab for 'Feed', 'Item',
and 'Image'. However if that namespace doesn't have
any fields for that particular section of the feed
(i.e. Feed, Item, and Image), the tab will not be
displayed.
1a. Generically supported namespaces will
also have a tab under each of the 'Extensions' tabs.
2. Simply go to the extension's tab and fill
in the fields.
2a. Generically supported namespaces will
have one large XML editor box for each section of
the feed (i.e. Feed, Item and Image). Enter the
namespace's tags and data here. |