2

在使用 xml-Schema 和命名空间验证 xml 文档时,除了声明命名空间本身之外,实例文档还必须为其全局元素加上命名空间前缀来限定它。

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

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

4

1 回答 1

1

我相信这是为了支持 Chameleon 命名空间并避免 Chameleon 组件的名称冲突而设计的。我的意思是,如果不提供命名空间,我们会默认使用 Chameleon 设计。但是,当您不提供 targetNamspace 作为默认 namspace 时,您最终会遇到问题和错误。

注:部分内容摘自 XFront.com

一组共同开发的模式设计指南

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

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

  2. 反之亦然 - 将 targetNamespace 设为默认命名空间,并明确限定 XMLSchema 命名空间中的所有组件。

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

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

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

  • 另一方面,targetNamespaces 在不同的模式中可能会有很大的不同。因此,可能生成的名称空间前缀可能会有很大差异。例如,lib:Book、boston:subway。这种可变性常常是混乱的根源。

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

于 2010-07-28T15:45:09.477 回答