当解析XML时,命名空间的使用意图是什么?

21 浏览
0 Comments

当解析XML时,命名空间的使用意图是什么?

这是我总是觉得有点难向他人解释清楚的事情:

为什么要存在XML命名空间?

我们什么时候应该使用它们,什么时候不应该使用?

在使用XML命名空间时,常见的陷阱有哪些?

另外,它们与XML模式(XSD)的关系如何?XSD模式是否应始终与命名空间关联?

0
0 Comments

XML命名空间是为了解决某些人在W3C中的需求而存在的。尽管当时已经有更好的解决方案,但这些影响力强大的人坚持要求将其写入W3C推荐。然而,XML命名空间的存在并没有技术上的价值,而是由于推荐存在而被广泛接受。

当在解析XML时,应尽量避免使用命名空间。然而,由于有利益相关方的不断推动,目前的规范中存在大量使用命名空间的规范,这使得不得不在某个时间点上与XML命名空间进行交互。因此,即使您自己不使用XML命名空间,您也会发现从各个方向涌来的命名空间相关的数据,或者更糟糕的是,工具集在没有命名空间数据的情况下拒绝工作。

在使用命名空间解析XML时常见的问题是在使用XPath表达式时,如果命名空间已被“默认”,则在表达式中必须明确指定命名空间。另一个问题是在构建文档时正确使用命名空间,它们会“无中生有”地引发问题。

至于XML模式,它与命名空间之间没有必然的关系,只是在XSD模式规范开发时,委员会的每个人几乎都在关注XML命名空间。因此,可以在不使用命名空间的情况下使用XSD模式,但这是一项艰巨的任务,因为几乎所有支持XSD模式的工具集都假设您将“希望”使用命名空间。

总之,XML命名空间的存在主要是由于推荐的存在,而并非出于技术上的合理性。在解析XML时,应尽量避免使用命名空间,但在某些情况下不得不处理命名空间。在使用命名空间时,常见的问题是在使用XPath表达式时需要明确指定命名空间,并且在构建文档时正确使用命名空间可能会引发问题。XML模式可以与命名空间无关,但大多数工具集都假设您将使用命名空间。

0
0 Comments

XML命名空间的使用与为Java/C#使用软件包的原因几乎相同:

  • 可重用性:可以在不同类型的XML文档中重用您定义的一组标签/属性。
  • 模块化:如果您需要向XML添加某个“方面”,则向XML文档添加命名空间比更改整个XML模式定义更简单。
  • 避免污染“主”命名空间:您不会强迫解析器使用庞大的模式定义,只需使用所需的命名空间即可。

嗨Nathan。不,这对我来说没有意义。可重用性似乎不适用于这里...我也不清楚命名空间的目的。在XHTML中,您会找到一个命名空间,我想它的目的是指示浏览器如何渲染页面。但在诸如SOAP之类的地方,消息契约使用命名空间...我不清楚它的用途在哪里。

0
0 Comments

XML命名空间的主要作用是允许多个标记语言组合在一起,而不必担心元素和属性名称的冲突。如果不使用命名空间,而是尝试编写输出包含"template"、"for-each"等元素的XSLT代码,就会导致语法错误。

然而,有人认为XML命名空间并不是一个解决方案,它只能解决一些特定的使用案例,而不是所有的情况。这导致了一些批评者的不满,他们认为XML命名空间的提出只是为了解决一个已经存在解决方案的问题,并且阻碍了更通用的解决方案的发展。

但也有人认为,XML命名空间在某些情况下是有用的,特别是在不同软件解决方案之间实现互操作性时。例如,将模板规则混合到SVG模板中,使用命名空间来区分Inkscape的领域和模板引擎的领域,可能需要一种共同的约定来实现。

,XML命名空间的出现是为了允许多个标记语言的组合,并解决元素和属性名称的冲突问题。尽管有人对其效用和设计方式提出了质疑,但在某些情况下,使用命名空间可以实现不同软件解决方案之间的互操作性。但也需要注意,命名空间并不是解决所有问题的通用解决方案。

0