【问题标题】:How do you resolve a URN?你如何解决一个URN?
【发布时间】:2010-10-24 13:55:18
【问题描述】:

我有一个 XML 模式文件,它引用了一个基于 urn 的位置。有什么方法可以将其解析为 url,或者有什么方法可以实际读取它所引用的文件。

<xs:include schemaLocation="urn:oasis:names:tc:dita:xsd:tblDeclGrp.xsd:1.1"/>

【问题讨论】:

  • 这个问题不是解释“URN resolution”的好地方。请在此处发表评论,并附上一个更好的链接,回答通用的“你如何解决 URN?”... 好的,我在下面发布了一个草稿。

标签: xml xsd urn


【解决方案1】:

这个问题不是解释“URN分辨率”的好地方...... 我们可以想象从这个 oasis URN 到 schemaLocation 文件名或 URL 的翻译(通过自动翻译器),但它对于 URN 来说有点奇怪。

http://www.w3.org/TR/xmlschema-1/#schema-repr查看schemaLocation 的常用语义和值


#URN 分辨率

您可以在RFC-2169RFC-2483 看到real-life examples of URNs at Wikipedia 和术语“解析URN”的完整语义。根据这些 RFC,您需要一个本地软件或执行 N2L 的“URN 解析器”软件(webservice)的 URL:给定一个 URN, 返回一个 URL。

广泛使用的 URN

2002 年,URN 解析机制受到更多关注,两个新的 RTF,RFC-3404RFC-3405,解决了 URN 的一个潜在问题,

如果 URN 解析被折叠成通用 URI 解析,URN 可以 因缺乏采用 URI 解析而受苦。

解决方案是允许 URN 解析的快捷方式。 (...) 通用 URI 解析从插入开始 将已知 URI 方案的规则放入“uri.arpa”。注册表。为了 'URN:' URI 方案,在 'uri.arpa' 中找到的规则之一。将是为了 'urn' URI 方案。该规则将简单地委托给 'urn.arpa.'基于 URN 命名空间的其他 NAPTR 的区域。 本质上,'URN:' 的 URI 解析重写规则是 URN 解析应用程序的第一个众所周知的规则。

一些解析问题仍然存在:像urn:doiurn:lex:br 这样的URN 具有如此使用且稳定的解析机制(分别在dx.doi.orglexml.gov.br/urn),但未在IANA's assignments/urn-namespaces 注册;一个未使用、不稳定且不受控制的 URN,例如 urn:oasis:names:tc:dita,在 IANA 注册了 urn:oasis

【讨论】:

  • 特别是对于 XML,这样的“URN 解析器”通常会作为提供给处理 XML 的软件或代码中的 XML 解析器的 XML 目录来处理。 XML 目录有多种格式,包括 OASIS 基于 XML 的格式、OASIS 纯文本格式 (TR 9401) 和另一种称为 XCatalog 的基于 XML 的格式。支持的内容取决于软件/解析器。
  • 嗨@G_H,重要的是要记住 URN 是名称,即简单且有效的字符串,其中没有 XML 编码。当然,URN 是 XML 元素中的有效属性值。
  • 我认为您误解了我的评论。我并不是暗示 URN 中有任何 XML。该问题询问有关在 XML 模式中专门解析 URN 的问题。许多用于处理 XML 的库和软件将支持所谓的 XML 目录,它允许您将 URN 字符串映射到特定的 URL。对于可能是一个解决方案的提问者,所以我决定提及它。
  • @G_H,ops,好的,但请记住,我的回答是关于通用分辨率。 old original TR 9401(或this other link 对URN 只字未提,似乎是RFC 2483 建议的增强...他们,基于URN 的“XML 目录”(如urn:oasis:names:tc:entity:xmlns:xml:catalog)具有不明显的解析算法。最简单的XML 的算法是将 url_base 属性与 URN 连接起来。
  • 在“REST API 重定向解析”上下文中 URN 解析的其他良好参考是 RFC 6570,它定义了“URI 模板”,在这种情况下,它是一个 URL模板,其中占位符是URN或简化的URN。示例:https://doi.org/{urn}。您可以使用完整的doi.org/urn:doi:10.1000/182 或通过doi.org/10.1000/182 使用theDOI 片段的urn:doi:{theDOI} 简化URN 进行测试。使用科学文章的 URN 进行测试,urn:doi:10.1038/ncomms7368。其他示例:https://www.lexml.gov.br/urn/{urn_lex}.
【解决方案2】:

...也许看看 RFC3121 OASIS 的 URN 命名空间?

编辑:我永远记不起 URI 和 URN,但我的理解是它们只是名称空间,它们实际上不必对应于存储文件的网络上的某个真实位置。他们只是划分了对部分命名空间的控制,因此urn:oasis 处于 OASIS 的控制之下。除非您可以控制它,否则您不应该发明层次结构的该部分内的任何 URI / URN。

编辑 2:谷歌搜索在 oasis-open.org 中找到了一个名为 tblDeclGrp.xsd 和一些 commentary on it and other schemas 的文件。

【讨论】:

  • 我阅读了 RFC 和其他一些来源。作为一个唯一标识符,这似乎很有用,但它对试图解析实际模式的解析器帮助不大,因为每个提供者可能有不同的格式。
【解决方案3】:

在这种情况下,schemaLocation 就是位置。如果您在同一目录中有一个与此名称完全相同的文件,则应该解析它。它甚至包括 urn: 部分所以完整的字符串。在模式命名空间之后命名文件很方便。我必须承认一开始很困惑。

顺便说一句。 urn 不是一个位置,它只是一个 URI。 xs:include schemaLocation 的属性指的是一个位置,但属性类型是 anyURI,其中包括 urn 模式

【讨论】:

  • 另外,include 用于使用相同命名空间或不使用命名空间的其他模式,这里指定命名空间没有意义,而是指定物理位置。导入用于在其他命名空间中使用其他模式,并且该元素有一个单独的属性来指定它。
猜你喜欢
  • 2022-08-21
  • 2015-05-09
  • 1970-01-01
  • 2021-10-09
  • 1970-01-01
  • 2020-11-30
  • 1970-01-01
  • 1970-01-01
  • 2015-07-31
相关资源
最近更新 更多