从RFC 3986 §1.1.3:
术语“统一资源定位符”(URL) 指的是 URI 的子集,它除了标识资源之外,还通过描述资源的主要访问机制(例如,其网络“位置”)来提供定位资源的方法。术语“统一资源名称”(URN)在历史上一直用于指代“urn”方案 [RFC2141] 下的两个 URI,即使资源不再存在或变得不可用,它们也需要保持全局唯一和持久性,并且到具有名称属性的任何其他 URI。
精确的区别包含在RFC 3305 §2中,并且可以总结如下。
统一资源标识符(URI)
URI 是与RFC 3986 附录 A中描述的语法匹配的任何内容;它标识某种资源。有问题的资源可以是任何东西,从网页到电话号码到街道地址到一些 JavaScript 到 GUID,通过 URI 开头的方案(第一个之前的部分:
)消除歧义。
正如您所指出的,您的所有示例都是 URI。
统一资源定位器(URL)
URL 是一个 URI,它还告诉您如何访问它所描述的任何资源。这是一个非常非正式的概念(参见RFC 3305 §2.2),因此很难确定地定义。(应该注意的是,根据我的经验,大多数公众在表示 URI 时会说 URL。)
除了最后一个示例之外,所有示例都可能是 URL。(不能确定区分;如上所述,URL 是非正式的。)有关为什么最后一个不是,请继续阅读,
统一资源名称(URN)
由RFC 1737和RFC 2141定义的 URN是一种为某物赋予或多或少永久名称的方式。它有语法
urn:<namespace>:<more :-separated parts>
其中urn:
是方案名称(因此处理器知道它是一个URN),<namespace>
是一种区分[基本上]不同人的URN的方法,而URN的其余部分[更多:
分隔文本]标识该名称空间内的某些内容。RFC 1737 §2要求 URN始终指向完全相同的事物。它还要求具有相应 URL的 URN必须有某种方式可以转换为该 URL;这似乎暗示 URN 不是 URL。
您的最后一个样本 ( urn:oasis:names:specification:docbook:dtd:xml:4.1.2
) 属于该urn
方案;根据定义,它是一个 URN。