- From: Graham Klyne <GK@ninebynine.org>
- Date: Sun, 15 Jun 2003 13:24:37 +0100
- To: James Clark <jjc@jclark.com>, www-rdf-comments@w3.org
The problematic "same document reference" wording from is proposed to be
revised in the forthcoming revision of RFC2396 [1] [2]. With this change,
I think that using xml:base is entirely consistent with RFC2396.
I have highlighted the relevant changes in citations [3][4]. Note in
particular that the following:
[[
-- An empty reference refers to the current document
return (current-document, fragment);
]]
no longer appears in the description of the algorithm for mapping a
relative URI to a full URI.
#g
--
[1] http://www.apache.org/~fielding/uri/rev-2002/rfc2396bis.html
[2] http://www.apache.org/~fielding/uri/rev-2002/issues.html#017-rdf-fragment
specifically:
[[
action: Roy T. Fielding, 23 May 2003, draft 02:
Removed the special-case treatment of same-document references in favor of a
section that explains that a new retrieval action should not be made if the
target URI and base URI, excluding fragments, match.
]]
[3] Changes to same-document reference text:
Old text:
[[
4.2 Same-document References
A URI reference that does not contain a URI is a reference to the current
document. In other words, an empty URI reference within a document is
interpreted as a reference to the start of that document, and a reference
containing only a fragment identifier is a reference to the identified
fragment of that document. Traversal of such a reference should not result
in an additional retrieval action. However, if the URI reference occurs in
a context that is always intended to result in a new request, as in the
case of HTML's FORM element, then an empty URI reference represents the
base URI of the current document and should be replaced by that URI when
transformed into a request.
]]
--
http://www.apache.org/~fielding/uri/rev-2002/draft-fielding-uri-rfc2396bis-00.html#rfc.section.4.2
New text:
[[
4.4 Same-document Reference
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.
]]
[4] Changes to URI resolution test:
Old text:
[[
For each URI reference (R), the following pseudocode describes an
algorithm for transforming R into its target (T), which is either an
absolute URI or the current document, and R's optional fragment:
(R.scheme, R.authority, R.path, R.query, fragment) = parse(R);
-- The URI reference is parsed into the four components and
-- fragment identifier, as described in Section 4.3.
if ((not validating) and (R.scheme == Base.scheme)) then
-- A non-validating parser may ignore a scheme in the
-- reference if it is identical to the base URI's scheme.
undefine(R.scheme);
endif;
if defined(R.scheme) then
T.scheme = R.scheme;
T.authority = R.authority;
T.path = R.path;
T.query = R.query;
else
if defined(R.authority) then
T.authority = R.authority;
T.path = R.path;
T.query = R.query;
else
if (R.path == "") then
if defined(R.query) then
T.path = Base.path;
T.query = R.query;
else
-- An empty reference refers to the current document
return (current-document, fragment);
endif;
else
if (R.path starts-with "/") then
T.path = R.path;
else
T.path = merge(Base.path, R.path);
endif;
T.query = R.query;
endif;
T.authority = Base.authority;
endif;
T.scheme = Base.scheme;
endif;
return (T, fragment);
]]
--
http://www.apache.org/~fielding/uri/rev-2002/draft-fielding-uri-rfc2396bis-00.html#rfc.section.5.2
New text:
[[
For each URI reference (R), the following pseudocode describes an algorithm
for transforming R into its target URI (T):
-- The URI reference is parsed into the five URI components
--
(R.scheme, R.authority, R.path, R.query, R.fragment) = parse(R);
-- A non-strict parser may ignore a scheme in the reference
-- if it is identical to the base URI's scheme.
--
if ((not strict) and (R.scheme == Base.scheme)) then
undefine(R.scheme);
endif;
if defined(R.scheme) then
T.scheme = R.scheme;
T.authority = R.authority;
T.path = remove_dot_segments(R.path);
T.query = R.query;
else
if defined(R.authority) then
T.authority = R.authority;
T.path = remove_dot_segments(R.path);
T.query = R.query;
else
if (R.path == "") then
T.path = Base.path;
if defined(R.query) then
T.query = R.query;
else
T.query = Base.query;
endif;
else
if (R.path starts-with "/") then
T.path = remove_dot_segments(R.path);
else
T.path = merge(Base.path, R.path);
T.path = remove_dot_segments(T.path);
endif;
T.query = R.query;
endif;
T.authority = Base.authority;
endif;
T.scheme = Base.scheme;
endif;
T.fragment = R.fragment;
]]
--
http://www.apache.org/~fielding/uri/rev-2002/draft-fielding-uri-rfc2396bis-03.html#absolutize
At 08:50 15/06/03 +0700, James Clark wrote:
>Section 2.14 of the syntax spec says that xml:base is used in resolving a
>URI reference such as "#snack". I believe this in violation of RFC 2396.
>A URI reference such as "#snack" is not in fact a relative URI reference
>(see the BNF in section 11 of RFC 2396); rather it is a "same document
>reference". See RFC 2396 section 4.2. This says that a URI reference
>containing only a fragment identifier is a reference to the identified
>fragment of the *current* document (i.e. the document in which the
>fragment identifier occurs). I believe that for consistency with RFC 2396
>xml:base should not apply to same document references, and also should not
>apply to rdf:ID. It seems totally bizarre to me that xml:base should
>apply to rdf:ID when rdf:ID is not a relative URI. It also seems bizarre
>that rdf:ID should define a fragment identifier in a resource other than
>the one in which it occurs: surely a resource only gets to define its own
>fragment identifiers.
>
>James
-------------------
Graham Klyne
<GK@NineByNine.org>
PGP: 0FAA 69FF C083 000B A2E9 A131 01B9 1C7A DBCA CB5E
Received on Sunday, 15 June 2003 12:32:03 UTC