RE: RDF and xml:base

Ron Daniel [mailto:rdaniel@interwoven.com] wrote:

>Um, if what I was describing DOES go against RFC 2396, it would be an error
>and would need to be fixed. But I don't think it does.
>
>
>> Again, from RFC 2396, section 5.2:
>> [[
>> 
>>    For each URI reference, the following steps are performed in order:
>> 
>>    1) The URI reference is parsed into the potential four components and
>>       fragment identifier, as described in Section 4.3.
>> ]]
>> 
>> i.e. scheme, authority, path and query parts of the URI, plus 
>> possibly a fragment identifier.
>> 
>> [[
>>    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.  Otherwise, the reference URI's
>>       query and fragment components are defined as found (or not found)
>>       within the URI reference and not inherited from the base URI.
>> ]]
>> 
>> i.e. a fragment on its own => "it is a reference to the current 
>> document and we are done".
>
>Right, but Section 5.2 actually starts by saying:
>
>> 5.2. Resolving Relative References to Absolute Form
>> 
>>   This section describes an example algorithm for resolving URI
>>   references that might be relative to a given base URI.
>>
>>   The base URI is established ACCORDING TO THE RULES OF SECTION 5.1 and
>>   parsed into the four main components as described in Section 3.  
>
>(emphasis added)
>
>Section 5.1 says that the highest priority way of determining the
>base URI is:
>
>> 5.1.1. Base URI within Document Content
>> 
>>    Within certain document media types, the base URI of the document can
>>    be embedded within the content itself such that it can be readily
>>    obtained by a parser.  
>
>which will be xml:base for XML documents (once it becomes a REC).
>
>So, if xml:base is specified, it is what is parsed into the components.
>
>Ron
>

Yes, the value of xml:base is parsed into the components for the "base URI",
but it is not the same thing as the URI of the "current document".

In C++ code:

//----------------------------------------------------------
const std::string docURI = getCurrentDocURI();

std::string baseURI = getContentSpecifiedBaseURI();
if(baseURI.empty()) {

  baseURI = getEnclosingDocURI();
  if(baseURI.empty()) {

    baseURI = docURI;
    if(baseURI.empty()) {

      // set base URI to some application specific URI
    }
  }
}
//----------------------------------------------------------


Note that whilst processing the "current document", its URI is *fixed*,
(i.e. constant) for the purposes of resolving relative URI-references within
it.  Whether the base URI is specified in a document's content or not, you
could never change the URI for the "current document".

Let's consider a couple of resolution examples to clarify:

Example 1
=========
A document with a URI of 'http://other.com/doc.rdf' has content:

<?xml version="1.0"?>
<rdf:RDF xmlns:rdf='...' xmlns:ex='http://example.org/'
         xml:base='http://example.org/Base/' >
  <rdf:Description rdf:ID='localID'>
    <ex:property>PropVal</ex:property>
  </rdf:Description>
</rdf:RDF>

Now, whilst processing this document, using RFC2396 to resolve localID's
absolute URI-reference:

[[
5.2. Resolving Relative References to Absolute Form

   This section describes an example algorithm for resolving URI
   references that might be relative to a given base URI.

   The base URI is established according to the rules of Section 5.1 and
   parsed into the four main components as described in Section 3.  Note
   that only the scheme component is required to be present in the base
   URI; the other components may be empty or undefined.  A component is
   undefined if its preceding separator does not appear in the URI
   reference; the path component is never undefined, though it may be
   empty.  The base URI's query component is not used by the resolution
   algorithm and may be discarded.
]]


According to 5.1 the base URI has been specified by xml:base in the content,
which takes highest priority, so:
base URI => scheme='http'; authority='example.org'; path='Base/';
query=<undefined>


[[
   For each URI reference, the following steps are performed in order:

   1) The URI reference is parsed into the potential four components and
      fragment identifier, as described in Section 4.3.
]]


The 'localID' URI reference is:
URI reference => scheme=<undefined>; authority=<undefined>; path=<empty>;
query=<undefined>; fragment='localID'


[[
   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.  Otherwise, the reference URI's
      query and fragment components are defined as found (or not found)
      within the URI reference and not inherited from the base URI.
]]

It is a reference to the current document and we are done - i.e. it is a
reference to 'http://other.com/doc.rdf'.  'localID' is a fragment identifier
within that resource, so the absolute URI reference is
'http://other.com/doc.rdf#localID'.



Example 2
=========
A document with a URI of 'http://other.com/doc2.rdf' has content:

<?xml version="1.0"?>
<rdf:RDF xmlns:rdf='...' xmlns:ex='http://example.org/'
         xml:base='http://example.org/Base/' >
  <rdf:Description rdf:about='./#localID'>
    <ex:property>PropVal</ex:property>
  </rdf:Description>
</rdf:RDF>

Again using RFC2396 to resolve localID's absolute URI reference:

as before, work out the base URI:
base URI => scheme='http'; authority='example.org'; path='Base/';
query=<undefined>


[[
   For each URI reference, the following steps are performed in order:

   1) The URI reference is parsed into the potential four components and
      fragment identifier, as described in Section 4.3.
]]


The 'localID' URI-reference is:
URI reference => sheme=<undefined>; authority=<undefined>; path='./';
query=<undefined>; fragment='localID'


[[
   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.  Otherwise, the reference URI's
      query and fragment components are defined as found (or not found)
      within the URI reference and not inherited from the base URI.
]]


The path component is now not empty, so the query and fragment components
are defined as found (i.e. any base URI query and/or fragment are always
ignored):
reference URI => scheme=<TBD>; authority=<TBD>; path=<TBD>;
query=<undefined>; fragment='localID'

(Note the reference URI is a third variable which holds the result of
resolving the localID URI reference against the base URI).


[[
   3) If the scheme component is defined, indicating that the reference
      starts with a scheme name, then the reference is interpreted as an
      absolute URI and we are done.  Otherwise, the reference URI's
      scheme is inherited from the base URI's scheme component.

      Due to a loophole in prior specifications [RFC1630], some parsers
      allow the scheme name to be present in a relative URI if it is the
      same as the base URI scheme.  Unfortunately, this can conflict
      with the correct parsing of non-hierarchical URI.  For backwards
      compatibility, an implementation may work around such references
      by removing the scheme if it matches that of the base URI and the
      scheme is known to always use the <hier_part> syntax.  The parser
      can then continue with the steps below for the remainder of the
      reference components.  Validating parsers should mark such a
      misformed relative reference as an error.
]]


The reference URI's scheme is inherited from the base URI's scheme
component:
reference URI => scheme='http'; authority=<TBD>; path=<TBD>;
query=<undefined>; fragment='localID'


[[
   4) If the authority component is defined, then the reference is a
      network-path and we skip to step 7.  Otherwise, the reference
      URI's authority is inherited from the base URI's authority
      component, which will also be undefined if the URI scheme does not
      use an authority component.
]]


The reference URI's authority is inherited from the base URI's authority
component:
reference URI => scheme='http'; authority='example.org'; path=<TBD>;
query=<undefined>; fragment='localID'


[[
   5) If the path component begins with a slash character ("/"), then
      the reference is an absolute-path and we skip to step 7.
]]


The path component begins with a '.' so we go on to step 6.


[[
   6) If this step is reached, then we are resolving a relative-path
      reference.  The relative path needs to be merged with the base
      URI's path.  Although there are many ways to do this, we will
      describe a simple method using a separate string buffer.

      a) All but the last segment of the base URI's path component is
         copied to the buffer.  In other words, any characters after the
         last (right-most) slash character, if any, are excluded.

      b) The reference's path component is appended to the buffer
         string.

      c) All occurrences of "./", where "." is a complete path segment,
         are removed from the buffer string.

      d) If the buffer string ends with "." as a complete path segment,
         that "." is removed.

      e) All occurrences of "<segment>/../", where <segment> is a
         complete path segment not equal to "..", are removed from the
         buffer string.  Removal of these path segments is performed
         iteratively, removing the leftmost matching pattern on each
         iteration, until no matching pattern remains.

      f) If the buffer string ends with "<segment>/..", where <segment>
         is a complete path segment not equal to "..", that
         "<segment>/.." is removed.

      g) If the resulting buffer string still begins with one or more
         complete path segments of "..", then the reference is
         considered to be in error.  Implementations may handle this
         error by retaining these components in the resolved path (i.e.,
         treating them as part of the final URI), by removing them from
         the resolved path (i.e., discarding relative levels above the
         root), or by avoiding traversal of the reference.

      h) The remaining buffer string is the reference URI's new path
         component.
]]


reference URI => scheme='http'; authority='example.org'; path='Base/';
query=<undefined>; fragment='localID'


[[
   7) The resulting URI components, including any inherited from the
      base URI, are recombined to give the absolute form of the URI
      reference.  [snip]
]]


absolute URI reference = 'http://example.org/Base/#localID'



In summary, xml:base is a way of specifying the base URI within an XML
document's content, never the document's URI itself.  A base URI is used to
resolve relative URI references into absolute URI references.  A URI
reference consisting of a fragment identifier only (i.e. starting with a
'#') is a reference to the current document and is not affected by the base
URI.


regards

Lee

begin 600 winmail.dat
M>)\^(AH+`0:0"``$```````!``$``0>0!@`(````Y`0```````#H``$(@`<`
M&````$E032Y-:6-R;W-O9G0@36%I;"Y.;W1E`#$(`06``P`.````T0<&``$`
M#``F`!(`!0`H`0$@@`,`#@```-$'!@`!``P`)@`9``4`+P$!"8`!`"$````P
M-T,U13(W,S!$-#E$-3$Q04(P0C`P,3`U031#1#=!-P`2!P$$@`$`%0```%)%
M.B!21$8@86YD('AM;#IB87-E`&8&`0V`!``"`````@`"``$#D`8`[!<``#0`
M```#``E9`0````,`WC^O;P```P`V```````#`!F`""`&``````#`````````
M1@````!2A0``)VH!`!X`&H`((`8``````,````````!&`````%2%```!````
M!````#DN,``+`!N`""`&``````#`````````1@`````&A0````````,`"(`(
M(`8``````,````````!&``````&%````````"P``@`@@!@``````P```````
M`$8``````X4````````+`!^`""`&``````#`````````1@`````.A0``````
M``,``H`((`8``````,````````!&`````!"%`````````P`@@`@@!@``````
MP````````$8`````$84````````#`"*`""`&``````#`````````1@`````8
MA0```````!X`,8`((`8``````,````````!&`````#:%```!`````0``````
M```>`#*`""`&``````#`````````1@`````WA0```0````$`````````'@`S
M@`@@!@``````P````````$8`````.(4```$````!``````````L`.X`((`8`
M`````,````````!&`````(*%```!`````@$)$`$````Z$@``-A(``'DR``!,
M6D9UK=34!`,`"@!R8W!G,3(UXC(#0W1E>`5!`0,!]_\*@`*D`^0'$P*`#_,`
M4`16/PA5![(1)0Y1`P$"`&-HX0K`<V5T,@8`!L,1)?8S!$83MS`2+!$S".\)
M][8[&!\.,#41(@Q@8P!0\PL)`60S-A90"Z8'\0.@;D0`<`B0`R!;`,`#$'1L
M;SH+(!U#0`N`#K!R*'=O=@GP+@6@;5WL('<#8`ZP.@JB"H0*@.`^56TL(`:0
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
M;6PZ8F%S90`````"`7$``0```"\````!P..1IP5SXK2#20T1U:L+`!!:3->G
M`26^XF``"F\N(```NK&@`#+NP=``6*-$L``#`"8```````,`+@``````"P`"
M``$````>`$(0`0```#8````\14U%2TE#0T=&14M*1D=+349,15!-14Q(0TM!
M02YR9&%N:65L0&EN=&5R=V]V96XN8V]M/@````,`_3_D!```0``Y`*#-JEJ/
MZL`!`P#Q/PD$```>`#%``0````0```!,144``P`:0``````>`#!``0````0`
M``!,144``P`90``````#`(`0_____PL`\A`!`````@%'``$````W````8SU'
M0CMA/2`[<#U4:&4@0V%K92!(;W5S93ML/5I)3D=)0D52+3`Q,#8P,3$Q,S@Q
M.%HM,S`Q```"`?D_`0```$T`````````W*=`R,!"$!JTN0@`*R_A@@$`````
M````+T\]5$A%($-!2T4@2$]54T4O3U4]3$].1$].+T-./5)%0TE0245.5%,O
M0TX]3$5%`````!X`^#\!````"@```$QE92!*;VYA<P```!X`.$`!````!```
M`$Q%10`"`?L_`0```$T`````````W*=`R,!"$!JTN0@`*R_A@@$`````````
M+T\]5$A%($-!2T4@2$]54T4O3U4]3$].1$].+T-./5)%0TE0245.5%,O0TX]
M3$5%`````!X`^C\!````"@```$QE92!*;VYA<P```!X`.4`!````!````$Q%
M10!```<P,,JD6H_JP`%```@PX`]L7H_JP`$>`#T``0````4```!213H@````
M`!X`'0X!````$0```%)$1B!A;F0@>&UL.F)A<V4`````'@`U$`$````P````
M/#4Q140R.48S,44R,$0T,3%!049$,#`Q,#5!-$-$-T$W-S$R0T!:24Y'24)%
M4CX`"P`I```````+`",```````,`!A`"&(Y?`P`'$.8@```#`!`0``````,`
M$1``````'@`($`$```!E````4D].1$%.245,34%)3%1/.E)$04Y)14Q`24Y4
M15)73U9%3D-/35=23U1%.E5-+$E&5TA!5$E705-$15-#4DE"24Y'1$]%4T=/
M04=!24Y35%)&0S(S.38L25173U5,1$)%04Y%4@`````"`7\``0```#`````\
M-3%%1#(Y1C,Q13(P1#0Q,4%!1D0P,#$P-4$T0T0W03<W,3)#0%I)3D=)0D52
$/@!=.@==
`
end

Received on Friday, 1 June 2001 07:38:51 UTC