- From: Graham Klyne <gk@ninebynine.org>
- Date: Fri, 19 Nov 2004 12:37:26 +0000
- To: "Martin Balaz" <balaz@ii.fmph.uniba.sk>, <uri@w3.org>
At 11:54 19/11/04 +0000, Martin Balaz wrote: >Why do you consider the results ("f:/g" and "f://example.org/base/b/c/d/e") >to be not intuitive? I didn't mean to claim *that* case was unintuitive, though I also don't think they're obviously correct. The results I quoted were what I achieved by implementing the specification as given (or so I believed). What I meant to say was unintuitive was the same issues that you were raising as problems; my way of signalling cautious agreement with you :-) I personally tend to a view that changes to the path should be minimized, and generally replacing // with / seems to go against that principle. I also think anything that amounts to a substantive change to the spec's treatment of URIs should be avoided to the maximum extent possible with fixing any "obvious" breakages. I believe there are some URIs that use '//' in the path where that is treated as significant by software; e.g. file: URIs with Windows UNC names? >[[ >testRelative84 = testRelJoin "testRelative84" > "f:/a" ".//g" > "f://g" >]] > >If we take another example closer to the real world ;), by ex. >"file:/index.php" and ".//images": >In the UNIX systems and also in the Windows systems path ".//images" is >equivalent with the path "./images". Dot segment "." means current directory >and thefore "file:/images" is exactly the result I expect. >Similarly the second example. > >I agree that prefixes of the form "./" or "/./" can solve the segment >problem, but: Er, I think that idea was broken... >[[ >file:/x/..//y >result you suggest: file:/./y >]] > >If you apply the remove_dot_segments second time, you get the result >"file:/y". It would be nice to have property >remove_dot_segments(remove_dot_segments(Path)) = remove_dot_segments(Path). >And if the empty segment in the beginning is equivalent with the dot segment >"." (which can be removed), why not in the rest of the path? I agree that URI normalization should be idempotent. Lacking any further inspiration right now. #g -- >-----Original Message----- >From: Graham Klyne [mailto:GK@ninebynine.org] >Sent: Friday, November 19, 2004 10:52 AM >To: Martin Balaz; uri@w3.org >Subject: Re: remove dot segment > >At 17:17 18/11/04 +0000, Martin Balaz wrote: > > >I would like to discuss one old problem of the remove_dot_segments >function, > >which is not yet solved as I know. > > > >Following URIs are valid with the respect to the latest rfc2396bis: > > > >file:/x/..//y > > scheme = "file" > > authority = not defined > > path = "/x/..//y" > > query = not defined > > fragment = not defined > > > >file:x/..//y/ > > scheme = "file" > > authority = not defined > > path = "x/..//y/" > > query = not defined > > fragment = not defined > > > >The result of applying the remove_dot_segments function is in the first >case > >"file://y". Segment "y" is considered to be an authority instead a segment > >of the path "//y". > >The result in the second case is "file:/y/", where the path "/y/" is an > >absolute path. It is not a relative path beginning with an empty segment >(in > >addition this is not allowed). > >My implementation, which I believe to be closely based on the current spec, >also yields these results, which do seem to be counterintuitive: > >[[ >tn06str = "file:/x/..//y" >tn06nrm = "file://y" > >tn07str = "file:x/..//y/" >tn07nrm = "file:/y/" >]] > >I tried experimenting with the fix you suggest... it achieved the suggested >result for the above test cases, but it also broke two other test cases: > >[[ >testRelative84 = testRelJoin "testRelative84" > "f:/a" ".//g" > "f://g" >]] >yields "f:/g". >(hmmm... the original is also arguably incorrect.) > >[[ >testRelative85 = testRelJoin "testRelative85" > "f://example.org/base/a" "b/c//d/e" > "f://example.org/base/b/c//d/e" >]] >yields "f://example.org/base/b/c/d/e" > >... > >I'm not yet sure what would be the best way to resolve this. > >Two other suggestions for consideration: >(a) any path starting with '//' be preceded by ./, giving ./// >(b) apply (a) only when the authority component is absent. > >#g >-- > > >I suggest to treat with the empty segments of the form "//" in the same way > >as with the segments "/./". If we replace in the input buffer every > >occurence of "//" by "/./" before applying the remove_dot_segments >function, > >we get the intuitive result "file:/y" for the first case and "file:y/" for > >the second. Other empty segments not appearing at the beginning, which >don't > >cause in general any troubles, are of course removed too. Empty segment at > >the end of the path is the only one exception. > > > >This approach solves problem with empty segment at the beginning of the >path > >and introduces a normalization form for URIs, which don't contain empty > >segments. > > > >Problem can occur only if for another schemes does not hold that empty > >segments have the same meaning as dot segments. > > > >Martin > >------------ >Graham Klyne >For email: >http://www.ninebynine.org/#Contact ------------ Graham Klyne For email: http://www.ninebynine.org/#Contact
Received on Friday, 19 November 2004 19:37:35 UTC