【问题标题】:Creating an XML namespace without a domain创建没有域的 XML 命名空间
【发布时间】:2014-03-23 23:15:07
【问题描述】:

通常教程会告诉您在创建新的 XML 命名空间时使用自己的域名。不是每个人都拥有一个域,它需要花钱,而且该站点可能与您使用 XML 的目的无关。

什么是好的选择?

this answer 中,该示例只有some_identifier,但Wikipedia 表示它是一个URI。 URI 可以是 URL 或 URN。

URL 可以提供到架构的链接,但是命名空间的主要目的是作为唯一标识符,因此 URN 更适合。

如何生成唯一标识符? UUID 对标识符很有用,所以我搜索了一下,W3C 上什至有一个示例:

<?xml:namespace ns='urn:uuid:C4ED1820-6207-11d1-A29F-00AA00C14882/'
                src='http://www.w3.org' prefix='w3c' ?>

为什么人们不经常使用 UUID? UUID 命名空间的缺点或基于域的命名空间的优点是什么?如果您的域过期,您可能会丢失它并且必须更改所有命名空间。

【问题讨论】:

    标签: xml namespaces uri uuid


    【解决方案1】:

    除了 DNS 域名和 XML 命名空间之间的偶然性之外,没有任何联系。

    如果您有一个 DNS 域名并希望在您的 XML 命名空间中使用它,您可以。如果您没有 DNS 域名或不想在 XML 命名空间中使用它,那也可以。

    UUID 通常不用于 XML 命名空间,因为它们不是很有意义 - 类似于通常在 IP 地址上使用主机名和域名。

    【讨论】:

    • "如果您没有 DNS 域名或不想在 XML 命名空间中使用它,那也可以。" - 恕我直言,这总是让人有点担心,如果后来有人碰巧保留了虚构的 DNS 域名并声称您模糊了他们的商标或类似的东西,您就会陷入法律麻烦。
    【解决方案2】:

    如果您想要一个可读的、全球唯一的标识符,只需要您在某个时间点声明域或电子邮件地址的所有权,您可以使用tag URI。例如:

    tag:user@example.com,2007-11-02:Tag_URI
    

    urn:uuid 是完全有效的,但有时具有更多结构的标识符更容易被发现,或者允许关联相关的命名空间。

    【讨论】:

      【解决方案3】:

      This question 是一个类似的问题,Java 包名称除外。 Java Specification 建议使用域约定,但这不是强制性的。他们的选择解释如下:

      生成唯一包名称的建议约定只是一种在现有的、广为人知的唯一名称注册表之上捎带包命名约定的方法,而不必为包名称创建单独的注册表。

      以下是一些选项及其主要优缺点。

      UUID

      优点:

      • 简单

      缺点:

      • 人类不可读

      网址

      优点:

      • 常规 - “其他人都在使用它”。
      • 您可以链接到提供更多信息的架构/网站。

      缺点:

      • 域需要付费并过期
        • 但它们的成本并不高。还有一些可用的免费域服务(主要是子域)。这些服务往往不那么可靠或寿命不长(您无法控制域)。
        • 如果您使用代码托管,则可以使用项目的 URL。
      • 公司变更,代码转移,域变得无关紧要。

      电子邮件

      优点:

      • 几乎每个人都有电子邮件,如果没有,也有知名公司免费提供。

      缺点:

      • 电子邮件更改,作者更改,多个贡献者没有意义,并且变得无关紧要。

      Tag URIs

      来自Joe's answer

      优点:

      • 指定日期可以解决将来不拥有电子邮件/域的问题。

      缺点:

      • 与电子邮件/域相同,它们往往会随着时间而变化,并且与项目无关。

      任何东西

      优点:

      • 简单、快速、适合实验或个人项目。

      缺点:

      • 以后可能会与其他命名空间发生冲突。

      结论

      我认为最终最好的解决方案是一个 UUID 加上一个规范的项目名称(如果你想更改名称,你可能会遇到问题)。域/电子邮件与项目无关,只是提供唯一性的一种方式,已被 UUID 淘汰。

      【讨论】:

        猜你喜欢
        • 2015-09-05
        • 1970-01-01
        • 1970-01-01
        • 2012-12-31
        • 2021-06-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-12-07
        相关资源
        最近更新 更多