是的,它是编造的。
这听起来很愚蠢,但这是事实。代码中指定的命名空间将用于作为特定 Web 服务的请求和响应进行交换的 XML 文档。如果您在线路上放置一个网络跟踪程序,您会看到消息中来回使用的那些命名空间字符串。在网络服务中,您的应用程序通常不需要关心名称空间。 Web 服务库通常会为您处理这些事情。
尽管人们经常使用 HTTP URL,但名称空间不需要是 HTTP URL。这可能是您大部分困惑的根源。IETF 对 XML 名称空间的建议 http://www.w3.org/TR/REC-xml-names/建议应该是a URI http://www.rfc-editor.org/rfc/rfc3986.txt,但该 URI 不必是 HTTP URI,而且事实上它不需要附加任何“网络协议”。
命名空间是...一个字符串。它用作限定 XML 模式中的信息的简单方法。把它想象成一个人的姓氏。您可能认识几个叫“克里斯”的人。您可以通过姓氏来区分他们。
类似地,元素名称“id”可以在许多不同的 XML 文档和模式中使用。应用程序(以及人们)可以通过其 xml 命名空间区分使用 qname“id”的许多不同元素。
通常,“信息架构师”会将文档或 Web 服务的 XML 命名空间指定为 URI,该 URI 是分层的、对于所属组织来说是唯一的,并且与 XML 文档中信息的含义相关。 (在小型组织中,“信息架构师”只是一名开发人员。)例如http://mycompany.com/services/2013/customer http://mycompany.com/services/2013/customer可能是 MyCompany 的命名空间,创建于 2013 年,与服务相关,特别是客户服务。
在我看来,没有真正的理由使用http://
作为 XML 命名空间的 URI 中的方案,除非您计划在该 HTTP URI 上提供文档。您也可以使用 urn:mycompany.com/services/2013/customer 作为 XML 命名空间。事实上它可能更好,因为它表明它只是一个名称,而不是一个定位器。 (不是网址)。
我通常使用 URN,前缀为urn:
作为方案,表明名称空间只是一个名称,一个唯一标识符。
EDIT结构是有规则的URNs http://en.wikipedia.org/wiki/Uniform_Resource_Name。基本格式是:
瓮::
...其中 NID 是名称空间 ID,其中之一一组特殊的、经过批准的字符串 http://www.iana.org/assignments/urn-namespaces/urn-namespaces.xml#urn-namespaces-2NSS 是特定于命名空间的字符串。批准的 NID 列表包括 isbn、uuid、ietf 和其他大约 20 个 - 每一个都具有由不同的 IETF RFC 定义的特定含义。
尽管有有关 NID 的规则,但许多人根本懒得遵守,而是使用自己的域名来代替 NID 来创建自己的 URN。例如“mycompany.com”。 (这就是我经常做的事情)。
然后您可以选择如何进一步限定该名称。您可以指定“services”来指示 Web 服务。有些人使用命名空间中启动服务的年份和月份。这允许您更新服务,并使用不同的日期来区分不同的元素。遵循此命名约定的示例 XML 命名空间可能是:
urn:mycompany.com:services:2011:04:Game
这是什么RFC 2141 http://www.faqs.org/rfcs/rfc2141.html调用“无效 URN”,因为我没有使用注册的 NID。但这符合我的目的。通过应用以下方法将其转换为“有效 URN”是一个简单的步骤fdcNID,定义为RFC 4198 https://www.rfc-editor.org/rfc/rfc4198.
urn:fdc:mycompany.com:services:2011:04:Game
看看那好多少?
最后,大多数人只是建立自己的命名约定,这是对他们的用途、对 XML 数据的内部和合作伙伴消费者有意义的东西。