- From: Martin Balaz <balaz@ii.fmph.uniba.sk>
- Date: Fri, 19 Nov 2004 11:54:35 -0000
- To: <uri@w3.org>
- Cc: "'Graham Klyne'" <GK@ninebynine.org>
Why do you consider the results ("f:/g" and "f://example.org/base/b/c/d/e") to be not intuitive? [[ 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: [[ 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? Martin -----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
Received on Friday, 19 November 2004 11:54:40 UTC