创建没有域的XML命名空间

时间:2014-02-22 07:43:56

标签: xml namespaces uri uuid

通常教程会告诉您在创建新的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名称空间有哪些缺点或基于域的名称空间的优点?如果您的域名过期,您可能会失去它并且必须更改所有名称空间。

3 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:1)

除了Java包名称之外,

This question是一个类似的问题。 Java Specification建议了域约定,但它不是强制性的。他们的选择解释如下:

  

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

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

UUID

优点:

  • 简单

缺点:

  • 不可读的人

URL

优点:

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

缺点:

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

电子邮件

优点:

  • 几乎每个人都有一封电子邮件,或者如果他们没有,有信誉良好的公司免费提供。

缺点:

  • 电子邮件发生变化,作者发生变化,多个贡献者没有任何意义,而且变得无关紧要。

Tag URIs

来自Joe's answer

优点:

  • 指定日期解决了以后不拥有电子邮件/域名的问题。

缺点:

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

任何

优点:

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

缺点:

  • 将来可能会与其他名称空间发生冲突。

结论

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