为什么要在实例文档中限定全局元素?

时间:2010-03-10 12:11:34

标签: xml namespaces xsd qualified-name

当使用xml-Schema和名称空间验证xml文档时,除了声明名称空间本身之外,实例文档必须使其前缀为名称空间的全局元素才能对其进行限定。

有人会认为默认命名空间在这种情况下足以限定元素,但xml-Schema显然有另一种意见。

为什么?什么是xml-Schema无法处理的默认命名空间?

1 个答案:

答案 0 :(得分:1)

我相信这是设计用于支持变色龙命名空间和避免变色龙组件的名称冲突。我的意思是,通过不提供namsepace,我们默认为Chameleon设计。但是,如果不将targetNamspace作为默认的namspace提供,则最终会出现问题和错误。

注意:某些内容摘自XFront.com

集体开发的一套架构设计指南

以下是您的一般规则: 除了无命名空间模式之外,每个XML模式至少使用两个名称空间 - targetNamespace和XMLSchema名称空间。在处理这两个名称空间方面,有三种方法可以设计模式:

  1. 使XMLSchema成为默认命名空间,并显式限定对targetNamespace中组件的所有引用。

  2. 反之亦然 - 使targetNamespace成为默认名称空间,并显式限定XMLSchema名称空间中的所有组件。

  3. 不要使用默认命名空间 - 显式限定对targetNamespace中组件的引用,并显式限定XMLSchema命名空间中的所有组件。

  4. 关于哪种方法是正确的,确实没有最佳做法。首先,这完全取决于设计师。

    尽管如此,在我的研究中我发现: - 限定用于构造模式的组件(模式,元素,complexType,序列等)通常不会引起混淆,因为限定符总是相同的。也就是说,人们习惯于看到xsd:schema,xsd:element等等。

    • 另一方面,targetNamespaces可能在架构之间变化很大。因此,可能生成的名称空间前缀可能会有很大差异。例如,lib:Book,boston:subway。这种可变性往往是混乱的根源。

    我希望这能回答你的问题。