Re: #foo URI references

> I think there is a change in meaning, and I think the following example
> demonstrates it:
>
> Let's say that doing a GET on http://example.org/path/doc.xml returns
>
> <doc>
>   <div xml:base="http://example.org/1/a.xml">
>     <p id="x">Some text</p>
>   </div>
>   <div xml:base="http://example.org/2/b.xml">
>     <p id="y"><a href="#x">LinkX</a></p>
>     <p><a href="#y">LinkY</a></p>
>   </div>
> </doc>
>
> The old text says:
>
>    2) If the path component is empty and the scheme, authority, and
>       query components are undefined, then it is a reference to the
>       current document and we are done.
>
> That seems clearly to say that the first link, LinkX, points to
> the "p" with ID "x" in the first div.
>
> Under the new wording, #x becomes http://example.org/2/b.xml#x and it
> seems equally clear that that does not point to the "p" with ID "x" in
> the first div.
>
> That's a change.

http://gbiv.com/protocols/uri/rev-2002/rfc2396bis.html#same-document

Please read what it says carefully:

    When a URI reference occurring within a document or message
    refers to a URI that is, aside from its fragment component
    (if any), identical to the base URI (section 5.1), that reference
    is called a "same-document" reference. The most frequent examples
    of same-document references are relative references that are empty
    or include only the number-sign ("#") separator followed by a
    fragment identifier.

    When a same-document reference is dereferenced for the purpose
    of a retrieval action, the target of that reference is defined
    to be within that current document or message; the dereference
    should not result in a new retrieval.

In your example, the base of the reference "#x" is

    http://example.org/2/b.xml

and the resolved reference is

    http://example.org/2/b.xml#x

which differs from the base only by the fragment component.
Therefore, it is a same-document reference and its behavior will
be EXACTLY the same as prescribed by RFC 2396.

> If we need to make a change, that's fine, or at least, that's a point
> for discussion. But I don't think we can claim not to be making a
> change.

The change that was made is noted in Appendix D.2.  What I am saying
is that this change does not impact documents unless it includes
multiple bases that refer to other documents AND references to those
other documents within their own base using a reference that is
NOT fragment-only.  In other words,

   <doc>
     <div xml:base="http://example.org/1/a.xml">
       <p id="x"><a href="a.xml#y">Link1</a></p>
     </div>
     <div xml:base="http://example.org/2/b.xml">
       <p id="y"><a href="a.xml#y">Link2</a></p>
       <p><a href="#y">LinkY</a></p>
     </div>
   </doc>

under the new interpretation, Link1 is a same-document link.  There
is no known software that relies on Link1 being an other-document
reference for the purpose of a retrieval action.

Under no circumstances does a valid same-document link under RFC 2396
become an other-document link under rfc2396bis.


Cheers,

Roy T. Fielding <http://roy.gbiv.com/>

Received on Friday, 30 January 2004 18:08:13 UTC