Dor*_*oby 68 xml schema xsd namespaces xml-namespaces
我总是觉得有点难以向其他人解释:为什么存在XML命名空间?我们什么时候应该使用它们,何时不应该使用它们 在XML中使用命名空间时常见的陷阱是什么?
另外,它们如何与XML模式相关?XSD架构是否应始终与命名空间相关联?
Ste*_*sop 34
它们允许组合多种标记语言,而不必担心元素和属性名称的冲突.
例如,查看任何一点XSLT代码,然后想想如果你没有使用命名空间并尝试编写一个XSLT,输出必须包含"template","for-each"等元素,会发生什么? .语法错误,是什么.
我会把建议和陷阱留给比我更有经验的人.
ara*_*yq2 22
为什么存在XML命名空间?
因为,早在1997年,W3C中一些非常有影响力的人想要他们,并且不会拒绝答案.即使有证据表明,我敢肯定地说,有更好的方法来解决他们认为存在的"问题",他们仍然挥舞着他们的影响力,将他们的愿望写入W3C建议书.
围绕XML命名空间的现在广泛的神话中最大的一点就是它们具有技术优势.(这是一个简单存在的建议书的下游效应,因而占据了思想空间 - "哎呀,必须有一个(好的)理由!" - 而不是某个地方的可忘记的脚注.)
我们什么时候应该使用它们,何时不应该使用它们
如果你能提供帮助,你绝不应该使用它们.不幸的是,感兴趣的各方不断推广这款BAD [*]设备已经促成了今天的一系列规范,这使得几乎不可能不必在某些时候与XML命名空间竞争.因此,即使您自己避开了XML命名空间,您也会发现来自各个方向的命名空间镶嵌的crud,或者更糟糕的是,除非您提供这样的crud,否则它们只会拒绝工作.
在XML中使用命名空间时常见的陷阱是什么?
一个非常常见的缺陷是将Xpath表达式与名称空间被"默认"的文档一起使用:名称空间必须在表达式中显式化.另一个问题是在构建文档时"正确"使用它们:它们凭空创造问题.
另外,它们如何与XML模式相关?XSD架构是否应始终与命名空间相关联?
没有必要的关系,除了XSD Schema规范是在委员会中几乎每个人都有XML命名空间的时候开发的.所以他们尽可能深入地工作.尽管如此,使用没有命名空间的XSD架构是可能的,但这是一个陡峭的艰难过程,因为几乎每个支持XSD架构的工具集都假设您"想要"使用命名空间.
[*] BAD =设计破碎
更新:一篇关于这个非解决方案的老问题.
giz*_*zmo 17
它与询问"为什么我们使用Java/C#包?"几乎相同:
ste*_*hbu 12
最大的陷阱IMHO是人工交互解释文档,例如开发代码来处理XML Doc.很容易关注文档的文字表达而不是解析文档的信息集结果.
例如以下节点
<a xmlns="uri:foo"/>
<foo:a xmlns:foo="uri:foo"/>
<bar:a xmlns:bar="uri:foo"/>
Run Code Online (Sandbox Code Playgroud)
在语义上都是相同的 - 但与天真的眼睛非常不同.
第一个例子产生了一个非常常见的错误,即开发XPath - 错过了"a"在命名空间中的事实 - 因此//产生的不匹配.(或者更糟糕的是仍然匹配不同命名空间中的节点!)
第三个例子打开了另一个理解缺陷 - 前缀文本在语义上很重要.使用XPATH解析文档时,我可以声明任何我喜欢的匹配前缀,只要它与文档的uri匹配即可.
将它们视为元素类型的姓氏.如果你有两个朋友,都叫Bob,而你正在谈论其中一个,有人可能会问你在谈论哪个Bob.只说"鲍勃"不是很有帮助,所以你说"鲍勃史密斯"或"鲍勃琼斯".
元素类型也是如此.有时短名称是不够的,因为不同的人可以选择相同的名称.因此,您将URI包含为"姓",以区分不同的Bobs.
XML是一种超级语言,这意味着它是任何基于XML的语言的基础(有道理,对吧?).将XML视为可以用任何语言编写任何句子的笔.这一切都取决于作者,最好是读者应该知道语言.
XML 命名空间基本上是语言的名称,很像"英语"或"עברית".我帮助XML文档的接收者解析它并提取其中的信息.
假设我有一家家具厂,你有一家家具店.您的存储应用程序和我的供应应用程序是完全无关的,但是当它们通过XML消息进行通信时,消息应该是可以理解的并且可以被双方轻松解析
因此,两个系统都需要知道Schema,它定义了语言语法和约定的限制.将模式视为字典和语法教科书.模式是两个系统都应该知道的文档,每个系统中编写解析代码的人都必须知道,并且包括命名空间的声明.
每个命名空间都被命名为URI,在大多数情况下,它是定义它的模式文档的位置.
当然,并非每个XML文档都需要命名空间,尤其是当它不用于将信息传递给远程系统时.例如,将对象序列化为XML以便在数据库中持久化时.
归档时间: |
|
查看次数: |
18149 次 |
最近记录: |