【问题标题】:Why does an namespace in XML specify http:?为什么 XML 中的命名空间指定 http:?
【发布时间】:2011-11-19 22:23:14
【问题描述】:

请帮我清理一下。我正在学习 WCF,并看到使用 Namespace = "http://www.mywebsite.com/andsoforth" 参数化的 ServiceContractAttribute

我在另一个问题中读到命名空间是唯一的不透明键。它们通常不是使用 GUID,而是 URL,因为合法的 URL 保证是唯一的。

为什么使用命名空间 URL 指定“http:”方案?为什么不只是 URL?

感谢您澄清这一点。

【问题讨论】:

  • 这是错字吗? “我正在学习 WCP” - 你是说 WCF 吗?

标签: xml wcf


【解决方案1】:

指定协议,实际上总是http://,作为命名空间URI 的一部分只是一种约定,而且是一个不好的约定。 (查看threads from July 2009 on XML-DEV 以了解有关 XML 命名空间如何在各种帐户上严重拙劣的一些讨论,包括使用 URL(而不是 URN)作为(可修复的)约定 URIs。关键的 XML 人自己也承认 XML 命名空间很糟糕,但你能做些什么呢?他们会留下来。)

为什么 HTTP URL 是一个糟糕的选择?协议冒号双斜线很多字母斜线目录更多斜线和目录现在是最后一个斜线还是没有?因为一个尾部斜杠确实会有所作为。

它应该是什么样的?嗯,DNS 或 Java 命名空间。做这项工作不会让人们感到困惑。

这是一个实用的建议。选择简单的命名空间,让您的生活更轻松。 Take a look at URNs,它们非常接近 DNS 和 Java。

【讨论】:

  • 感谢 URN 参考。我无法阅读它,因为它写得太差了,但维基百科的文章为我澄清了它。
【解决方案2】:

您是正确的,命名空间名称(或 URI)只是定义命名空间的唯一标识符。例如,http://www.w3.org/1999/xhtml 实际上并不包含 XHTML 的模式,而是一个人类可读的文档。标识符只是一个 URI。

协议是 URI 定义的一部分。例如,如果我创建一个文件夹并将其命名为“directory.com”,我可以让 file://directory.com/file 在我的本地计算机上完美解析。但是,它将是与http://directory.com/file 托管的资源完全不同的资源。计算机需要协议才能知道我想要哪一个。

换句话说,我们选择了 URI 来唯一地定义命名空间。而协议是 URI 中用来分隔资源的重要部分。

理论上,有两个命名空间和两个独立的协议来表示两种不同的东西是有效的。像许多事情一样,这可能是一个坏主意,因为它会引起混乱,但这是可能的。

【讨论】:

    【解决方案3】:

    我认为在命名空间名称中使用 http:// 的原因之一是社区中一直有一部分人认为有朝一日可以在网络浏览器中键入命名空间名称并返回命名空间含义的定义。甚至还有一个这样做的标准,称为 RDDL,并且一些人遵循它。其他内容是 URL 应解析为有关名称空间的一些人类可读信息的内容。例如,尝试在浏览器中输入 http://www.w3.org/2001/XMLSchema

    但是,确实没有要求命名空间 URI 应该解析为任何东西,而且今天软件尝试取消引用 URL(如果它确实是一个 URL)没有任何用处,我怀疑从来没有会的。

    【讨论】:

    • 非常酷,迈克尔。多年来我没有看到任何提及 RDDL。
    【解决方案4】:

    已经有了一些好的答案。这是一个额外的观点。 XML 命名空间实际上是一个 URI,不限于是一个 URL。有时人们使用 URL 作为指示元数据在哪里可用的一种方式,但通常情况并非如此。经常使用的一个方面是公司拥有自己的 Internet 域,并且通常在 URL 中表示该域,因此http://www.mycompany.com/... 是一种创建公司特定 URI 的方式。

    在大多数情况下,我更愿意明确说明我使用的是 URN,它是一个不是 URL 的 URI。我什至为该值添加了一个前缀,以明确这就是我正在做的事情。像这样的东西” urn:mycompany.com/schemas/services/foo/bar/20111119。

    【讨论】:

      猜你喜欢
      • 2011-08-16
      • 2016-12-10
      • 1970-01-01
      • 2011-08-11
      • 1970-01-01
      • 2013-10-16
      • 2010-09-12
      • 1970-01-01
      • 2013-08-03
      相关资源
      最近更新 更多