<?xml version="1.0"?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd">
<?rfc toc="yes"?>
<rfc ipr="full3978" docName="draft-tclarke-aebl-00">
   <front>
      <title abbrev="AEBL">Application Extension Bundle description Language (AEBL)</title>
      <author initials="T." surname="Clarke" fullname="Trevor R H Clarke">
         <organization abbrev="BATC">Ball Aerospace and Technologies Corp</organization>
         <address>
            <postal>
               <street>2875 Presidential Dr.</street>
               <city>Fairborn</city>
               <region>OH</region>
               <code>45324</code>
               <country>US</country>
            </postal>
            <phone>+1 937 320 7087</phone>
            <email>tclarke@ball.com</email>
            <uri>http://www.ballforge.net/</uri>
         </address>
      </author>
      <date month="July" day="31" year="2008" />
      <area>Applications</area>
      <keyword>RFC</keyword>
      <keyword>Request for Comments</keyword>
      <keyword>I-D</keyword>
      <keyword>Internet-Draft</keyword>
      <keyword>RDF</keyword>
      <abstract>
         <t>This memo presents an <xref target="refs.RDF">RDF</xref> vocabulary for describing an
         <xref target="refs.aeb">application extension bundle</xref>. An application extension bundle,
         otherwise known as an add-on, extension, plug-in, suite, or package, is an encapsalation
         of all the data needed to add functionality to a plug-in based application. An integral
         piece of an application extension bundle is the metadata describing the bundle. The described
         RDF vocabulary contains required and optional metadata fields used by an application
         extension bundle to describe itself.</t>
      </abstract>
   </front>
   <middle>
      <section title="Introduction">
         <t>An <xref target="refs.aeb">application extension bundle (AEB)</xref> encapsulates all the data required to extend
         an application. Often referred to as a plug-in or add-on, an AEB is a specific format designed to be
         application and platform agnostic. An application accepting an AEB is referred to as a target application.
         A key component of an AEB is descriptive metadata such as the AEB version,
         requirements, authors, etc. The application extension bundle description language (AEBL) is an
         <xref target="refs.RDF">RDF</xref> vocabulary for the metadata needed by an AEB.</t>
         <section title="Relationship to XPI">
            <t>The AEBL vocabulary is based on an RDF vocabulary used by the <xref target="refs.XPInstall">Mozilla
            XPInstall</xref> addon system, sometimes known as XPI. XPI is a compelling format containing much of the
            metadata needed for an AEB. However, the XPI format is tightly coupled to the Mozilla project and the
            description documents often refer to specific XPI engine implementation details. AEB and the AEBL standardize
            XPI and remove the Mozilla specific details. The original version of AEBL is nearly an exact copy of the
            XPI format with minor changes and clarifications. AEBL should, however, be considered a fork of XPI and
            further changes to XPI may not be reflected in AEBL.</t>
         </section>
         <section title="A Note on Examples">
            <t>Examples presented in this document will be presented in specific serializations of RDF such as rdf+xml
            and <xref target="refs.N3Primer">Notation3</xref>. The AEBL vocabulary is not restricted to these specific
            serializaions and any valid RDF serialization format should be considered equally valid for use with AEBL.
            Specific implementations of AEBL may be restricted to one or more serializations.
            
            <figure><preamble>All examples assume the following prefixes</preamble>
               <artwork><![CDATA[
@prefix rdf:  <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix aebl: <urn:2008:03:aebl-syntax-ns#>.
               ]]>
               </artwork>
            </figure></t>
         </section>
      </section>
      <section title="AEBL Namespace and primary subject">
         <t>
            AEBL elements are defined in the AEBL namespace. The AEBL namespace is urn:2008:03:aebl-syntax-ns.
            This namespace is subject to change before acceptance of this Internet Draft as an RFC.
            
            The primary subject (the analog of an XML root element) is urn:aebl:install-manifest.</t>
      </section>
      <section title="Verbs">
         <section title="Required">
            <section anchor="verb.id" title="id">
               <t>A unique identifier for the AEB.
               <list style="symbols">
                  <t>A <xref target="refs.UUID">UUID</xref> in the form {00000000-0000-0000-0000-000000000000}</t>
                  <t>An <xref target="refs.email">Internet email</xref> style address as a string. This need not 
                  represent an existing email account but uses the same format. Ex. aebname@organization.tld</t>
               </list>
               The id shall not change when the version of an AEB changes. Version information is stored in the
               <xref target="verb.version">version</xref> verb.
               <figure><preamble>The following regular expression matches an id.</preamble>
               <artwork><![CDATA[
^([A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4})|((\{{0,1}([0-9a-fA-F]){8}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){12}\}{0,1}))$
]]></artwork></figure></t>
            </section>
            <section anchor="verb.version" title="version">
               <t>The version verb identifies the version of the AEB. The format of the object shall conform
               to the specification in the <xref target="versions">version numbers</xref> section.</t>
            </section>
            <section anchor="verb.type" title="type">
               <t>The type verb indicates the type of extension stored in the AEB. Valid types are listed below.
               <list style="hanging">
                  <t hangText="2">Functionality extensions and general extensions not fitting another category</t>
                  <t hangText="4">Themes and skins which change the look of a GUI application</t>
                  <t hangText="8">Locale and language extensions which add additional natural language translations</t>
                  <t hangText="32"><xref target="refs.aeb">Multiple item AEB</xref></t>
                  <t hangText=">=16384">Types defined for a specific target application</t>
               </list></t>
            </section>
            <section anchor="verb.name" title="name">
               <t>The name verb indentifies the name of this AEB. This is designed to be presented to a user and shall not be used for
               comparison or unique identification purposes. The <xref target="verb.id">id</xref> verb is used
               to uniquely identify an AEB.</t>
            </section>
            <section anchor="verb.targetApplication" title="targetApplication">
               <t>This verb defines a potential target application. There must be at least one targetApplication defined in an AEB
               and there may be multiple targetApplications defined in an AEB.
               <figure>
                  <artwork>
                     <![CDATA[
<urb:aebl:install-manifest> aebl:targetApplication [ aebl:id "{00000000-0000-0000-0000-000000000000}" ].
]]>
                  </artwork>
               </figure></t>
               <section anchor="verb.targetApplication.id" title="id">
                  <t>This identifies the target application. The format is identical to the main <xref target="verb.id">id</xref> verb.</t>
               </section>
               <section anchor="verb.targetApplication.minVersion" title="minVersion">
                  <t>This identifies the minimum version of the target application required. The format is the same
                  as the <xref target="verb.version">version</xref> verb.</t>
               </section>
               <section anchor="verb.targetApplication.maxVersion" title="maxVersion">
                  <t>
                     This identifies the maximum version of the target application required. The format is the same
                     as the <xref target="verb.version">version</xref> verb.
                  </t>
               </section>
            </section>
         </section>
         <section title="Optional">
            <section anchor="verb.description" title="description">
               <t>This is a short description of the AEB intended for display to the user. This should fit
               on one short line of text. A specific target application may impose more strict length
               requirements.</t>
            </section>
            <section anchor="verb.creator" title="creator">
               <t>The creator verb identifies the name for the creator or prinicipal developer of the AEB.
               This is inteded for display to the user.</t>
            </section>
            <section anchor="verb.developer" title="developer">
               <t>The developer verb identifies an additional developer of the AEB. The principal developer should be named with the
               <xref target="verb.creator">creator</xref> verb. Additional developers are named with the developer verb.
               There must be one and only one <xref target="verb.creator">creator</xref> verb if a developer verb is present.
               There is no limit to the number of developer verbs allowed but a target application may provide more strict limits.
               This is intended for display to the user.</t>
            </section>
            <section anchor="verb.translator" title="translator">
               <t>
                  The translator verb identifies language translators. There is no limit
                  to the number of translator verbs allowed but a target application may provide more strict limits. This is intended
                  for display to the user.</t>
            </section>
            <section anchor="verb.contributor" title="contributor">
               <t>
                  The contributor verb identifies additional contributor to the AEB. There is no limit to the number
                  of contributor verbs allowed but a target application may provide more strict limits.
                  This is intended for display to the user.</t>
            </section>
            <section anchor="verb.homepageURL" title="homepageURL">
               <t>The URL for the AEB's homepage. If present, this must be a valid URL. This is intended for display
               to the user.</t>
            </section>
            <section anchor="verb.iconURL" title="iconURL">
               <t>The URL for a 32x32 pixel icon intended for display to the user. This will typically be displayed in a
               list of AEBs in the target application. The icon should be a common image file format such as PNG, JPG, or ICO.
               A target application may further restrict the acceptable file types. Target applications must accept the
               <xref target="aeburl">AEB URL scheme</xref> and may accept other URL schemes.</t>
            </section>
            <section anchor="verb.licenseURL" title="licenseURL">
               <t>The URL for a file containing license text. This is intended for display to the user. A target application
               may display this in any way but this will typically be displayed in an "accept/reject" dialog box during
               AEB installation. A target application must accept plain text files in UTF-8 format and may accept other
               file formats. A target application must accept the <xref target="aeburl">AEB URL scheme</xref> and may accept
               other URL schemes. There is no limit to the number of licenseURL verbs preset. All licenseURL files must be
               displayed but a target application may use any ordering.</t>
            </section>
            <section anchor="verb.hidden" title="hidden">
               <t>This is a boolean value. If true, the AEB is considered a hidden AEB. A target application should not display
               this AEB in a list of installed AEBs. A target application may have a way to enable the display of hidden AEBs.
               This is intended to prevent the user from seeing or removing AEBs which are considered a core piece of a
               target application. Care should be used when marking an AEB as hidden. A target application may disallow hidden
               AEBs. The value is case insensitive. Valid positive values are: 1, t, and true. Valid
               negative values are: 0, f, and false.</t>
            </section>
            <section anchor="verb.targetPlatform" title="targetPlatform">
               <t>This specifies the target platform for this AEB. There is no limit to the number of targetPlatform verbs allowed.
               This should contain either an operating system target or a complete application binary interface (ABI) target.
               A target application defines valid target strings. Some examples are WINNT, Linux, i686-pc-linux-gnu, and x86_64-msvc8.</t>
            </section>
            <section anchor="verb.requires" title="requires">
               <t>This verb identifies another AEB requirement of this AEB. The format is identical to
               <xref target="verb.targetApplication">targetApplication</xref> but the target id refers to an AEB id. There is no
               limit to the number of requires allowed. A target application may install the AEB if a required target is not
               present but should disable the AEB until the target becomes available. In addition to the
               <xref target="verb.targetApplication.id">id</xref>, <xref target="verb.targetApplication.minVersion">minVersion</xref>,
               and <xref target="verb.targetApplication.maxVersion">maxVersion</xref> verbs, requires may contain a targetApplication verb.</t>
               <section anchor="verb.requires.targetApplication" title="targetApplication">
                  <t>The format of this verb is identical to the higher level <xref target="verb.targetApplication">targetApplication</xref>
                  verb. It is used to further restrict a <xref target="verb.requires">requires</xref>. If present, it indicates that
                  the requires only applies when the target application meets the specification of targetApplication. This is intended
                  to specify AEB requirements which are different depending on the target application of the AEB.</t>
               </section>
            </section>
            <section anchor="verb.incompatible" title="incompatible">
               <t>This verb identifies extensions which are incompatible with this AEB. The format is identical to
               <xref target="verb.requires">requires</xref> but the identified extension and version must not be
               present in the target application.</t>
            </section>
            <section anchor="verb.updateURL" title="updateURL">
               <t>This URL provides an update manifest file with information about AEB updates. This URL should use
               the https scheme. If a non-secure scheme is specified, an <xref target="verb.updateKey">updateKey</xref>
               should be specified. Further information on the format of this URL is presented in <xref target="updates">updates</xref>.</t>
            </section>
            <section anchor="verb.updateKey" title="updateKey">
               <t>This contains a base64 encoded public key used to verify update signatures. The key is comprised of the encryption
               algorithm identifier, following by a colon then the base64 encoding. The data contained in the encoding is specific
               to the encryption algorithm identifier. A target application which does not support the specified encryption
               algorithm must refuse updates for this AEB. There may be multiple updateKey verbs each providing a key for a
               different encryption algorith. It is suggested that the <xref target="verb.updateURL">updateURL</xref>
               use the https scheme and the updateKey verb not be used. Further information is presented in
               <xref target="updates">updates</xref>.
               <figure><preamble>An example updateKey</preamble><artwork>
                  <![CDATA[
<urb:aebl:install-manifest> aebl:updateKey "x509:MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDK426erD/H3XtsjvaB5+PJqbhj
                                                    Zc9EDI5OCJS8R3FIObJ9ZHJK1TXeaE7JWqt9WUmBWTEFvwS+FI9vWu8058N9CHhD
                                                    NyeP6i4LuUYjTURnn7Yw/IgzyIJ2oKsYa32RuxAyteqAWqPT/J63wBixIeCxmysf
                                                    awB/zH4KaPiY3vnrzQIDAQAB".
]]></artwork></figure></t>
            </section>
         </section>
      </section>
      <section anchor="versions" title="versions">
         <t>Version numbers are period separated version fields. A target application or AEB defines the specific
         meaning of various version fields. This document defines the format and comparison rules only. There must be
         at least one version field and there is no limit to the number of allowed version fields. Each version field
         is comprised of four parts: abcd. Parts a and c are integers greater than or equal to 0. Parts b and d
         are ASCII encoded strings. Part a is required. If part b, c or d is present, all parts to the left are required.
         A part may be an asterisk (*) indicating an infinite value for that part and is greater than all
         other values allowed for that part except * which is equal. If a part contains a * the parts to the right
         shall be ignored.
         <figure><preamble>The following regular expression matches a version.</preamble>
         <artwork><![CDATA[
^(((-?\d+)|\*)((([a-zA-Z+_]+)|\*)(((-?\d+)|\*)(([a-zA-Z+_]+)|\*)?)?)?)(\.((-?\d+)|\*)((([a-zA-Z+_]+)|\*)(((-?\d+)|\*)(([a-zA-Z+_]+)|\*)?)?)?)*$
]]></artwork></figure>
         
         Comparison of two versions is performed left to right. The first version field is compared and if equal, the
         next version field is compared. Missing or empty fields are equivalent to 0. Comparison of fields is performed
         left to right on each version part. The a and c fields are considered base 10 and are compared numerically.
         Parts b and d are ASCII encoded strings and are bytewise compared. An existing string part is always less than
         a nonexistent string part. A target application may interpret strings as case insensitive. A * is always greater
         than any other value in a part. The following example demostrates comparisons.
         <figure><artwork><![CDATA[
1.-1 < 1 == 1.0 == 1.0.0 < 1.1a < 1.1aa < 1.1ab < 1.1b < 1.1c
1.1c < 1.1foo < 1.1pre == 1.1pre0 < 1.1pre1a < 1.1pre1aa < 1.1pre1b < 1.1pre1
1.1pre1 < 1.1pre2 < 1.1pre10 < 1.1.-1 < 1.1
1.1 == 1.1.0 == 1.1.00 < 1.10 < 1.* < 1.*.1 < 2.0]]></artwork></figure>
         </t>
      </section>
      <section anchor="aeburl" title="The aeb URL Scheme">
         <t>
            The aeb URL scheme (for example aeb:///icons/small.png) is used to reference files stored in an AEB. The
            root of an aeb URL refers to the root of the AEB archive as defined in <xref target="refs.aeb"/>.</t>
      </section>
      <section anchor="updates" title="Updates">
         <t>An AEB may specify an <xref target="verb.updateURL">updateURL</xref> which will return an update manifest.
            If the URL scheme supports MIME types (such as http and https) the MIME type of the update manifest must
            be a valid RDF MIME type such as text/rdf+xml. A target application may limit which RDF MIME types are accepted.
            The updateURL may contain the following values which will be substituted before requesting the manifest. Substitutions
            will be encoded as valid URLs.
            <list style="hanging">
            <t hangText="%REQ_VERSION%">The request format version. Currently this is 1</t>
            <t hangText="%AEB_ID%">The <xref target="verb.id">id</xref> of this AEB</t>
            <t hangText="%AEB_VERSION%">The <xref target="verb.version">version</xref> of the AEB</t>
            <t hangText="%AEB_MAXAPPVERSION%">The <xref target="verb.targetApplication.maxVersion">maxVersion</xref> specified
               in the AEB of the targetApplication requesting the update manifest</t>
            <t hangText="%AEB_STATUS%">A comma separated list of the status of installed AEBs. Each field is the id of the
               AEB, an equals (=) and a status string. A target application defines the status strings. If the corresponding
               status is supported by a target application, it should use the following strings.
               <list style="hanging">
                  <t hangText="userEnabled">The AEB is enabled and functional.</t>
                  <t hangText="userDisabled">The user has disabled the AEB.</t>
                  <t hangText="incompatible">The AEB is installed but is disabled because it is not compatible with either the
                     target application version or one or more AEB versions.</t>
                  <t hangText="blocksListed">If the AEB target of the update manifest request is disabled due to incompatibility
                     of another AEB version, this AEB is cause. Multiple AEBs may have this status.</t>
                  <t hangText="needsDependencies">The AEB is installed but is disabled because it is missing one or more
                     AEB dependencies.</t>
               </list></t>
            <t hangText="%APP_ID%">The <xref target="verb.targetApplication.id">id</xref> of the target application requesting
               the update manifest</t>
            <t hangText="%APP_VERSION%">The version of the target application requesting the update manifest</t>
            <t hangText="%APP_TARGET%">The OS and ABI platform of the target application requesting the update manifest. The specific
                                       format is defined by the target application.</t>
            <t hangText="%APP_LOCALE%">The locale of the target application requesting the update manifest</t>
         </list>
         The update manifest is an RDF file simlar to an install manifest. The namespace is the same as an install manifest and
         the primary subject is urn:aebl:update-manifest:aebid where aebid is the <xref target="verb.id">id</xref> of the AEB.</t>
         <section title="Verbs">
            <section anchor="verb.signature" title="signature">
               <t>This contains the base64 encoded signature of the update manifest. This has the same format as
               <xref target="verb.updateKey">updateKey</xref>. There may be multiple signature verbs which correspond to
               multiple updateKey verbs in the install manifest. The algorithm for generating and verifying a signature
               is determined by the cryptographic algorithm. The portion of the update that should be signed is the
               <xref target="verb.updates">updates</xref> group.</t>
            </section>
            <section anchor="verb.updates" title="updates">
               <t>This contains an RDF list with one list element per AEB version defined in the update manifest.</t>
               <section anchor="verb.updates.version" title="version">
                  <t>This declares the version of the AEB for this list element.</t>
               </section>
               <section anchor="verb.updates.targetApplication" title="targetApplication">
                  <t>This declares the target application for this list element. There may be multiple targetApplication tags.
                  The format is the same as <xref target="verb.targetApplication"/> with the addition of the following verbs.</t>
                  <section anchor="verb.updates.targetApplication.updateURL" title="updateURL">
                     <t>This is the URL for the AEB corresponding to this <xref target="verb.updates.version">version</xref>
                     and <xref target="verb.updates.targetApplication">targetApplication</xref> combination.</t>
                  </section>
                  <section anchor="verb.updates.targetApplication.updateInfoURL" title="updateInfoURL">
                     <t>This is a URL for an informational page about this updated AEB. This is intended for display to the user.</t>
                  </section>
                  <section anchor="verb.updates.targetApplication.updateSignature" title="updateSignature">
                     <t>This is the signature of the data obtained from <xref target="verb.updates.targetApplication.updateURL"/>.
                     This is not needed if the URL scheme is secure (such as https) and follows the same rules and suggestions
                     as <xref target="verb.signature">signature</xref>.</t>
                  </section>
               </section>
            </section>
         </section>
         <t><figure><preamble>An example update manifest</preamble>
         <artwork>
            <![CDATA[
<?xml version="1.0" encoding="UTF-8"?>

<RDF:RDF xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
         xmlns:aebl="urn:2008:03:aebl-syntax-ns#">

  <RDF:Description about="urn:aebl:update-manifest:foobar@developer.org">
    <aebl:updates>
      <RDF:Seq>
        <!-- Each li is a different version of the same AEB -->
        <RDF:li>
          <RDF:Description>
            <aebl:version>2.2</aebl:version> <!-- This is the version number of the AEB -->

            <!-- One targetApplication for each application the AEB is compatible with -->
            <aebl:targetApplication>
              <RDF:Description>
                <aebl:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</aebl:id>
                <aebl:minVersion>1.5</aebl:minVersion>
                <aebl:maxVersion>2.0.0.*</aebl:maxVersion>

                <!-- This is where this version of the AEB will be downloaded from -->
                <aebl:updateURL>https://www.mysite.com/foobar2.2.aeb</aebl:updateURL>

                <!-- A page describing what is new in this updated version -->
                <aebl:updateInfoURL>http://www.mysite.com/updateinfo2.2.xhtml</aebl:updateInfoURL>
              </RDF:Description>
            </aebl:targetApplication>
          </RDF:Description>
        </RDF:li>

        <RDF:li>
          <RDF:Description>
            <aebl:version>2.5</aebl:version>
            <aebl:targetApplication>
              <RDF:Description>
                <aebl:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</aebl:id>
                <aebl:minVersion>1.5</aebl:minVersion>
                <aebl:maxVersion>2.0.0.*</aebl:maxVersion>
                <aebl:updateURL>http://www.mysite.com/foobar2.5.aeb</aebl:updateURL>
                <aebl:updateHash>sha1:78fc1d2887eda35b4ad2e3a0b60120ca271ce6e6</aebl:updateHash>
              </RDF:Description>
            </aebl:targetApplication>
          </RDF:Description>
        </RDF:li>

      </RDF:Seq>
    </aebl:updates>

    <!-- A signature is only necessary if your AEB includes an updateKey
         in its install.rdf. -->
    <aebl:signature>x509:MIGTMA0GCSqGSIb3DQEBBQUAA4GBAMO1O2gwSCCth1GwYMgscfaNakpN40PJfOWt
                  ub2HVdg8+OXMciF8d/9eVWm8eH/IxuxyZlmRZTs3O5tv9eWAY5uBCtqDf1WgTsGk
                  jrgZow1fITkZI7w0//C8eKdMLAtGueGfNs2IlTd5P/0KH/hf1rPc1wUqEqKCd4+L
                  BcVq13ad</aebl:signature>
  </RDF:Description>
</RDF:RDF>
]]></artwork></figure></t>
      </section>
      <section title="Example">
         <figure><artwork>
            <![CDATA[
@prefix rdf:  <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix aebl: <urn:2008:03:aebl-syntax-ns#> .

<urn:aebl:install-manifest>
   aebl:id "{00000000-0000-0000-0000-000000000000}" ;
   aebl:name "Test AEB" ;
   aebl:version "1.2.3b" ;
   aebl:type "2" ;
   aebl:description "This is a test" ;
   aebl:creator "Trevor Clarke" ;
   aebl:updateURL "https://www.foo.bar/ack" ;
   aebl:iconURL "aeb:///icons/small.png" ;
   aebl:licenseURL "aeb:///licenses/lgpl.txt" ;
   aebl:licenseURL "aeb:///licenses/creativecommons.txt" ;
   aebl:targetApplication [
      aebl:id "{12345678-0000-0000-0000-000000000000}" ;
      aebl:minVersion "1.2" ;
      aebl:maxVersion "1.*" ] ;
   aebl:targetPlatform "WINNT-x86_64-msvc8" .
]]></artwork></figure>
      </section>
   </middle>
   <back>
      <references>
         <reference anchor="refs.RDF" target="http://www.w3.org/RDF">
            <front>
               <title>Resource Description Framework (RDF)</title>
            </front>
         </reference>
         <reference anchor="refs.aeb">
            <front>
               <title>Application Extension Bundle (AEB)</title>
               <author initials="T." surname="Clarke" fullname="Trevor R H Clarke">
                  <organization abbrev="BATC">Ball Aerospace &amp; Technologies Corp.</organization>
               </author>
               <date month="July" day="31" year="2008"/>
            </front>
            <seriesInfo name="I-D" value="draft-tclarke-aeb-00"/>
         </reference>
         <reference anchor="refs.XPInstall" target="http://www.mozilla.org/projects/xpinstall/">
            <front>
               <title>Mozilla XPInstall</title>
            </front>
         </reference>
         <reference anchor="refs.N3Primer" target="http://www.w3.org/2000/10/swap/Primer.html">
            <front>
               <title>A Notation3 Primer</title>
               <author initials="T." surname="Berners-Lee" fullname="Tim Berners-Lee"/>
            </front>
         </reference>
         <reference anchor="refs.UUID" target="http://www.iso.ch/cate/d2229.html">
            <front>
               <title>Information technology -- Open Systems Interconnection -- Remote Procedure Call (RPC)</title>
            </front>
            <seriesInfo name="ISO/IECC" value="11578:1996"/>
         </reference>
         <reference anchor="refs.email">
            <front>
               <title>Simple Mail Transfer Protocol</title>
               <author initials="J." surname="Klensin" role="editor">
                  <organization>AT&amp;T Laboratories</organization>
               </author>
               <date year="2001" month="April"/>
            </front>
            <seriesInfo name="RFC" value="2821"/>
         </reference>
      </references>
   </back>
</rfc>
