我总是觉得很难向其他人解释这一点:为什么要存在XML名称空间?我们什么时候应该使用它们,什么时候不应该使用它们?在XML中使用名称空间时,常见的陷阱是什么?
另外,它们与XML模式有什么关系?XSD模式是否应该始终与名称空间相关联?
发布于 2008-09-24 17:08:27
它们允许组合多种标记语言,而不必担心元素和属性名称的冲突。
例如,查看任何一段XSLT代码,然后考虑如果不使用名称空间而试图编写一个XSLT,其中输出必须包含"template“、" For -each”等元素,会发生什么。语法错误,是什么。
我会把建议和陷阱留给比我更有经验的人。
发布于 2008-09-24 17:27:02
IMHO最大的陷阱是人机交互解释文档,例如开发代码来处理XML文档。关注文档的文字表达式而不是解析文档的信息集结果太容易了。
例如,以下节点
<a xmlns="uri:foo"/>
<foo:a xmlns:foo="uri:foo"/>
<bar:a xmlns:bar="uri:foo"/>
在语义上都是相同的--但对于天真的人来说却非常不同。
第一个例子产生了一个开发XPaths的非常常见的错误--遗漏了"a“在名称空间中的事实--因此//a不会产生匹配。(或者更糟糕的是,匹配不同名称空间中的节点!)
第三个例子打开了另一个理解上的缺陷--前缀文本在语义上是有意义的。在使用XPATH解析文档时,我可以声明任何我喜欢的前缀进行匹配,只要它的uri与文档的uri匹配即可。
发布于 2008-09-24 17:16:52
可以把它们看作是元素类型的姓氏。如果你有两个朋友,都叫Bob,而你正在谈论其中的一个,那么有人可能会问你说的是哪个Bob。只说"Bob“没有多大帮助,所以你就说"Bob Smith”或"Bob Jones“。
元素类型也是如此。有时一个简短的名字是不够的,因为不同的人可以选择相同的名字。因此,您需要包含一个URI作为“姓氏”,以区分不同的Bobs。
https://stackoverflow.com/questions/128389
复制相似问题