【问题标题】:standard for resolving a urn:uuid (and other)?解决 urn:uuid (和其他)的标准?
【发布时间】:2009-12-15 08:09:42
【问题描述】:

我的应用程序使用 urn:uuid 作为实体的 URI。当然,当我得到时,例如关于资源的 RDF 信息,引用的实体(主题或对象)将包含 urn:uuid 模式中的 URI。为了获取新实体的表示,可能以 REST 方式,我需要一个“解析器”,在某种程度上类似于用于 DOI 的 dx.doi.org。另一种情况可能是解析 isbn: URI,以便获得此 URI 的合理表示。

我的问题是关于 URI-to-representation-URL 解析的建议标准。

【问题讨论】:

  • 我不确定我是否完全理解了这个问题,但是为什么给定的 URN 会有一个表示?
  • 如果有,那么您应该能够解决它,如果解决它是必不可少的。现在,我可以谈论一个isbn,但解决这个isbn的唯一方法是去亚马逊购买kindle版本。 DOI 也一样。你去 doi.org 解决它。但这没有标准。我对标准感兴趣(如果存在)。

标签: uri resolution


【解决方案1】:

IETF 结束的 URN 工作组也做了一些解决 URN 的工作,并发布了很多关于这个主题的 RFC。参考列表包含在group charter 中。也许其中一些对您有帮助。

【讨论】:

  • 我给你打勾,因为我确实找到了很多关于这个问题的 RFC,这绝对是一个相关的起点。这个特别有趣ietf.org/rfc/rfc2483.txt
【解决方案2】:

UUID 是一个通用的唯一标识符,所以我看不出您如何能够将我刚刚生成的 uuid(例如 3136aa1a-fec8-11de-a55f-00003925d394)解析为有用的东西。

只有当你在某个地方管理一个 uuid 数据库时,你才能从中检索到更多。或者你必须问每个人/每件事“你知道这个 uuid 吗?”

urn:uuid 定义定义了一个明确的唯一标识符空间,您可以使用它来定义真正唯一的东西。但由于其他人无法猜测其价值,因此您无法从中获取信息。

【讨论】:

  • 没错,我要问的是是否有标准来询问“你知道这个 uuid 吗?”
【解决方案3】:

没有解决 URN 的标准(建议或其他)。它只是一个名称(统一资源名称),可能具有任意含义。

XML/RDF 使用确实可以解析的 URN 会造成一些混乱,因为它们恰好也是指向描述其含义的对象的 URL(统一资源定位器),但这只是一种约定。它们只需要是唯一的并且总是意味着相同的东西。

如果您正在开发应用程序,您可能需要考虑使用 URN,它也是具有固定含义的项目的可解析 URL,并在 urn:uuid 命名空间中随机生成 URN 以识别对象实例。

这听起来和 RDF 规范一样令人困惑:-)

快速示例:

Tiger: http://www.example.com/animals/tiger
Instance of a Tiger: urn:uuid:9a652678-4616-475d-af12-aca21cfbe06d

http://www.example.com/animals/tiger 可能有一个 HTML 页面,但不是必须的。这只是一个约定。

[补充说明]

这里的区别在于 URN(名称)和 URL(位置)。

一个URN只是命名一些东西。它不是任何东西的位置。

URL 是有效的 URN,因此您可以根据需要使用 URL 作为 URN。

在上面的例子中,我可以使用例如http://www.example.com/tigers/9a652678-4616-475d-af12-aca21cfbe06d 作为我的老虎的名字。我可以在那个地址放点东西。但是我会放什么?您不能使用 http 下载老虎的实例!

RDF 中的约定是,如果 URN 也是 URL,它将指向一些定义名称含义的文档。

RDF 试图为您提供的是一种命名约定,以确保当两个人使用相同的名称时,他们的意思是相同的。 UUID 规范允许您为不太可能被其他任何东西使用的东西生成一个唯一的名称。但它只是一个名字,没有办法把它变成一个东西。

希望这会有所帮助。

【讨论】:

  • 是的,但是一旦我告诉某人“这是对象 urn:urn:uuid:9a652678-4616-475d-af12-aca21cfbe06d”,它如何找到它的 URL?谁负责将骨灰盒解析到表示的位置,以及执行解析的协议是什么。正如您所说,没有标准,但这会使任何骨灰盒与其位置之间的映射变得不可能。
  • 它没有 URL。这是一个名字,而不是一个位置。这是我试图做出的区分。 (当我第一次遇到 URN 时,我也很困惑)。我将在答案中添加更多说明。
  • 你的回答很有见地,我从中学到了一些东西。谢谢。但是,我给 deepwaters 打了勾,因为我得到了一些指示,即使在 ietf 上问题也很突出。
  • 小问题,AFAIK URL 不是 URN:w3.org/TR/uri-clarification 我认为(不看 RDF 标准)对象是用 URI 命名的,这意味着您可以在任何使用 URN 的地方使用 URL ,因为它们都是 URI。
  • @wds 这一定是 W3C 写过的最晦涩的说明文件之一!您是正确的,因为 RDF 规范是根据 URI 来的(尽管问题是关于 URN)。可以在ietf.org/rfc/rfc2396.txt 第 1.2 节中找到更好的区分说明。
【解决方案4】:

URN 存在的一个原因是让人们有机会创建标识符,而无需(隐式)负责维护描述底层资源的服务。您可以说,对于 RDF,这是一个优势,但不是必需的,但您也不太愿意使用特定的词汇表,例如,如果您发现那些 HTTP URL 不再可解引用。

话虽如此,一些 URN 可以追溯到它们的表示。以下是一些示例:

  • ietf 命名空间定义了several identifier schemes,因此如果您实现特定模式,则可以解析像urn:ietf:rfc:2648 这样的 URI。
  • 一些命名空间是在其他 IANA 注册管理机构中定义的,例如 urn:ietf:params:xml: 以及相应的资源文件。
  • 其他命名空间指向已经建立的标识符空间,例如urn:isbn:(可以检索一些元数据,但我认为没有任何东西可以让您从其 ISBN 下载该书),urn:oid:。还有urn:publicid:,其中一些标识符可能在 ISO 深处的某个地方找到。

没有通用的 URN 解析机制,实际上也不可能(对于其他 URI 方案也是如此,例如 tag:)。

在我看来,专门谈论 UUID,最好的方法是根本不使用 URN。如果您想使用 Web 服务器进行解析,“标准”方式是使用知名服务genid,因此您的主 URI 将是这样的:http://example.org/.well-known/genid/b47df9f0-a9c5-4e8a-9762-844a33ba7a3e。如果您在该位置托管 RDF,则在必要时添加 owl:sameAs <urn:uuid:b47df9f0-a9c5-4e8a-9762-844a33ba7a3e> 没有任何问题。

据我所知,目前只有一种方法用于创建传达“您知道这个 URN 吗?”问题的链接,嗯,有点:magnet: 链接。原则上没有什么要求你像通常发现的那样使用哈希,所以像 magnet:?xt=urn:uuid:b47df9f0-a9c5-4e8a-9762-844a33ba7a3e 这样的东西可以工作,只要你有自己的客户端可以处理。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-20
    • 2014-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-16
    相关资源
    最近更新 更多