URI

URI -表示一个统一资源标识符 (URI) 引用。

 

URI 语法和组成部分

在最高级别上,字符串形式的 URI 引用(以下简写为 "URI")语法如下

[scheme:]scheme-specific-part[#fragment]

其中,方括号 [...] 用于描述可选组成部分,字符 :# 代表它们自身。

 

绝对 URI 指定了方案 (scheme);

非绝对的 URI 称为相对 URI。

URI 还可以根据其是否为不透明的 或分层的进行分类。

 

不透明 URI 为绝对 URI,其特定于方案的部分不是以斜线字符 ('/') 开始。不透明 URI 无法进行进一步解析。下面是不透明 URI 的一些示例:

mailto:java-net@java.sun.com

news:comp.lang.java

urn:isbn:096139210x

 


分层 URI 或者为绝对 URI(其特定于方案的部分以斜线字符开始),或者为相对 URI,即不指定方案的 URI。下面是分层 URI 的一些示例:

http://java.sun.com/j2se/1.3/

docs/guide/collections/designfaq.html#28

http://www.cnblogs.com/../demo/jfc/SwingSet2/src/SwingSet2.java

file:///~/calendar

 

分层 URI 还要按照下面的语法进行进一步的解析

[scheme:][//authority][path][?query][#fragment]

其中,:、/、? 和 # 代表它们自身。分层 URI 的特定于方案的部分包含方案和片段部分之间的字符。

分层 URI 的授权组成部分(如果指定)为基于服务器的 或基于注册表的。基于服务器的授权按照如下众所周知的语法进行解析:

[user-info@]host[:port]

其中,字符 @ 和 : 代表它们自身。几乎当前使用的所有 URI 方案都是基于服务器的。不能采用这种方式解析的授权组成部分被视为基于注册表的。

如果分层 URI 的路径组成部分以斜线字符 ('/') 开始,则称此 URI 本身为绝对的;否则它为相对的。分层 URI 或者为绝对的,或者指定了授权的路径,它始终为绝对的。

 

URI的解析:

假定基底URI为A,需要解析的为B

如果B是绝对路径,那么解析完后,还是B

如果A,B都是相对路径,那么解析完后,还是B

如果A是绝对路径,B是相对路径,那么:

 

B有authority,那么只取A的scheme部分即可

B从path部分开始(且以/开头),那么取A的scheme和authority部分

B从path部分开始(不从/开头),那么取A中最右边的/之前的部分(包含/),后面跟上B的内容即可

 

URI的标准化:

先取得完整的分层URI

对于有/./或者/.的,直接删除之

对于有/../或者/..的,删除它们,并删除直到上一个/为止的全部内容(也就是删除父目录)

 

进一步学习URI:

http://www.docin.com/p-56501746.html

posted on 2013-05-10 10:19  melburg  阅读(432)  评论(0)    收藏  举报