XML 模式可以混搭合格和不合格的命名空间吗?

Can a XML schema have mix and match of qualified and unqualified namespaces?

据我从 W3school 了解到,如果在 XML 架构上将属性 "elementFormDefault" 设置为 unqualified,则 XML 元素将没有前缀。如果我有一个包含不合格元素表单集的模式并且正在导入另一个模式,这会成为问题吗?

示例:我的架构 A 导入了架构 B 的内容。然后在最不幸的情况下,模式 A 有一个名为 "ItemName" 的元素,其中模式 B 也有一个。由于我们不能在这里使用前缀,因此没有简单的方法来区分这两个元素。

这是一个有效的场景吗?

如果是,我该如何区分它们?

如果是,这是否意味着模式可以混合和匹配 elementFormDefault=qualified 和 unqualified 命名空间,并且其中没有潜在的元素名称冲突?

感谢您的帮助!

对我来说这不是一个有效的场景,XSD 定义绝不能冲突,否则会使您的 XSD 集无效。如果 2 个实体具有相同的名称并且在公共模式中必须是 used/imported,则它们必须通过名称空间(elementFormDefault 限定,targetnamespace - 和默认名称空间 - 存在)进行区分。

如果您使用的是一个好的 XML 架构验证器,它应该会引发错误,或者至少是警告。如果它是 'not invalid',这是非常危险的,因为解析器或验证器会随机选择其中一个定义。

如果我能在 w3.org 中找到断言这一点的几行,我将进行更新:-)

首先直接回答你的问题:elementFormDefault 就是它所说的,它只是元素声明中 "form" 属性的默认值,你可以将各个声明中的 form 属性设置为不同的如果你想要的值。

但我从未见过有人这样做,这可能有充分的理由。

但是现在,更仔细地阅读你的问题,其中有几个错误的假设。

首先,elementFormDefault 适用于单个模式文档,而不适用于整个模式。特别是,它不会影响导入的架构文档。

其次,你说如果你使用elementFormDefault=unqualified,那么元素将没有前缀。这不太准确。这意味着在复杂类型中本地声明的元素将没有任何命名空间 URI。重要的是名称空间,而不是前缀。

第三,elementFormDefault=unqualified 的全部要点(顺便说一下,很少使用)是说您不需要将元素放在名称空间中,因为它们已被上下文消除歧义。是的,这允许您拥有两个具有相同名称和不同内容模型的不同元素。如果你认为这是个坏主意,那就不要这样做。但是,根据一个以 BOOK 作为父元素而另一个以 PERSON 为父元素来区分两个 TITLE 元素是非常可行的;有些人会说这通常比将它们放在不同的命名空间中更简单。