<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-IE" lang="en-IE">
	<head>
		<title>RDF Site Summary 1.0 Modules: Rich Equivalents</title>

        <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
                 xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
                 xmlns:dc="http://purl.org/dc/elements/1.1/"
                 xmlns:dcterms="http://purl.org/dc/terms/"
                 xmlns:vc="http://www.w3.org/2001/vcard-rdf/3.0#"
                 xml:lang="en">

            <rdf:Description rdf:about="http://purl.org/rss/1.0/modules/richequiv/"
                             dc:title="RDF Site Summary 1.0 Modules: Rich Equivalents"
                             dc:description="This module defines elements defining properties which are equivalent to the title and description properties defined by the core RSS1.0 Spec, but allowing for the use of xml elements as content.">
                <dc:identifier>
                    <dcterms:URI rdf:value="http://purl.org/rss/1.0/modules/richequiv/" />
                </dc:identifier>
                <dc:creator>
                    <rdf:Description
                        rdf:value="Jon Hanna"
                        vc:FN="Jon Hanna"
                        vc:NICKNAME="Talliesin">
                        <vc:N
                            vc:Family="Hanna"
                            vc:Given="Jon" />
                        <vc:EMAIL
                            vc:TYPE="http://www.w3.org/2001/vcard-rdf/3.0#internet"
                            rdf:value="jon@spin.ie" />
                        <vc:GROUP>
                            <rdf:Bag>
                                <rdf:li rdf:parseType="Resource">
                                    <vc:ORG>
                                        <rdf:Description vc:Orgname="Spin Solutions">
                                            <vc:URL rdf:resource="http://www.spin.ie/" />
                                        </rdf:Description>
                                    </vc:ORG>
                                </rdf:li>
                                <rdf:li vc:ROLE="Senior Hacker" />
                            </rdf:Bag>
                        </vc:GROUP>
                        <vc:KEY>
                            <rdf:Description
                                rdf:about="http://www.spin.ie/jon.asc"
                                vc:TYPE="application/pgp-key">
                                <dc:format>
                                    <dcterms:IMT rdf:value="application/pgp-key" rdfs:label="PGP Key" />
                                </dc:format>
                                <dc:identifier>
                                    <dcterms:URI rdf:value="http://www.spin.ie/jon.asc" />
                                </dc:identifier>
                            </rdf:Description>
                        </vc:KEY>
                    </rdf:Description>
                </dc:creator>
                <dc:language>
                    <dcterms:RFC1766 rdf:value="en-IE" rdfs:label="Hiberno-English" />
                </dc:language>
                <dc:format>
                    <dcterms:IMT rdf:value="application/xhtml+xml" rdfs:label="XHTML" />
                </dc:format>
                <dc:created>
                    <dcterms:W3C-DTF rdf:value="2002-08-29" />
                </dc:created>
                <dc:modified>
                    <dcterms:W3C-DTF rdf:value="2002-08-30" />
                </dc:modified>
            </rdf:Description>	
            <rdf:Property rdf:about="http://purl.org/rss/1.0/modules/richequiv/description"
                          rdfs:label="Description"
                          rdfs:comment="A rich XML description.">
                <rdfs:subPropertyOf>
                    <rdf:Description rdf:about="http://purl.org/rss/1.0/description">
                        <rdfs:subPropertyOf rdf:resource="http://purl.org/rss/1.0/modules/richequiv/description" />
                    </rdf:Description>
                </rdfs:subPropertyOf>
                <rdfs:isDefinedBy rdf:resource="http://purl.org/rss/1.0/modules/richequiv/" />
            </rdf:Property>
            <rdf:Property rdf:about="http://purl.org/rss/1.0/modules/richequiv/title"
                          rdfs:label="Title"
                          rdfs:comment="An XML descriptive title.">
                <rdfs:subPropertyOf>
                    <rdf:Description rdf:about="http://purl.org/rss/1.0/title">
                        <rdfs:subPropertyOf rdf:resource="http://purl.org/rss/1.0/modules/richequiv/title" />
                    </rdf:Description>
                </rdfs:subPropertyOf>
                <rdfs:isDefinedBy rdf:resource="http://purl.org/rss/1.0/modules/richequiv/" />
            </rdf:Property>
        </rdf:RDF>

		<link rel="stylesheet" type="text/css" href="../../style.css" title="rss1_0"/>

	</head>

	<body>

		<h1>RDF Site Summary 1.0 Modules: Rich Equivalents</h1>
		<h2><a name="authors" id="authors">Author</a></h2>
		<dl>
			<dt><a href="mailto:jon@spin.ie">Jon Hanna</a>,
                <a href="http://www.spin.ie/">Spin Solutions</a></dt>
		</dl>
		<h2><a name="version" id="version">Version</a></h2>
		<p>
			<strong>Latest Version</strong>
			<a href="http://purl.org/rss/1.0/modules/richequiv/">http://purl.org/rss/1.0/modules/richequiv/</a>
		</p>
		<h2>Status</h2>
		<p>
			Draft
		</p>
		<h2><a name="rights" id="rights">Rights</a></h2>
		<p>
			Copyright &copy; 2000 by the Authors.
		</p>
		<p>
			Permission to use, copy, modify and distribute the RDF Site Summary 1.0
			Specification and its accompanying documentation for any purpose and without
			fee is hereby granted in perpetuity, provided that the above copyright notice
			and this paragraph appear in all copies. The copyright holders make no
			representation about the suitability of the specification for any purpose. It
			is provided "as is" without expressed or implied warranty.
		</p>
		<p>
			This copyright applies to the RDF Site Summary 1.0 Specification and
			accompanying documentation and does not extend to the RSS format itself.
		</p>
		<h2><a name="description" id="description">Description</a></h2>
		<p>
			This module defines elements defining properties which are equivalent to the
			title and description properties defined by the core RSS1.0 Spec, but allowing
			for the use of xml elements as content.
		</p>
		<h2><a name="namespaces" id="namespaces">Namespace Declarations</a></h2>
		<ul>
			<li><strong>xmlns:reqv="http://purl.org/rss/1.0/modules/richequiv/"</strong></li>
		</ul>
		<h2><a name="model" id="model">Model</a></h2>
		<p>
			<em>&lt;channel&gt;, &lt;item&gt;, &lt;textinput&gt; elements</em>
		</p>
		<ul>
			<li><strong>&lt;reqv:title&gt;</strong> ANY</li> 
  			<li><strong>&lt;reqv:description&gt;</strong> ANY</li>
		</ul>
		<h2><a name="motivation" id="motivation">Motivation</a></h2>
		<p>
			RSS has always defined a title and description element. The RSS1.0 Spec
			defines these as containing Parsed Character Data (i.e. plain text), but
			authors have desired a way to use richer content, in particular HTML, in the
			rendering of these elements.
		</p>
		<p>
			The "solution" hit upon was to abuse the text-based nature of XML and HTML and
			to store the text of an XML fragment as the content of the element. For
			example to transmit the HTML fragment:
		</p>
		<pre><code>&lt;p&gt;A description.&lt;/p&gt;</code></pre>
		<p>
			The author would treat the HTML as text and encode it XML producing:
		</p>
		<pre><code>&amp;lt;p&amp;gt;A description.&amp;lt;/p&amp;gt;</code></pre>
		<p>
			They would then make that the content of the relevant element:
		</p>
		<pre><code>&lt;description&gt;&amp;lt;p&amp;gt;A description.&amp;lt;/p&amp;gt;&lt;/description&gt;</code></pre>
		<p>
			When being read by an RSS parser that understood this convention (note that it
			is not documented in <b>any</b> of the RSS specs) and which successfully
			determined that the convention was being used in this case it would then
			convert the text back into the HTML fragment, (hopefully) check it for
			potential security risks, and then use this HTML in the rendering of the
			description.
		</p>
		<p>
			There has been much debate about the validity, or even sanity, of this
			approach (some arguments against are given in
			<a href="#arguments">Appendix C</a>). In the end though no matter who has the
			strongest position in the debate the difference will be problematic because
			either style can produce RSS content that will break on parsers written to use
			the other convention. Heuristics can help this problem but can quickly become
			a complicated piece of code as one refines them for more outside cases, and
			are never guaranteed to work since there is no way to know for certain whether
			the author intended to transmit the XML element or the actual mark-up itself
			(in the above example we can't be certain the author didn't want the rendering
			to be of a less-than symbol followed by a p, and so on).
		</p>
		<p>
			This module aims to bypass this debate by introducing elements which have the
			same semantics as the <code>&lt;title&gt;</code> and
			<code>&lt;description&gt;</code> elements, but which allow for any well-formed
			XML fragment (a well-formed fragment is any XML that would be well-formed
			where it wrapped with another element).
		</p>
		<p>
			This solves the determinism problem, since there is no double-encoding it is
			clear what is XML and what is text, it allows the content to be used sensibly
			with RDF with no overhead for non-RDF users, simplifies implementation (the
			XML is already XML, no need to parse it twice - especially awkward for RSS
			parsers that work on XML trees, such as XSLT-based parsers), and as a bonus
			offers a safe way to introduce content from other XML applications with full
			backwards compatibility to parsers which don't support them.
		</p>
		<p>
			With the use of a few <a href="#implementation">techniques</a> this module can
			be as easy to use for even na&iuml;ve xml-as-text parsers. This is important
			for ensuring that RSS implementations that start with such a mechanism aren't
			discouraged from using it and opt for the double-encoding technique.
		</p>
		<h2><a name="mod_content" id="mod_content">Relation to mod_content</a></h2>
		<p>
			To some degree mod_content solves a similar problem; the transmission of
			arbitrary XML content, primarily HTML. However the purpose of that XML is
			different than in the case of mod_content, where the idea is to transmit more
			complete pieces of content rather than descriptions.
		</p>
		<p>
			Some people may be using mod_content as a more "civilised" alternative to the
			double-encoding technique, and they will hopefully welcome this module.
		</p>
		<p>
			It is possible that the same XML may be a good value for both the
			<code>&lt;content:item&gt;</code> and <code>&lt;reqv:desciption&gt;</code>
			elements. As such it may be appropriate for a
			<code>&lt;content:item&gt;</code> element to have an <code>rdf:resource</code>
			attribute that points to a fragment identifier reflecting the value of an id
			attribute on an element that is the content of the
			<code>&lt;reqv:desciption&gt;</code> element. However resolving such
			references is impossible without a validating XML parser - which is beyond the
			requirements for processing other RSS elements.
		</p>
		<h2>Syntax</h2>
		<p>
			<code>&lt;reqv:title&gt;</code> and <code>&lt;reqv:description&gt;</code> can
			appear where <code>&lt;title&gt;</code> and <code>&lt;description&gt;</code>
			as defined in RSS1.0 can appear, and have the same meaning.
		</p>
		<p>
			They MUST have an attribute with a namespace name of
			<code>http://www.w3.org/1999/02/22-rdf-syntax-ns#</code>, a local name of
			<code>parseType</code> and a value of <code>"Literal"</code> (in other words
			they must be <code>&lt;reqv:title rdf:parseType="Literal"&gt;</code> and
			<code>&lt;reqv:description rdf:parseType="Literal"&gt;</code>).
		</p>
		<p>
			They can contain any XML content. The type of the content is indicated by the
			use of namespaces. <code>&lt;reqv:title rdf:parseType="Literal"
			xmlns=""&gt;</code> can be used to contain XML from the default namespace
			(i.e. which doesn't use namespaces).
		</p>
		<p>
			Multiple occurances of each element is allowed, although rendering parsers are
			expected to ignore all but one. <code>rdf:Alt</code> or other RDF collections
			MUST NOT be used, to preserve the equivalence with the related RSS elements,
			and to ease non-RDF based implementations.
		</p>
		<p>
			Although document order isn't significant when considering the RSS as RDF,
			there is no reason why document order can't be used in determining which
			element to use in rendering. As such the suggested method for determining
			which element to use in the case of multiple equivalents being available is to
			use the first element in document order which the renderer is capable of using.
		</p>
		<p>
			Rendering parsers are free however to make a choice based on
			implementation-specific criteria. If a rendering parser <strong>does</strong>
			use criteria other than document order they MUST be deterministic; in other
			words if the parser repeatedly encounters the same RSS and no applicable
			settings have been changed it MUST always pick the same element as before.
		</p>
		<h2><a name="charset" id="charset">Note on Charset Encoding</a></h2>
		<p>
			The elements defined in this document are conceived as transmitting XML
			elements and text nodes, not the text that represents them. As such the
			encoding is the same as the parent document, implementations are free to
			re-encode XML obtained from the RSS (e.g. converting from UTF-8 to UTF-16) as
			suits their purposes.
		</p>
		<h2><a name="implementation" id="implementation">Implementation Notes</a></h2>
		<p>
			The following outlines techniques that will enable the elements to work
			correctly across implementations based on the XML Infoset, DOM trees, SAX
			events, RDF, or direct manipulation of the text the XML is persisted to. All
			of the following SHOULD be done, but none is stuff that MUST be done. The
			author notes that the ease in fulfilling each of these varies depending on the
			technologies used.
		</p>
		<h3><a name="producers" id="producers">For RSS Producers</a></h3>
		<ol>
			<li>
				Encode in UTF-8, but use character references for characters with positions
				above U+007F (e.g. for non-ASCII characters). This ensures interoperability
				with parsers which don't parse UTF-16 (yes they aren't real XML parsers then,
				but these do exist!) and even with na&iuml;ve implementations that assume US-ASCII
				or ISO 8859-1). 
			</li>
			<li>
				Always place relevant namespace information on the
				<code>&lt;reqv:title&gt;</code> and <code>&lt;reqv:description&gt;</code>
				elements, even if this means duplication (see below) to make it easier to
				detect what sort of XML is used. 
			</li>
			<li>
				If it is vital that namespace information be retained then put the declaration
				directly onto the elements enclosed, so that a simple cut-and-paste operation
				on the contents will retain the namespaces. 
			</li>
			<li>
				<p>
					In cases where the namespace may cause confusion place it on the enclosing
					<code>&lt;reqv:title&gt;</code> or <code>&lt;reqv:description&gt;</code>
					element only. E.g To conform with one of the XHTML1.0 DTDs the namespace must
					only be declared on the root <code>&lt;html&gt;</code> element. Further most
					browsers still don't accept a namespace prefix for HTML elements, hence to
					encode a fragment one should use:
				</p>
				<pre>&lt;reqv:title rdf:parseType="Literal" xmlns="http://www.w3.org/1999/xhtml"&gt;
                    &lt;p&gt;A description.&lt;/p&gt;
                    &lt;/reqv:title&gt;</pre>
				<p>
					This ensures that tree-based parsers have the correct namespace information
					but text-based parsers doing a copy-and-paste technique will have a fragment
					that works well when inserted into a HTML document.
				</p>
			</li>
			<li>
				Don't use any entity references, since your <code>&lt;!DOCTYPE&gt;</code> will
				be needed to process them na&iuml;ve cut-and-paste operations may fail.
			</li>
		</ol>
		<h3><a name="consumers" id="consumers">For RSS consumers</a></h3>
		<ol>
			<li>
				Always check the namespace of the elements you receive, don't just assume it's
				HTML (actually that one is a MUST rather than a SHOULD).
			</li>
			<li>
				The basic procedure for obtaining content from these elements is:
				<ol>
					<li>
						Look for instances of the relevant element (say your currently rendering the
						description, so look for <code>&lt;reqv:description&gt;</code>) when you
						encounter it examine the namespace of the elements to ascertain if you can
						make use of it. In the case of XML without namespaces (<code>xmlns=""</code>) further heuristics may be needed to 
					    determin the type of XML in question. 
					</li>
					<li>
						If you can't use it repeat the above step, otherwise you have your description,
						stop looking for <code>&lt;reqv:description&gt;</code>. 
					</li>
					<li>
						If you fail to find an appropriate <code>&lt;reqv:description&gt;</code> then
						render the <code>&lt;description&gt;</code>, treating it as plain text.
					</li>
				</ol>
			</li>
			<li>
				You are free to perform any operation on the XML that retains the infoset
				information, e.g. Canonicalisation, Exclusive Canonicalisation, changing
				namespace prefixes etc. If passing the XML to another component for further
				processing you can encode it using any character set. Such decisions should be
				made in the context of what you need from this XML once you've received it.
				You may also remove any namespace context that isn't use, but which is
				inherited from the containing document.
			</li>
		</ol>
		<h2><a name="schema" id="schema">RDF Schema</a></h2>
		<p>
			The following schema is embedded into this document (along with some other
			metadata). Note that it defines a circular subPropertyOf relationship between
			the elements defined in this document and their equivalents in the core RSS1.0
			module. The effect of this is to cause an RDFS closure to produce the same
			graphs from the contents of the	elements defined here as if those contents
			were in the respective RSS elements, and vice versa.
		</p>
		<pre>&lt;rdf:RDF
            xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
            xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
            xml:lang="en"&gt;
            &lt;rdf:Property rdf:about="http://purl.org/rss/1.0/modules/richequiv/description"
            rdfs:label="Description"
            rdfs:comment="A rich XML description."&gt;
            &lt;rdfs:subPropertyOf&gt;
			&lt;rdf:Description rdf:about="http://purl.org/rss/1.0/description"&gt;
            &lt;rdfs:subPropertyOf rdf:resource="http://purl.org/rss/1.0/modules/richequiv/description" /&gt;
			&lt;/rdf:Description&gt;
            &lt;/rdfs:subPropertyOf&gt;
            &lt;rdfs:isDefinedBy rdf:resource="http://purl.org/rss/1.0/modules/richequiv/" /&gt;
            &lt;/rdf:Property&gt;
            &lt;rdf:Property rdf:about="http://purl.org/rss/1.0/modules/richequiv/title"
            rdfs:label="Title"
            rdfs:comment="An XML descriptive title."&gt;
            &lt;rdfs:subPropertyOf&gt;
			&lt;rdf:Description rdf:about="http://purl.org/rss/1.0/title"&gt;
            &lt;rdfs:subPropertyOf rdf:resource="http://purl.org/rss/1.0/modules/richequiv/title" /&gt;
			&lt;/rdf:Description&gt;
            &lt;/rdfs:subPropertyOf&gt;
            &lt;rdfs:isDefinedBy rdf:resource="http://purl.org/rss/1.0/modules/richequiv/" /&gt;
            &lt;/rdf:Property&gt;
            &lt;/rdf:RDF&gt;</pre>
		<h2>Security Considerations</h2>
		<p>
			The security issues of this module are far-reaching and by no means trivial.
			It is worth noting however that all of these concerns also apply to the
			double-encoding technique, with the added danger that because it is not
			defined by any standard or specification there is nowhere to engage with these
			issues.
		</p>
		<p>
			Note also that the applicability and severity of these issues will vary
			according to other factors. For instance applications which send HTML to a
			browser need to be particularly careful if the browser considers the HTML to
			be from a "local" source, as it may trust this source and hence use a more lax
			security model.
		</p>
		<ol>
			<li>
				When receiving unknown XML formats do not attempt to render them. Apart from
				XML formats explicitly described as having no namespace name
				(<code>xmlns=""</code>) one should assume 
				the XML is of a format you have no use for and not attempt to guess further 
				from heuristics or na&iuml;vely passing it to a browser. Many modern browsers 
				accept many forms of XML, some of which are "active" and may contain malware, 
				and at least one of which you don't know about! 
			</li>
			<li>
				Check the XML you receive for potentially dangerous elements. In HTML these
				elements are <code>&lt;script&gt;</code>, <code>&lt;object&gt;</code>,
				<code>&lt;applet&gt;</code> and the non-standard <code>&lt;embed&gt;</code>
				and <code>&lt;xml&gt;</code>, and any element that would cause the access of a
				URI beginning with "javascript:" "vbscript:" or "data:".<br />
				There are cases where such elements are safe, but validation should work on a
				"default to secure" basis - i.e. rather than use the element unless something
				else indicates it is unsafe you should drop the element unless something else
				proves to your program that it is safe (whether because your program has
				clever analysis of what the element is doing, or because you trust the source). 
			</li>
			<li>
				When attempting to validate XML for dangerous content (see above) make sure
				that your validation occurs after processing the text's character set. Much
				software exists that will erroneously misinterpret certain illegal UTF-8
				values as legal values, for example they may treat a byte of value 0xC0
				followed by a byte of value 0xBC as a UTF-8 encoding of U+003C (a less-than
				character). This means that you could search the string for
				<code>"&lt;script"</code> and fail to find it, hence letting it through to a
				browser which may "fix" the UTF-8 and go on to execute the script. The
				solution is to either fix such illegal UTF-8 encodings first, or else to throw
				an error when an illegal UTF-8 sequence is found.
			</li>
		</ol>
		<h2><a name="appendices" id="appendices">Appendices</a></h2>
		<p>
			The following are for information only, and are not normative.
		</p>
		<h3><a name="example" id="example">Appendix A: Example</a></h3>
		<p>
			The following example uses the module to provide HTML equivalents of the title
			and description of the channel and items. In the case of the channel title an
			SVG image is also provided.
		</p>
		<pre>&lt;?xml version="1.0"?&gt;
            
            &lt;rdf:RDF
            xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
            <span class="example-dc">xmlns:reqv="http://purl.org/rss/1.0/modules/richequiv/"</span>
            xmlns="http://purl.org/rss/1.0/"&gt;
            &lt;channel rdf:about="http://www.example.com/feed.rss"&gt;
            &lt;title&gt;Example.com&lt;/title&gt;
            &lt;link&gt;http://www.example.com/&lt;/link&gt;
            <span class="example-dc">&lt;reqv:title rdf:parseType="Literal"
                xmlns="http://www.w3.org/1999/xhtml"&gt;
                <span class="example-syn">&lt;h1&gt;Example.com&lt;/h1&gt;</span>
                &lt;/reqv:title&gt;
                &lt;reqv:title rdf:parseType="Literal"
                xmlns="http://www.w3.org/2000/svg"
                xmlns:xlink="http://www.w3.org/1999/xlink"&gt;
                <span class="example-taxo">&lt;svg
                    xmlns="http://www.w3.org/2000/svg"
                    xmlns:xlink="http://www.w3.org/1999/xlink"
                    viewBox="0 0 176 44"
                    preserveAspectRatio="xMidYMid"&gt;
                    &lt;a xlink:href="http://www.example.com"&gt;
					&lt;ellipse
                    style="fill: blue; stroke: green;"
                    cx="88" cy="22"
                    rx="84" ry="18"/&gt;
					&lt;text style="font-family: arial, helvetica, sans-serif;
                    font-size: 10.00;
                    font-weight: bold;
                    fill: red;"
                    x="60" y="25"&gt;Example.com&lt;/text&gt;
                    &lt;/a&gt;
                    &lt;/svg&gt;</span>
                &lt;/reqv:title&gt;</span>
            &lt;description&gt;
			The Hyphothetical Portal&amp;#8482;
            &lt;/description&gt;
            <span class="example-dc">&lt;reqv:description rdf:parseType="Literal" xmlns="http://www.w3.org/1999/xhtml"&gt;
                <span class="example-syn">&lt;hr /&gt;
                    &lt;p&gt;The Hyphothetical Portal&amp;#8482;&lt;/p&gt;</span>
                &lt;/reqv:description&gt;</span>
            &lt;items&gt;
			&lt;rdf:Seq&gt;
            &lt;rdf:li resource="http://www.example.com/item1.html"/&gt;
            &lt;rdf:li resource="http://www.example.com/item2.html"/&gt;
			&lt;/rdf:Seq&gt;
            &lt;/items&gt;
            &lt;/channel&gt;
            &lt;item rdf:about="http://www.example.com/item1.html"&gt;
            &lt;title&gt;First Example Item&lt;/title&gt;
            <span class="example-dc">&lt;reqv:title rdf:parseType="Literal" xmlns="http://www.w3.org/1999/xhtml"&gt;
                <span class="example-syn">&lt;h2&gt;First Example Item&lt;/h2&gt;</span>
                &lt;/reqv:title&gt;</span>
            &lt;link&gt;http://www.example.com/item1.html&lt;/link&gt;
            &lt;description&gt;
			Our first example Item.
            &lt;/description&gt;
            <span class="example-dc">&lt;reqv:description rdf:parseType="Literal" xmlns="http://www.w3.org/1999/xhtml"&gt;
                <span class="example-syn">&lt;p&gt;Our 1&lt;sup&gt;st&lt;/sup&gt; example Item.&lt;/p&gt;</span>
                &lt;/reqv:description&gt;</span>
            &lt;/item&gt;
            &lt;item rdf:about="http://www.example.com/item2.html"&gt;
            &lt;title&gt;Second Example Item&lt;/title&gt;
            &lt;link&gt;http://www.example.com/item2.html&lt;/link&gt;
            <span class="example-dc">&lt;reqv:title rdf:parseType="Literal" xmlns="http://www.w3.org/1999/xhtml"&gt;
                <span class="example-syn">&lt;h3&gt;Second Example Item&lt;/h3&gt;</span>
                &lt;/reqv:title&gt;</span>
            &lt;description&gt;
			Our second example Item.
            &lt;/description&gt;
            <span class="example-dc">&lt;reqv:description rdf:parseType="Literal" xmlns="http://www.w3.org/1999/xhtml"&gt;
                <span class="example-syn">&lt;p&gt;Our 2&lt;sup&gt;nd&lt;/sup&gt; example Item.&lt;/p&gt;</span>
                &lt;/reqv:description&gt;</span>
            &lt;/item&gt;
            &lt;/rdf:RDF&gt;</pre>
        <h3><a name="xinclude" id="xinclude">Appendix B: Use with XML Inclusions.</a></h3>
        <p>
            With large pieces of XML there would be an obvious advantage in stating a URI
            from which the XML could be downloaded. There are a few possible approaches
            one could take with this, but they each have disadvantages.
        </p>
        <p>
            One would be to allow the use of <code>rdf:resource</code> on the elements
            defined above. Another would be to create new elements for this purpose.
            However	both of these approaches would lose there equivalency with the RSS
            elements.
        </p>
        <p>
            In addition referencing a fragment, as opposed to an entire document, has
            implentation difficulties.
        </p>
        <p>
            Because of this no such mechanism is provided. The author does note however
            that it is a perfectly valid interpretation of the specification above to use
            the elements defined here to contain an <code>&lt;include&gt;</code> element
            as defined in <a href="http://www.w3.org/TR/xinclude/">XML Inclusions
            (XInclude) Version 1.0</a>.
        </p>
        <p>
            A parser choosing to process such an item (identified by the namespace name	of
            <code>http://www.w3.org/2001/XInclude</code>) should be capable of determining
            if it can handle the fragment referenced as soon as such information is
            available. In effect this would be the same as processing the XInclude and
            then deciding whether to process the new element(s), however that would not be
            the most efficient way of carrying out such an action.
        </p>
        <p>
            The task is probably daunting, and could likely require updates as XInclude is
            only at Candidate Recommendation stage and some questions remain open. However
            with the assistance of a tool or library for handling XInclude it could be a
            very powerful addition to an RSS parser.
        </p>
        <h3><a name="arguments" id="arguments">Appendix C: Arguments Against Double-Encoding</a></h3>
        <p>
            The following list is probably not complete:
        </p>
        <ul>
            <li>
                It's simply not in any of the Specs. Implementing a specification should not
                require mind-reading.
            </li>
            <li>
                It is error-prone, especially if truncation occurs in transit (which does
                happen with some RSS producers) causing such errors as unclosed elements and
                incomplete tags.
            </li>
            <li>
                It ties RSS to HTML as it's only possible mechanism for rendering. This is
                limiting at best. Strong links between web technologies tend to hamper their
                development. As an example, the growth of HTML itself is partly due to the
                fact that it is not strongly tied to any of the technologies that are often
                used with it (HTTP, GIF, JPEG, CSS, Java, Javascript etc. all have "meeting
                points" with HTML, but all have uses not related to HTML, and vice-versa).
            </li>
            <li>
                While rendering HTML is easy if the task can be farmed out to an already
                existing browser, it is extremely complicated for any other implementation.
                This limits the available options to someone planning to implement HTML. And
                creates a "right way" of doing something which may not suit a particular
                programmer or particular programming task.
            </li>
            <li>
                It limits the ability of the parser to decide on how something should be
                displayed, which hence ceases to be the perogative of the person actually
                reading it.
            </li>
            <li>
                It puts the decision on how HTML should be produced at a point in the process
                where little is known about the browser that is displaying it. Conversely if
                HTML is produced by the parser it may be able to do so with knowledge of bugs
                and features of the browser being used, and optomise for that.
            </li>
            <li>
                It complicates the task of searching for content that may produce security
                breeches.
            </li>
            <li>
                It doesn't display well in RSS parsers that don't use the convention.
            </li>
            <li>
                Probably the most compelling argument is this: It is simply impossible to tell
                with 100% certainty when the convention is being used and when it isn't. Even
                the cleverest heuristics can only tell if someone <strong>might</strong> have
                been using it. As such failures to operate correctly are guaranteed.
            </li>
        </ul>
	</body>
</html>