uri、url和urn是识别、定位和命名互联网上的资源的标准途径。本文分析了uri、url和urn和java api的uri和url类(以及与url相关的类),并演示了如何在程序中使用这些类。
1989年tim berners-lee发明了互联网(world wide web)。www被认为是全球互连的实际的和抽象的资源的集合--它按需求提供信息实体--通过互联网访问。实际的资源的范围从文件到人,抽象的资源包括数据库查询。
因为要通过多样的方式识别资源(人的名字可能相同,然而计算机文件只能通过唯一的路径名称组合访问),所以需要标准的识别www资源的途径。为了满足这种需要,tim berners-lee引入了标准的识别、定位和命名的途径:uri、url和urn。
uri、url和urn是什么?
体系中的uri、url和urn是彼此关联的。uri的范畴位于体系的顶层,url和urn的范畴位于体系的底层。这种排列显示url和urn都是uri的子范畴, uri表示的是统一的资源标识,它是以某种统一的(标准化的)方式标识资源的简单字符串。典型情况下,这种字符串以scheme(命名uri的名字空间的标识符--一组相关的名称)开头,语法如下:
[scheme:] scheme-specific-part
uri以scheme和冒号开头。scheme用大写/小写字母开头,后面为空或者跟着更多的大写/小写字母、数字、加号、减号和点号。冒号把scheme与scheme-specific-part分开了,并且scheme-specific-part的语法和语义(意思)由uri的名字空间决定。
其中一个例子是http://www.cnn.com,其中http是scheme,//http://www.cnn.com是 scheme-specific-part,并且它的scheme与scheme-specific-part被冒号分开了。
我们可以把uri按照绝对的或相对的分类。绝对的uri指以scheme(后面跟着冒号)开头的uri。前面提到的http://www.cnn.com就是绝对的uri的一个例子,其它的例子还有mailto:jeff@javajeff.com、news:comp.lang.java.help和xyz://whatever。你可以把绝对的uri看作是以某种方式引用某种资源,而这种方式对标识符出现的环境没有依赖。
如果使用文件系统作类比,绝对的uri类似于从根目录开始的某个文件的路径。与绝对的uri不同的,相对的uri不是以scheme(后面跟着冒号)开始的uri。
它的一个例子是articles/articles.html。你可以把相对的uri看作是以某种方式引用某种资源,而这种方式依赖于标识符出现的环境。如果用文件系统作类比,相对的uri类似于从当前目录开始的文件路径。
最后一个组件是fragment。尽管该组件作为uri的一部分出现,但不是绝对的。当使用uri进行某种检索操作时,后面执行操作的软件使用fragment聚焦于软件感兴趣的资源部分(在该软件成功检索到资源的数据后)。
为了实际表现前面提到的组件信息,可以使用下面的uri:
ftp://george@x.com:90/public/notes?text=shakespeare#hamlet
上面的uri把ftp识别为大纲,把george@x.com:90识别为基于服务器的授权机构(其中george是用户信息,x.com是主机,90是端口),把/public/notes识别为路径,把text=shakespeare识别为查询,把hamlet识别为片断。
本质上它是一个叫做george的用户希望通过/public/notes路径在服务器x.com的90端口上检索shakespeare文本的hamlet信息。在shakespeare成功的返回到该程序后,程序定位hamlet段并把它呈献给该用户。
标准化可以通过目录术语来理解。假定目录x直接位于根目录之下,x有子目录a和b,b有文件memo.txt,a是当前目录。为了显示memo.txt中的内容(在微软windows下),你可能输入type /x/./b/memo.txt。
你也可能输入type /x/a/../b/memo.txt,在这种情况下,a和..的出现是没有必要的。这两种形式都不是最简单的。但是如果输入/x/b/memo.txt,你就指定了最简单的路径了,从根目录开始访问memo.txt。最简单的/x/b/memo.txt路径就是标准化的路径。
通常通过基本的和相对的uri访问资源。基本的uri是绝对的uri,它唯一地标识了某种资源的名字空间,而相对的uri标识了与基础的uri相对的资源。(与基本的uri不同,相对的uri在某种资源的生存周期内可以永远不需要改变)。因为基本的和相对的uri都不能完整的识别某种资源,有必要把两种uri通过解析过程合并。相反地,通过相对化从合并的uri中提取相对的uri也是可行的。
注意
不透明的uri与其它的uri不同,它不服从标准化、分解和相对化。
假定你把x://a/作为基础的uri,并把b/c作为相对的uri。根据基础uri分解这个相对的uri将产生x://a/b/c。根据x://a/相对化x://a/b/c将产生b/c。
uri、url和urn是识别、定位和命名互联网上的资源的标准途径。本文分析了uri、url和urn和java api的uri和url类(以及与url相关的类),并演示了如何在程序中使用这些类。
1989年tim berners-lee发明了互联网(world wide web)。www被认为是全球互连的实际的和抽象的资源的集合--它按需求提供信息实体--通过互联网访问。实际的资源的范围从文件到人,抽象的资源包括数据库查询。
因为要通过多样的方式识别资源(人的名字可能相同,然而计算机文件只能通过唯一的路径名称组合访问),所以需要标准的识别www资源的途径。为了满足这种需要,tim berners-lee引入了标准的识别、定位和命名的途径:uri、url和urn。
uri、url和urn是什么?
体系中的uri、url和urn是彼此关联的。uri的范畴位于体系的顶层,url和urn的范畴位于体系的底层。这种排列显示url和urn都是uri的子范畴, uri表示的是统一的资源标识,它是以某种统一的(标准化的)方式标识资源的简单字符串。典型情况下,这种字符串以scheme(命名uri的名字空间的标识符--一组相关的名称)开头,语法如下:
[scheme:] scheme-specific-part
uri以scheme和冒号开头。scheme用大写/小写字母开头,后面为空或者跟着更多的大写/小写字母、数字、加号、减号和点号。冒号把scheme与scheme-specific-part分开了,并且scheme-specific-part的语法和语义(意思)由uri的名字空间决定。
其中一个例子是http://www.cnn.com,其中http是scheme,//http://www.cnn.com是 scheme-specific-part,并且它的scheme与scheme-specific-part被冒号分开了。
我们可以把uri按照绝对的或相对的分类。绝对的uri指以scheme(后面跟着冒号)开头的uri。前面提到的http://www.cnn.com就是绝对的uri的一个例子,其它的例子还有mailto:jeff@javajeff.com、news:comp.lang.java.help和xyz://whatever。你可以把绝对的uri看作是以某种方式引用某种资源,而这种方式对标识符出现的环境没有依赖。
如果使用文件系统作类比,绝对的uri类似于从根目录开始的某个文件的路径。与绝对的uri不同的,相对的uri不是以scheme(后面跟着冒号)开始的uri。
它的一个例子是articles/articles.html。你可以把相对的uri看作是以某种方式引用某种资源,而这种方式依赖于标识符出现的环境。如果用文件系统作类比,相对的uri类似于从当前目录开始的文件路径。