URI,URL和URN有什么区别?

人们谈论URL,URIURN就好像它们是不同的东西,但它们看起来与肉眼相同.

它们之间有什么区别?

回答

URI的标识 URL的定位 ; 但是,定位器也是标识符,因此每个URL也是一个URI,但是有些URI不是URL.

例子

  • 罗杰佩特

这是我的名字,这是一个标识符.它就像一个URI,但不能是一个URL,因为它不会告诉你我的位置或如何联系我.在这种情况下,它也恰好在美国仅识别至少5个其他人.

  • 巴哈马拿骚西湾街4914号

这是一个定位器,它是该物理位置的标识符.它就像一个URL和URI(因为所有的URL都是URI),并且间接地将我识别为"驻留...".在这种情况下,它唯一地识别我,但如果我得到一个室友,那将会改变.

我说"喜欢",因为这些示例不遵循所需的语法.

流行的困惑

来自维基百科:

由于这种常见的混淆,许多产品和文档错误地使用一个术语而不是另一个术语,分配它们自己的区别,或者同义地使用它们.

URN的

我的名字Roger Pate可能就像一个URN(统一资源名称),除了那些受到更多监管并且意图在空间和时间上都是独一无二的.

因为我目前与其他人分享这个名字,所以它不是全球唯一的,不适合作为URN.然而,即使没有其他家庭使用这个名字,我也是以我的祖父的名字命名的,所以它在一段时间内仍然不会是唯一的.即使是不是这样,我以后命名我的后代的可能性,使这个不适合作为URN.

URN与此严格唯一性约束中的URL不同,即使它们都共享URI的语法.

  • 罗杰的回答提供了良好的实用建议.对于官方回答,我去了W3C,他在2001年发表了"[URIs,URL和URN:澄清和建议](http://www.w3.org/TR/uri-clarification/)".简而言之, W3C表示当代观点认为一切都是URI.URL是一个非正式的概念,而不是一个正式的概念.这种混淆可以追溯到"经典观点",它试图严格区分URI的类别(其中URL是一个类别).
  • 是"earth128:Edward-de-Leau/6000000000569063853"(多重多元宇宙的独特之处)URN,URL还是URI?
  • _ ..统一资源定位器(URL)..指定标识资源可用的位置**和检索它的机制**._换句话说,没有"相对"URL这样的东西?
  • @edelwater:我想这是一个uri,因为它只能识别你,但却没有说明如何找到你,除非你的意思是earth128是行星间旅行的媒介:)
  • `URN与此刚性唯一性约束中的URL不同.这是否意味着URL不能唯一地标识位置?
  • @Arne我会说相对URL肯定是一个东西,但它们当然取决于它们相对的URL,在这里你可以找到检索它的机制和/或相对的URL丢失的其他东西. .我想你也可以将相对URL称为完整URL的简写形式.所以即使它看起来相对,它实际上是绝对的,你只需要添加它的上下文.

来自RFC 3986:

因此,所有URL都是URI(实际上并不完全 - 见下文),并且所有URN都是URI - 但URN和URL是不同的,因此您不能说所有URI都是URL.

编辑:我以前认为所有的URL都是有效的URI,但根据评论:

不幸的是,这使得水更加混乱.

如果您还没有阅读过Roger Pate的答案,我也建议您这样做.

  • **不**"*所有网址都是URI*".这取决于RFC的解释.例如在Java中,URI解析器不喜欢`[`或`]`,因为规范说"不应该"而不是"不应该".
  • 只有urn:scheme的URI才是URN.URI可以是经典URL,URN,也可以只是不以"urn:"开头的URI,也不是指资源的位置.
  • 请注意,很久以前RFC 3986已经废弃了RFC 2396(但这不会改变事实...)
  • @AdamGent:这听起来像Java实现的怪癖,而不是规范性的.[`java.net.URI` doc](http://docs.oracle.com/javase/6/docs/api/java/net/URI.html)本身说"每个URL都是一个URI,抽象地说,但不是每个URI都是一个URL".并且`java.net.URL`做了奇怪的事情,比如通过将主机名解析为IP地址来检查URL的相等性(这看起来与RFC 3986第6版首先不一致,并且打破了虚拟主机).我认为这只是意味着Java标准库有一些不一致的类行为.
  • @AdamGent:RFC 3986 1.1.3:"URI可以进一步分类为定位符,名称或两者." 因此,如果URL是一种特殊的URI,则意味着每个URL都是一个URI.不是吗?
  • @JonSkeet也许只需要区分标准与实现?例如,"根据RFC,所有URL都是URI."(RFC摘录.)但是现有的实现可能与规范不完全匹配,可能是互操作性,并且可能使用根据RFC无效的URL.并且因为它是一个复杂的区域有些人和文档可能会使用"URL"来表示与RFC指定的内容不同的内容." 有点像大多数电子邮件验证例程与RFC定义不匹配的方式.

URI - 统一资源标识符

URI是使用短数字,字母和符号标识文档的标准.它们由RFC 3986定义- 统一资源标识符(URI):通用语法.URL,URN和URC都是URI的类型.

URL - 统一资源定位器

包含有关如何从其位置获取资源的信息.例如:

  • http://example.com/mypage.html
  • ftp://example.com/download.zip
  • mailto:user@example.com
  • file:///home/user/file.txt
  • tel:1-888-555-5555
  • http://example.com/resource?foo=bar#fragment
  • /other/link.html (相对URL,仅在其他URL的上下文中有用)

URL始终以协议(http)开头,通常包含网络主机名(example.com)和文档路径(/foo/mypage.html)等信息.URL可以具有查询参数和片段标识符.

URN - 统一资源名称

通过唯一且持久的名称标识资源,但不一定告诉您如何在Internet上找到它.它通常以前缀开头urn: 例如:

  • urn:isbn:0451450523 通过其ISBN号识别书籍.
  • urn:uuid:6e8bc430-9c3a-11d9-9669-0800200c9a66 全球唯一标识符
  • urn:publishing:book - 一个XML名称空间,用于将文档标识为一种书籍.

URN可以识别想法和概念.它们不仅限于识别文件.当URN表示文档时,它可以通过"解析器"转换为URL.然后可以从URL下载该文档.

URC - 统一资源引用

指向有关文档的元数据而不是文档本身.URC的一个示例是指向页面的HTML源代码,例如:view-source:http://example.com/

数据URI

数据可以直接放入URI中,而不是将其定位在互联网上或命名.一个例子是data:,Hello%20World.


经常问的问题

我听说我不应该再说URL了,为什么?

HTML的W3规范说href锚标记可以包含URI,而不仅仅是URL.你应该可以放入诸如此类的URN <a href="urn:isbn:0451450523">.然后,您的浏览器会将该URN解析为URL并为您下载该书.

任何浏览器实际上都知道如何通过URN获取文档吗?

不是我所知道的,但是现代网络浏览器确实实现了数据URI方案.

URL和URI之间的区别是与相对还是绝对有关?

不.相对和绝对URL都是URL(和URI).

URL和URI之间的区别是否与查询参数有关?

不是.包含和不包含查询参数的URL都是URL(和URI).

URL和URI之间的区别是否与片段标识符有关?

否.带有和不带有片段标识符的URL都是URL(和URI).

URL和URI之间的区别是否与允许的字符有关?

不会.URL被定义为URI的严格子集.如果解析器允许URL中的字符但不允许URI中的字符,则解析器中存在错误.规范详细说明了URL和URI的哪些部分允许使用哪些字符.某些字符可能仅允许在URL的某些部分中使用,但仅字符不是URL和URI之间的差异.

但是W3C现在不是说URL和URI是一回事吗?

是.W3C意识到这有很多混乱.他们发布了一个URI澄清文档,说明现在可以互换地使用术语URL和URI(表示URI).将URI严格分段为不同类型(如URL,URN和URC)不再有用.

URI可以是URL还是URN?

URN的定义现在比我上面所述的更宽松.关于URI的最新RFC说,任何URI现在都可以是URN(无论它是否以它开头urn:),只要它具有"名称属性"即可.即:即使资源不再存在或变得不可用,它仍具有全局唯一性和持久性.示例:HTML文档类型中使用的URI,例如http://www.w3.org/TR/html4/strict.dtd.即使w3.org网站上的页面被删除,该URI仍将继续命名HTML4过渡文档类型.


  • 除非您在其上放置`file://`前缀,否则文件路径不是URL或URI.虽然浏览器通常会处理非URL格式的文件路径.[Mozilla发布文件URL的测试用例](http://www-archive.mozilla.org/quality/networking/testing/filetests.html).
  • 是"C: myfile"是URI,URL还是URN?或者都不是.
  • 这个答案更容易理解.我可以清楚地看到URL和URN的真实示例图片.任何人都可以阅读更多关于此... https://danielmiessler.com/study/url-uri/
  • 参见[RFC的1.1节](https://www.ietf.org/rfc/rfc3986.txt)-“统一性提供了许多好处。即使在相同的情况下,它也允许在同一上下文中使用不同类型的资源标识符。访问这些资源的机制可能会有所不同。它允许跨不同类型的资源标识符对通用语法约定进行统一的语义解释……”

总结:URI标识,URL标识和定位.

考虑莎士比亚戏剧" 罗密欧与朱丽叶"的特定版本,您可以在家庭网络上获得数字拷贝.

您可以将文本标识为urn:isbn:0-486-27557-4.
这将是一个URI,但更具体地说是一个URN*,因为它命名文本.

您还可以将文本标识为file://hostname/sharename/RomeoAndJuliet.pdf.
这也是一个URI,但更具体地说是一个URL,因为它定位了文本.

*统一资源名称

(注意我的例子改编自维基百科)

  • 注意实际的URN(看看它与URL的比较)是有帮助的:urn:isbn:0-486-27557-4
  • @Michael - 据我所知,"ISBN 0486275574"也为文本命名,因此有资格成为URN.我选择了一种我认为对读者来说更熟悉的格式.
  • 那么说文件的哈希值(例如SHA1)可能是该文件的URN是否有意义?

这些是一些写得很好但很冗长的答案.就CodeIgniter而言,这是不同之处:

网址 - http://example.com/some/page.html

URI - /some/page.html

简而言之,URL是在任何地方识别任何资源的完整方式,并且可以具有不同的协议,如FTP,HTTP,SCP等.

URI是当前域上的资源,因此需要较少的信息.

在CodeIgniter使用单词URL或URI的每个实例中,这是他们所讨论的差异,尽管在Web的宏观方案中,它并非100%正确.

  • 这个答案不仅错误而且积极误导.*两个*示例都是URL.由于每个URL也是一个URI,这意味着*两个*示例都是URI.为了证明URI和URL之间的区别,这完全没用.
  • 对于未来读过这些评论并且和我一样困惑的人:这个问题的答案没有发布.这个问题从未与CodeIgniter有任何关系.有一个重复的问题,特别提到CodeIgniter已关闭,并将其所有答案迁移到这个问题.这个答案是从旧的封闭问题转移到这个受保护的问题之一.即便如此,我的回答也是误导.我对它进行了投票 - 其他人应该这样做,因为在新家里,这是错误的.作者应删除它或合并撤消.
  • 就CodeIgniter而言,这是不同的.在每个实例中,他们使用URL或URI这个词,这是他们所谈论的差异.因此,在网络的宏观方案中,它不是100%正确,但在OP的问题范围内(CodeIgniter的差异),这个答案是完全正确的.
  • 这是错的.@JörgWMittag主要是关键点.URL是URI,它们是"完全合格的"; 所以这个答案中的"URL"都是.但是`/ some/page.html`不是URI.它是一个"relative-ref",它是一种"URI-reference".结合基URI上下文,它可以解析为URI,但本身不是URI.参见[RFC 3986的4.1节](http://tools.ietf.org/html/rfc3986#section-4.1).CodeIgniter可能使用了错误的术语,应该调出来; Q(当前编辑的)不构成CodeIgniter特定的.
  • 这个答案可能过于简化,但请看他的问题的背景.关于XML命名空间的问题对他来说会更有帮助!
  • 当我回答问题时,它被标记在#codeigniter下.所以就这样回答了.

首先让你的思绪摆脱困惑,并把它简单化,你会理解.

URI =>统一资源标识符
标识资源的完整地址,即位置,名称或两者.

URL =>统一资源定位符
标识资源的位置.

URN =>统一资源名称
标识资源的名称

我们的地址为https://www.google.com/folder/page.html,其中,

URI(统一资源标识符)=> https://www.google.com/folder/page.html

URL(统一资源定位器)=> https://www.google.com/

URN(统一资源名称)=> /folder/page.html

URI =>(URL + URN)或仅限URL或仅限URN


已经发布的答案的一小部分,这里是维恩的图表来总结理论(来自Prateek Joshi的美丽解释):

还有一个例子(也来自Prateek的网站):

  • 我相信第二个插图是不正确的.根据规范https://url.spec.whatwg.org/#url-writing必须将URL写为相对URL或绝对URL,可选地后跟"#"和片段.因此,`#posts`片段标识符可以是URL的一部分
  • 这两个插图相互矛盾.

这是我作为网络专业人士遇到的最令人困惑且可能无关的话题之一.

据我了解,URI是一种事物的描述,遵循可接受的格式,可以定义某事物的唯一名称(标识)或其位置.

有两个基本子集 - URL,用于定义位置(尤其是用于查找网页的浏览器)和URN,用于定义某些内容的唯一名称.

我倾向于认为URN与GUID类似.它们只是一种标准化的方法,可以为事物提供唯一的名称.就像在使用公司名称的名称空间声明中一样 - 它不像是某个资源位于服务器某处以对应于该行文本 - 它只是唯一地标识某些内容.

我也倾向于完全避免使用术语URI并仅在URL或URN方面讨论事情,因为它会引起很多混乱.我们应该真正尝试为人们回答的问题不是语义,而是在遇到这些术语时如何确定是否存在任何实际差异会改变编程情况的方法.例如,如果有人在谈话中纠正我,并且说:"哦,这不是一个URL它是一个URI"我知道他们已经充满了它.如果有人说"我们正在使用URN来定义资源",我更有可能理解我们只是将它命名为唯一的,而不是将其定位在服务器上.

如果我离开基地 - 请告诉我!

  • 不,我认为你是对的.URI vs URL vs URL vs URI-ref等的语义对大多数开发人员来说都是无用的,只是因为它推动了无意义(非生产性,无关紧要的决策)辩论.如果Google API使用`redirect_url`而不是`redirect_uri`,那么有人会非常关心吗?

从抽象的角度讲,每个URL(U niform R esource L ocator)都是一个URI(U niform R esource I dentifier ),但每个URI都不是URL.URI的另一个子类别是URN(U niform R esource N ame),它是一个命名资源,但没有指定如何定位它们,如mailto,news,ISBN是URI. 资源

瓮:

  • URN格式: urn:[namespace identifier]:[namespace specific string]
  • urn:和:代表自己.
  • 示例:

    • 金塔:UUID:6e8bc430-9c3a-11d9-9669-0800200c9a66
    • 金塔:ISSN:0167-6423
    • 金塔:ISBN:096139210x
    • Amazon资源名称(ARN)是唯一标识AWS资源的资源.

      • ARN格式: arn:partition:service:region:account-id:resource

网址:

  • 网址格式: [scheme]://[Domain][Port]/[path]?[queryString]#[fragmentId]
  • ://,?#代表自己.
  • 方案是https,ftp,gopher,mailto,新闻,telnet,文件,man,info,whatis,ldap ...
  • 例子:
    • HTTP:// ip_server /路径查询
    • FTP:// ip_server /路径
    • 邮寄地址:电子邮件地址
    • 新闻:新闻组名称
    • 远程登录:// ip_server /
    • 文件:// ip_server/path_segments
    • LDAP:???// HOSTPORT/DN属性范围过滤扩展?

类比:联系
到某人:驾驶(协议其他短信,电子邮件,电话),地址(主机名,其他电话号码,电子邮件)和人名(具有相对路径的对象名称).


URI => http://en.wikipedia.org/wiki/Uniform_Resource_Identifier

URL是URI的子集(也包含URN).

基本上,URI是一般标识符,其中URL指定位置,URN指定名称.

  • 方括号在URI或URL中无效.请参阅此问题,其中有许多参考规范:[URL中是否允许使用方括号?](http://stackoverflow.com/questions/40568/are-square-brackets-permitted-in-urls).当方括号出现在其中时,它们应该被编码.

我在考虑URI时喜欢使用的另一个例子是XML文档的xmlns属性:

<rootElement xmlns:myPrefix="com.mycompany.mynode">
<myPrefix:aNode>some text</myPrefix:aNode>
</rootElement>

在这种情况下,com.mycompany.mynode将是一个URI,它唯一地标识在我的XML文档中使用它的所有元素的"myPrefix"命名空间.这不是URL,因为它仅用于识别,而不是用于定位本身.


由于难以清楚地区分URI和URL,据我所知,W3C在URI和URL之间不再有任何区别(http://www.w3.org/Addressing/).


他们是一回事.URI是URL的泛化.最初,URI计划分为URL(地址)和URN(名称),但是URL和URI之间没有什么区别,http URI被用作命名空间,即使它们实际上没有找到任何资源.

  • URL定位资源,是一种标识资源的URI.

如上图所示,这里有三个不同的组件.在讨论这些问题时,通常最好去消息来源,所以这里是Tim Berners-Lee等人的一个例子.人.在
RFC 3986中:统一资源标识符(URI):通用语法:

URI可以进一步分类为定位符,名称或两者.术语"统一资源定位符"(URL)指的是URI的子集,其除了标识资源之外,还通过描述其主要访问机制(例如,其网络"位置")来提供定位资源的手段.


URI是URL和URN的超类.维基百科有一篇关于它们的精美文章,链接到正确的RFC集.


维基百科将在此提供您需要的所有信息.引自http://en.wikipedia.org/wiki/URI:


网址

URL是URI的特化,用于定义特定资源的网络位置.与URN不同,URL定义了如何获取资源.我们每天都以http://example.com等形式使用URL .但是URL不必是HTTP URL,也可以是ftp://example.com等等.

URI

URI按位置或名称或两者标识资源.通常,我们大多数人使用URI来定义资源的位置.URI可以通过名称和位置来识别资源这一事实在我看来引起了很多混乱.URI有两个称为URL和URN的特化.

URL和URI之间的区别

URI是某些资源的标识符,但URL为您提供了获取该资源的具体信息.URI是一个URL,正如一位评论者所指出的,现在认为在描述应用程序时使用URL是不正确的.通常,如果URL描述资源的位置和名称,则使用的术语是URI.由于这通常是我们大多数人每天都遇到的情况,因此URI是正确的术语.


根据RFC 3986,URI由以下部分组成:

scheme://authority/path?query

URI描述用于访问服务器(授权)上的资源(路径)或应用程序(查询)的协议.

所有URL都是URI,所有URN都是URI,但所有URI都不是URL.

请参阅更多详情:

  • 这并没有教会我至少6年的其他答案未涵盖的任何内容,而且更完整,实际上试图解释如何区分URI和URL.
  • 重要的是要注意该图像是*维恩图*,即使它看起来不像典型的。我见过人们试图将其解释为“URL 的一部分”。此图*未*说明 URI 以 URL 开头并以 URN 结尾。

URI按位置或名称或两者标识资源.通常,我们大多数人使用URI来定义资源的位置.URI可以通过名称和位置来识别资源这一事实在我看来引起了很多混乱.URI有两个称为URL和URN的特化.

URL是URI的特化,用于定义特定资源的网络位置.与URN不同,URL定义了如何获取资源.我们每天都以http://stackoverflow.com等形式使用网址.但网址不一定是HTTP网址,也可以是网址ftp://example.com等.


虽然术语URI和URL是严格定义的,但许多术语将这些术语用于除定义之外的其他内容.

我们以Apache为例.如果从Apache服务器请求http://example.com/foo,您将设置以下环境变量:

  • REDIRECT_URL: /foo
  • REQUEST_URI: /foo

启用mod_rewrite后,您还将拥有以下变量:

  • REDIRECT_SCRIPT_URL: /foo
  • REDIRECT_SCRIPT_URI: http://example.com/foo
  • SCRIPT_URL: /foo
  • SCRIPT_URI: http://example.com/foo

这可能是一些混乱的原因.


请参阅此文档.特别,

这真的不是一个非常明确的术语.


阅读完帖子后,我发现了一些非常相关的评论.简而言之,URL和URI定义之间的混淆部分取决于哪个定义取决于哪个以及在软件开发中非正式使用单词URI.

根据定义,URL是URI [RFC2396]的子集.URI包含URN和URL.URI和URL都有自己的特定语法,赋予它们URI或URL的状态.URN用于唯一标识资源,而URL用于定位资源.请注意,资源可以有多个URL但只有一个URN.[RFC2611]

作为Web开发人员和程序员,我们几乎总是关注URL,因此关注URI.现在,URL被明确定义为具有所有部分方案:scheme-specific-part,例如https://stackoverflow.com/questions.这是一个URL,它也是一个URI.现在考虑页面中嵌入的相对链接,例如../index.html.根据定义,这不再是URL.它仍然被称为"URI参考"[RFC2396].

我相信当使用URI这个词来指代相对路径时,"URI-reference"实际上就是在想什么.非正式地,软件系统使用URI来指代绝对地址的相对路径和URL.所以从这个意义上讲,相对路径不再是URL,而是URI.


我想知道同样的事情,我发现了这个:http://docs.kohanaphp.com/helpers/url.

您可以使用该url::current()方法查看明确的示例.如果你有这个URL:http://example.com/kohana/index.php/welcome/home.html?query=string那么使用url:current()给你的URI,根据文档,它是:welcome/home


这是我的简化:

URN:唯一的资源名称,即"what"(例如urn:issn:1234-5678).这是唯一的..因为没有两个不同的文档可以有相同的urn.有点像"uuid"

网址:"在哪里"找到它(例如https://google.com/pub?issnid=1234-5678 ..或
ftp://somesite.com/doc8.pdf)

URI:可以是URN或URL.这种模糊定义归功于W3C和IETF生成的RFC 3986.

多年来,URI的定义发生了变化,因此大多数人都会感到困惑.但是,您现在可以获得安慰,因为您可以将http://somesite.com/something称为URL或URI ...无论如何,您将是正确的(至少暂时无论如何...... .)


URI来自于需要以统一和连贯的方式识别Web上的资源以及其他Internet资源(如电子邮箱).因此,可以引入一种新类型的小部件:用于标识小部件资源的URI 或使用tel: URI来使Web链接在调用时进行电话呼叫.

某些URI提供了查找资源的信息(例如DNS主机名和该机器上的路径),而某些URI则用作纯资源名称.该URL被保留用于标识的资源定位器,包括"HTTP"网址,如http://stackoverflow.com,这在主机上的指定路径标识的网页.另一个例子是' mailto'URL,例如mailto:fred@mail.org,它标识给定地址的邮箱.

URN是用作纯资源名称而不是定位符的URI .例如,URI:mid:0E4FC272-5C02-11D9-B115-000A95B55BC8@stackoverflow.com是一个URN,用于在"Message-Id"字段中标识包含它的电子邮件消息.URI用于区分该消息与任何其他电子邮件消息.但它本身并不在任何商店提供消息的地址.


最好的(技术)总结imo是这个

IRI、URI、URL、URN 以及它们与Jan Martin Keil的区别:

IRI、URI、URL、URN及其区别

每个处理语义 Web 的人都会反复遇到术语IRIURIURLURN。尽管如此,我经常观察到人们对它们的确切含义存在一些混淆。当然,其他人也注意到了这一点(参见例如 RFC3305 或在 Google 上搜索)。老实说,我一开始也很困惑。但实际上问题并没有那么复杂。让我们来看看上述术语的定义,看看有什么区别:

URI

统一资源标识符是一个字符的紧凑序列识别摘要或物理资源。字符集仅限于 US-ASCII,不包括某些保留字符。允许字符集之外的字符可以使用百分比编码来表示。URI 可用作定位器、名称或两者。如果 URI 是定位器,则它描述资源的主要访问机制。如果一个 URI 是一个名称,它通过给它一个唯一的名称来标识一个资源。URI 的语法和语义的确切规范取决于使用的由第一个冒号之前的字符定义的 Scheme。[RFC3986]

统一资源名称是一个URI方案中的瓮旨在作为持久的,独立于位置的,资源标识符。从历史上看,该术语也指任何 URI。[RFC3986] URN 由命名空间标识符 (NID) 和命名空间特定字符串 (NSS) 组成: urn:: NSS 的语法和语义是特定于每个 NID 的。除了已注册的 NID,还有几个 NID 没有经过正式注册程序。[RFC2141]

网址

统一资源定位符是一个URI的是,除了标识一个资源,提供了一种定位通过描述其主要访问机制[RFC3986]的资源的一种手段。由于没有通过一组 Schemes 来准确定义 URL,“URL 是一个有用但非正式的概念”,通常指的是不包含 URN [RFC3305] 的 URI 子集。

国际资源研究所

一个国际化资源标识符被类似地定义为URI,但该字符集扩展到通用字符集。因此,它可以包含除保留字符之外的任何拉丁字符和非拉丁字符。引入术语 IRI 代替扩展 URI 的定义,以便明确区分并避免不兼容。IRI 旨在在支持通用编码字符集的情况下替换 URI 来识别资源。根据定义,每个 URI 都是一个 IRI。此外,有定义的 IRI 到 URI 的满射映射:每个 IRI 可以映射到一个 URI,但不同的 IRI 可能映射到同一个 URI。因此,从 URI 转换回 IRI 可能不会产生原始 IRI。[RFC3987]

总结我们可以说:

IRI is a superset of URI (IRI ? URI)
URI is a superset of URL (URI ? URL)
URI is a superset of URN (URI ? URN)
URL and URN are disjoint (URL ? URN = ?)

语义网问题的结论

RDF 明确允许使用 IRI 来命名实体 [RFC3987]。这意味着我们几乎可以使用实体名称中的每个字符。另一方面,我们经常不得不处理早期状态的软件。因此,使用非 ASCII 字符不太可能遇到问题。因此,我建议避免实体的非 URI 名称,并建议使用 http URI [LINKED-DATA]。简而言之:仅使用 URL 来命名您的实体。当然,我们可以引用由 URN 命名的现有实体。但是,我们应该避免新创建这种标识符。


易于解释:

让我们假设如下

URI是你的名字

URL是您的姓名地址,以便与您沟通.

  • Loyola是URI

TN,Chennai 600 001,Loyola是URL

希望你能理解,

现在让我们看一个精确的例子

http://www.google.com/fistpage.html

在上面你可以有一个网页叫做沟通firstpage.html
(URI使用)以下http://www.google.com/fistpage.html(URL).

因此URI是URL的子集,但反之亦然.

  • 这个答案有误导性.来自维基百科的引用"统一资源名称(URN)的功能类似于人名,而统一资源定位符(URL)类似于该人的街道地址.换句话说:URN定义项目的身份,而URL提供查找方法它." URN和URL都是URI.

为了回答这个问题,我将依赖于我修改为另一个问题的答案.URI的一个很好的例子是您如何识别Amazon S3资源.让我们来:

s3://www-example-com/index.html [图.1]

我创建的作为缓存副本

http://www.example.com/index.html [图.2]

在亚马逊的S3-US-West-2数据中心.

即使StackOverflow允许我超链接到s3:// 协议方案,它也不会对查找资源有任何帮助.因为它标识一个资源,无花果.1是有效的URI.它也是一个有效的URN,因为Amazon要求数据包(它们authority的URI部分的术语)在数据中心之间是唯一的.它有助于查找它,但它不表示数据中心.因此它不能用作URL.

那么,在这种情况下,URI,URL和URN有何不同?

  • 图.1是URI
  • 图.1是URN
  • 图.2是URI
  • 图.2是URL
  • 的URL 1是http://www-example-com.s3-website-us-west-2.amazonaws.com/

    • 还有http://www-example-com.s3.amazonaws.com/index.html
    • 但不是http://www-example-com.s3.amazonaws.com/(没有数据中心,没有文件名对于Amazon S3来说太通用了)

注意: RFC 3986将URI定义为scheme://authority/path?query#fragment


以上是URI,URL和URN有什么区别?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>