<?xml version="1.0" encoding="US-ASCII"?>
<!-- This template is for creating an Internet Draft using xml2rfc,
     which is available here: http://xml.resource.org. -->
<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
<!-- One method to get references from the online citation libraries.
     There has to be one entity for each item to be referenced.
     An alternate method (rfc include) is described in the references. -->

<!ENTITY RFC2119 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2119.xml">
<!ENTITY RFC3986 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.3986.xml">
<!ENTITY RFC3552 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.3552.xml">
<!ENTITY I-D.narten-iana-considerations-rfc2434bis SYSTEM "http://xml.resource.org/public/rfc/bibxml3/reference.I-D.narten-iana-considerations-rfc2434bis.xml">
]>
<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>
<!-- used by XSLT processors -->
<!-- For a complete list and description of processing instructions (PIs),
     please see http://xml.resource.org/authoring/README.html. -->
<!-- Below are generally applicable Processing Instructions (PIs) that most I-Ds might want to use.
     (Here they are set differently than their defaults in xml2rfc v1.32) -->
<?rfc strict="yes" ?>
<!-- give errors regarding ID-nits and DTD validation -->
<!-- control the table of contents (ToC) -->
<?rfc toc="yes"?>

<!-- generate a ToC -->
<?rfc tocdepth="4"?>
<!-- the number of levels of subsections in ToC. default: 3 -->
<!-- control references -->
<?rfc symrefs="yes"?>
<!-- use symbolic references tags, i.e, [RFC2119] instead of [1] -->
<?rfc sortrefs="yes" ?>
<!-- sort the reference entries alphabetically -->
<!-- control vertical white space
     (using these PIs as follows is recommended by the RFC Editor) -->
<?rfc compact="yes" ?>
<!-- do not start each main section on a new page -->
<?rfc subcompact="no" ?>
<!-- keep one blank line between list items -->
<!-- end of list of popular I-D processing instructions -->
<!--
-->
<!-- 07/30/2010 http://xml.resource.org/ https://datatracker.ietf.org/idst/upload.cgi
 It looks like you're using RFC 3978 boilerplate.  You should update this
     to the boilerplate described in the IETF Trust License Policy document
     (see http://trustee.ietf.org/license-info), which is required now.
-->
<rfc category="info" docName="draft-accilent-at-sign-00" ipr="trust200902">
  <!-- category values: std, bcp, info, exp, and historic
     ipr values: full3667, noModification3667, noDerivatives3667
     you can add the attributes updates="NNNN" and obsoletes="NNNN"
     they will automatically be output with "(if approved)" -->

  <!-- ***** FRONT MATTER ***** -->

  <front>
    <!-- The abbreviated title is used in the page header - it is only necessary if the
         full title is longer than 39 characters -->

    <title abbrev="Proper Use of &quot;@&quot;">Clarification of Proper Use of "@" (at sign) in URI-style Components</title>

    <!-- add 'role="editor"' below for the editors if appropriate -->

    <author fullname="Robert Simpson" initials="R.S."
            surname="Simpson">
      <organization>Accilent Corp.</organization>

      <address>
        <postal>
          <street>P.O. Box 601</street>

          <!-- Reorder these if your country does things differently -->

          <city>Lawrence</city>

          <region>PA</region>

          <code>15055</code>

          <country>US</country>
        </postal>

        <phone>+1-412 337-3113</phone>

        <email>RobS.rfc5@MailScreen.com</email>

        <!-- uri and facsimile elements may also be added -->
      </address>
    </author>

    <date month="July" year="2010" />

    <!-- If the month and year are both specified and are the current ones, xml2rfc will fill
         in the current day for you. If only the current year is specified, xml2rfc will fill
	 in the current day and month for you. If the year is not the current one, it is
	 necessary to specify at least a month (xml2rfc assumes day="1" if not specified for the
	 purpose of calculating the expiry date).  With drafts it is normally sufficient to
	 specify just the year. -->

    <!-- Meta-data Declarations -->

    <area>General</area>

    <workgroup>Internet Engineering Task Force</workgroup>

    <!-- WG name at the upperleft corner of the doc,
         IETF is fine for individual submissions.
	 If this element is not present, the default is "Network Working Group",
         which is used by the RFC Editor as a nod to the history of the IETF. -->

    <keyword>at-sign</keyword>
    <keyword>at-replies</keyword>

    <!-- Keywords will be incorporated into HTML output
         files in a meta tag but they have no effect on text or nroff
         output. If you submit your draft to the RFC Editor, the
         keywords will be used for the search engine. -->

    <abstract>
      <t>Defacto standards have evolved that conflict with existing standards,
         specifically RFC 3986.
         This document clarifies the use of the "@" (at sign) in URIs and partial URI-like addresses.
      </t>
    </abstract>
  </front>

  <middle>

    <section title="Introduction">

      <t>The original specification of the URI format is in
         <xref target="RFC3986">RFC 3986</xref>.
      </t>

      <section title="Requirements Language">
        <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
           "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
           document are to be interpreted as described in <xref
           target="RFC2119">RFC 2119</xref>.
        </t>
      </section>
    </section>

<!--
    <section anchor="simple_list" title="Simple List">
      <t>List styles: 'empty', 'symbols', 'letters', 'numbers', 'hanging',
      'format'.</t>

      <t><list style="symbols">
          <t>First bullet</t>

          <t>Second bullet</t>
        </list> You can write text here as well.</t>

    </section>
-->

    <section title="Issues">
      <t>
         <list style="symbols">
            <t>Microblogging systems on social networks have introduced a
               shortcut feature where short replies with tokens containing
               an "@" and userinfo are automatically converted to HTML links.
               On systems where the host component is assumed to be the same
               as the host that is currently loaded into the user's browser,
               the defacto standard syntax that has evolved for these auto-generated
               links is for the "@" (at sign) to precede the userinfo.
            </t>
            <t>Allowing the "@" to be placed in a non-standard location, especially
               in HTML links, results in confusion about which component follows the "@".
               For example, in "@its.me", is "its.me" the userinfo or the host component?
            </t>
            <t>How would the "@userinfo" syntax currently being
               used be extended to support multiple networks?
               For example, in a mobile application that allows posting updates to
               multiple social networks, should it conform to the defacto standard
               and use "ExampleOnly.com@userinfo" or go against the current common
               usage and try to conform to the standards for URIs instead?
               Either option introduces potentially harmful confusion for users and automated systems.
            </t>
         </list>
      </t>
    </section>

    <section title="Conclusions">
      <t>
         <list style="symbols">
            <t>It should be allowable to omit the host component of the authority
               syntax when the host component is known, such as when referencing
               another user on the same host or relative to a base URI.
            </t>
            <t>Placing the "@" prior to the userinfo instead of following it should
               be explicitly prohibited due to the confusion it introduces and the
               security concerns due to possibly misinterpreting the userinfo and as a
               result of allowing users to become comfortable with misplacing the "@".
            </t>
         </list>
      </t>
    </section>

    <section title="Valid Syntax">
      <t>In <xref target="RFC3986">RFC 3986</xref>, the syntax of the
         authority component in a URI is defined as:
      </t>
      <figure>
         <artwork align="left"><![CDATA[
            authority   = [ userinfo "@" ] host [ ":" port ]
]]></artwork>
      </figure>
      <t>In addition, when the user is on a known host, on the same social network
         for example, the host and port components MAY be omitted:
      </t>
      <figure>
         <artwork align="left"><![CDATA[
            authority   = [ userinfo "@" ] [ host [ ":" port ] ]
]]></artwork>
      </figure>
      <t>When the host component is omitted, the userinfo component will be
         interpreted to be relative to the base URI of the current resource.
         For example:
      </t>
      <figure>
        <artwork align="left"><![CDATA[
+--------------------------------------------------+
| http://ExampleOnly.com/JaneSmith                 |
|--------------------------------------------------|
| JohnDoe@ I will meet you there in a short while. |
|__________________________________________________|
]]></artwork>
      </figure>
      <t>will be interpreted as:
      </t>
      <figure>
        <artwork align="left"><![CDATA[
+-----------------------------------------------------------------+
| http://ExampleOnly.com/JaneSmith                                |
|-----------------------------------------------------------------|
| JohnDoe@ExampleOnly.com I will meet you there in a short while. |
|_________________________________________________________________|
]]></artwork>
      </figure>
      <t>and (in HTML code):
      </t>
      <figure>
        <artwork align="left"><![CDATA[
+----------------------------------+
| http://ExampleOnly.com/JaneSmith |
|----------------------------------|
| <a href="/JohnDoe">JohnDoe@</a>  |
|__________________________________|
]]></artwork>
      </figure>
      <t>will be interpreted as:
      </t>
      <figure>
        <artwork align="left"><![CDATA[
+------------------------------------------------------------------+
| http://ExampleOnly.com/JaneSmith                                 |
|------------------------------------------------------------------|
| <a href="http://ExampleOnly.com/JohnDoe">JohnDoe@ExampleOnly</a> |
|__________________________________________________________________|
]]></artwork>
      </figure>
    </section>

    <section title="Invalid Syntax">
      <t>In a component that may at some time be interpreted to be a URI by some
         system the "@" MUST NOT be placed prior to the userinfo component:
      </t>
      <figure>
         <artwork align="left"><![CDATA[
                      WRONG! [ "@" userinfo ]
]]></artwork>
      </figure>
      <t>The "@" SHOULD not be placed prior to the userinfo component even in
         areas of plain text due to the potential for altering users'
         perception of the correct placement of the "@" separator.
      </t>

      <t>The "@" SHOULD NOT appear in an improper location in an HTML link:
      </t>
      <figure>
         <artwork align="left"><![CDATA[
                                  WRONG!
           <a href="http://ExampleOnly.com/JohnDoe">@JohnDoe</a>
    <a href="http://ExampleOnly.com/JohnDoe">ExampleOnly.com@JohnDoe</a>
]]></artwork>
      </figure>
    </section>

    <section title="Examples">
<!--
      <t>Figures should not exceed 69 characters wide to allow for the indent
      of sections.
      </t>
-->

      <figure align="center" anchor="bad-example">
        <preamble>Improper usage when user being replied to is on the same social network</preamble>

        <artwork align="left"><![CDATA[
+--------------------------------------------------+
| @JohnDoe I will meet you there in a short while. |
|__________________________________________________|
]]></artwork>

        <postamble>WRONG! How would the host component be appended if the user was on a different network?
        </postamble>
      </figure>

      <figure align="center" anchor="good-example-unqualified">
        <preamble>Standalone userinfo component when user being replied to is on the same social network</preamble>

        <artwork align="left"><![CDATA[
+--------------------------------------------------+
| JohnDoe@ I will meet you there in a short while. |
|__________________________________________________|
]]></artwork>

        <postamble>This follows the current standard use of "@" in the authority component.
        </postamble>
      </figure>

      <figure align="center" anchor="good-example-qualified">
        <preamble>Fully-qualified authority component when the user being replied to can be on a different host</preamble>

        <artwork align="left"><![CDATA[
+-----------------------------------------------------------------+
| JohnDoe@ExampleOnly.com I will meet you there in a short while. |
|_________________________________________________________________|
]]></artwork>

        <postamble>Appending the host component after the "@" results in syntax that conforms to the RFC 3986.
        </postamble>
      </figure>

<!--
      <t>The CDATA means you don't need to escape meta-characters (especially
      &lt;&nbsp;(&amp;lt;) and &amp;&nbsp;(&amp;amp;)) but is not essential.
      Figures may also have a title attribute but it won't be displayed unless
      there is also an anchor. White space, both horizontal and vertical, is
      significant in figures even if you don't use CDATA.
      </t>
-->
    </section>

<!--
    <!- - This PI places the pagebreak correctly (before the section title) in the text output. - ->

    <?rfc needLines="8" ?>

    <section title="Subsections and Tables">
      <section title="A Subsection">
        <t>By default 3 levels of nesting show in table of contents but that
        can be adjusted with the value of the "tocdepth" processing
        instruction.</t>
      </section>

      <section title="Tables">
        <t>.. are very similar to figures:</t>

        <texttable anchor="table_example" title="A Very Simple Table">
          <preamble>Tables use ttcol to define column headers and widths.
          Every cell then has a "c" element for its content.</preamble>

          <ttcol align="center">ttcol #1</ttcol>

          <ttcol align="center">ttcol #2</ttcol>

          <c>c #1</c>

          <c>c #2</c>

          <c>c #3</c>

          <c>c #4</c>

          <c>c #5</c>

          <c>c #6</c>

          <postamble>which is a very simple example.</postamble>
        </texttable>
      </section>
    </section>
-->

<!--
    <section anchor="nested_lists" title="More about Lists">
      <t>Lists with 'hanging labels': the list item is indented the amount of
      the hangIndent: <list hangIndent="8" style="hanging">
          <t hangText="short">With a label shorter than the hangIndent.</t>

          <t hangText="fantastically long label">With a label longer than the
          hangIndent.</t>

          <t hangText="vspace_trick"><vspace blankLines="0" />Forces the new
          item to start on a new line.</t>

        </list></t>

      <!- - It would be nice to see the next piece (12 lines) all on one page. - ->

      <?rfc needLines="12" ?>

      <t>Simulating more than one paragraph in a list item using
      &lt;vspace&gt;: <list style="letters">
          <t>First, a short item.</t>

          <t>Second, a longer list item.<vspace blankLines="1" /> And
          something that looks like a separate pararaph..</t>
        </list></t>

      <t>Simple indented paragraph using the "empty" style: <list
          hangIndent="10" style="empty">
          <t>The quick, brown fox jumped over the lazy dog and lived to fool
          many another hunter in the great wood in the west.</t>
        </list></t>

      <section title="Numbering Lists across Lists and Sections">
        <t>Numbering items continuously although they are in separate
        &lt;list&gt; elements, maybe in separate sections using the "format"
        style and a "counter" variable.</t>

        <t>First list: <list counter="reqs" hangIndent="4" style="format R%d">
            <t>#1</t>

            <t>#2</t>

            <t>#3</t>
          </list> Specify the indent explicitly so that all the items line up
        nicely.</t>

        <t>Second list: <list counter="reqs" hangIndent="4" style="format R%d">
            <t>#4</t>

            <t>#5</t>

            <t>#6</t>
          </list></t>
      </section>

      <section title="Where the List Numbering Continues">
        <t>List continues here.</t>

        <t>Third list: <list counter="reqs" hangIndent="4" style="format R%d">
            <t>#7</t>

            <t>#8</t>

            <t>#9</t>

            <t>#10</t>

          </list> The end of the list.</t>
      </section>
    </section>
-->

<!--
    <section anchor="codeExample"
             title="Example of Code or MIB Module To Be Extracted">
      <figure>
        <preamble>The &lt;artwork&gt; element has a number of extra attributes
        that can be used to substitute a more aesthetically pleasing rendition
        into HTML output while continuing to use the ASCII art version in the
        text and nroff outputs (see the xml2rfc README for details). It also
        has a "type" attribute. This is currently ignored except in the case
        'type="abnf"'. In this case the "artwork" is expected to contain a
        piece of valid Augmented Backus-Naur Format (ABNF) grammar. This will
        be syntax checked by xml2rfc and any errors will cause a fatal error
        if the "strict" processing instruction is set to "yes". The ABNF will
        also be colorized in HTML output to highlight the syntactic
        components. Checking of additional "types" may be provided in future
        versions of xml2rfc.</preamble>

        <artwork><![CDATA[

/**** an example C program */

#include <stdio.h>

void
main(int argc, char *argv[])
{
    int i;

    printf("program arguments are:\n");
    for (i = 0; i < argc; i++) {
        printf("%d: \"%s\"\n", i, argv[i]);
    }

    exit(0);
} /* main */

/* end of file */

            ]]></artwork>
      </figure>
    </section>
-->

<!--
    <section anchor="Acknowledgements" title="Acknowledgements">
      <t>This template was derived from an initial version written by Pekka
      Savola and contributed by him to the xml2rfc project.</t>

      <t>This document is part of a plan to make xml2rfc indispensable <xref
      target="DOMINATION"></xref>.</t>

    </section>
-->

    <!-- Possibly a 'Contributors' section ... -->

    <section anchor="IANA" title="IANA Considerations">
      <t>This memo includes no request to IANA.
      </t>
    </section>

    <section anchor="Security" title="Security Considerations">
      <t>A URI does not in itself pose a security threat.
         However, as URIs are often used to provide a compact set of instructions for
         access to network resources, care must be taken to properly interpret the
         data within a URI, to prevent that data from causing unintended access,
         and to avoid including data that should not be revealed in plain text.
      </t>
      <t>However, placing an "@" in the wrong position, such as prior to the userinfo
         rather than following it, can introduce security risks, since the
         userinfo may be incorrectly interpreted or supplied to unauthorized systems.
         A defacto standard that places the "@" in the wrong location
         introduces additional security risks due to the increased likelihood
         that users will misplace the "@" as a result of the confusion.
      </t>
    </section>

  </middle>

  <!--  *****BACK MATTER ***** -->

  <back>
    <!-- References split into informative and normative -->

    <!-- There are 2 ways to insert reference entries from the citation libraries:
     1. define an ENTITY at the top, and use "ampersand character"RFC2629; here (as shown)
     2. simply use a PI "less than character"?rfc include="reference.RFC.2119.xml"?> here
        (for I-Ds: include="reference.I-D.narten-iana-considerations-rfc2434bis.xml")

     Both are cited textually in the same manner: by using xref elements.
     If you use the PI option, xml2rfc will, by default, try to find included files in the same
     directory as the including file. You can also define the XML_LIBRARY environment variable
     with a value containing a set of directories to search.  These can be either in the local
     filing system or remote ones accessed by http (http://domain/dir/... ).-->

    <references title="Normative References">

      &RFC2119;

      &RFC3986;

<!--
      <reference anchor="min_ref">

        <!- - the following is the minimum to make xml2rfc happy - ->

        <front>
          <title>Minimal Reference</title>

          <author initials="R.S." surname="Simpson">
            <organization>Accilent Corp.</organization>
          </author>

          <date year="2010" />

        </front>
      </reference>
-->

    </references>

<!--
    <references title="Informative References">
      <!- - Here we use entities that we defined at the beginning. - ->

      <!- - A reference written by by an organization not a person. - ->

      <reference anchor="DOMINATION"
                 target="http://www.example.com/dominator.html">
        <front>
          <title>Ultimate Plan for Taking Over the World</title>

          <author>

            <organization>Mad Dominators, Inc.</organization>
          </author>

          <date year="1984" />
        </front>
      </reference>

    </references>
-->

<!--
    <section anchor="app-additional" title="Additional Stuff">

      <t>This becomes an Appendix.</t>
    </section>
-->

  </back>
</rfc>
