我有一个 XML 模式文件,它引用了一个基于 urn 的位置。是否有某种方法可以将其解析为 url,或者有某种方法可以实际读取它所引用的文件。
<xs:include schemaLocation="urn:oasis:names:tc:dita:xsd:tblDeclGrp.xsd:1.1"/>
这个问题不是解释“URN解析”的好地方......我们可以想象从这个绿洲URN到schemaLocation文件名或URL的翻译(通过自动翻译器),但它对于URN来说有点异国情调.
请参阅 http://www.w3.org/TR/xmlschema-1/#schema-repr上的schemaLocation的常用语义和值
#URN 分辨率
您可以在 Wikipedia 中查看 URN 的真实示例,并在RFC-2169和RFC-2483中查看术语“解析 URN”的完整语义。根据这些 RFC,您需要的是本地软件或执行N2L的“URN 解析器”软件(网络服务)的 URL:给定一个URN,返回一个 URL。
2002 年URN 解析机制受到更多关注,两个新的 RTF RFC-3404和RFC-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 喜欢urn:doi
或urn:lex:br
具有如此使用且稳定的解析机制(分别在dx.doi.org和lexml.gov.br/urn),但未在IANA 的 assignments/urn-namespaces注册;一个未使用、不稳定且不受控制的 URN,例如 urn:oasis:names:tc:dita
已urn:oasis
在 IANA 注册。
...也许看看RFC3121 A URN Namespace for OASIS?
编辑:我永远记不起 URI 和 URN,但我的理解是它们只是名称空间,它们实际上不必对应于网络上存储文件的某个真实位置。他们只是划分了对部分命名空间的控制,因此urn:oasis
处于 OASIS 的控制之下。除非您可以控制它,否则您不应该发明层次结构的该部分内的任何 URI / URN。
编辑 2:谷歌搜索在 oasis-open.org 中找到了一个名为tblDeclGrp.xsd的文件以及对其和其他模式的一些评论。
在这种情况下,schemaLocation 就是位置。如果您在同一目录中有一个与此名称完全相同的文件,则应该解析它。它甚至包括 urn: 部分所以完整的字符串。在模式命名空间之后命名文件很方便。起初我必须承认令人困惑。
顺便提一句。urn 不是一个位置,它只是一个 URI。xs:include schemaLocation 的属性指的是一个位置,但属性类型是 anyURI,它包括 urn 模式