为什么要在实例文档中限定全局元素?
问题描述:
使用xml-Schema和命名空间验证xml文档时,实例文档除了声明命名空间本身之外,还必须在其全局元素前加一个命名空间来限定它。为什么要在实例文档中限定全局元素?
有人会认为在这种情况下,默认名称空间足以限定元素,但xml-Schema显然有另一种意见。
这是为什么?关于xml-Schema无法应对的默认命名空间是什么?
答
我相信这是通过设计来支持变色龙命名空间并避免变色龙组件的名称冲突。我的意思是,通过不提供一个namsepace我们默认变色龙的设计。但是,如果不提供targetNamspace作为默认namspace,则最终会出现问题和错误。
注:部分内容来自XFront.com
一个共同开发的集架构设计指南的
这里是你的规则一般摘录: 除了没有命名空间的架构,每个XML架构至少使用两个名称空间 - targetNamespace和XMLSchema名称空间。有三种方法来设计的架构,关于处理这两个命名空间:
让XMLSchema的默认命名空间,并明确限定所有引用到的targetNamespace组件。
反之亦然 - 使targetNamespace成为默认命名空间,并明确限定XMLSchema命名空间中的所有组件。
不要使用默认命名空间 - 显式限定对targetNamespace中组件的引用,并显式限定XMLSchema命名空间中的所有组件。
确实没有关于哪种方法是正确的最佳做法。首先,这完全取决于设计师。
尽管如此,在我的研究中,我发现: - 限定用于构造模式的组件(模式,元素,complexType,序列等)通常不会造成混淆,因为限定符总是相同。也就是说,人们习惯于看到xsd:schema,xsd:element等。
- 另一方面,目标名称空间在模式之间可能差别很大。因此,可能产生的名称空间前缀可能差别很大。例如,lib:Book,波士顿:地铁。这种变化常常是混乱的根源。
我希望这能回答你的问题。
尼卡回答乔。如果这将被批准为正确的(奥斯卡),你将在星期二得到赏金。我将在未来四天内离开互联网。 BR - – 2010-07-28 16:21:46