XML模式能否混合使用限定和非限定名称空间?

XML模式能否混合使用限定和非限定名称空间?,xml,namespaces,Xml,Namespaces,从W3school我了解到,如果在XML模式中将属性“elementFormDefault”设置为unqualified,那么XML元素将没有前缀。如果我有一个设置了非限定元素表单的模式,并且正在导入另一个模式,这会是一个问题吗 示例:我有一个模式A,它导入模式B的内容。然后在最不幸的场景中,模式a有一个名为“ItemName”的元素,其中模式B也有一个。因为我们不能在这里使用前缀,所以没有简单的方法来区分这两个元素 这是一个有效的方案吗 如果是,我如何区分它们 如果是的话,这是否意味着一个模式

从W3school我了解到,如果在XML模式中将属性“elementFormDefault”设置为
unqualified
,那么XML元素将没有前缀。如果我有一个设置了非限定元素表单的模式,并且正在导入另一个模式,这会是一个问题吗

示例:我有一个模式A,它导入模式B的内容。然后在最不幸的场景中,模式a有一个名为“ItemName”的元素,其中模式B也有一个。因为我们不能在这里使用前缀,所以没有简单的方法来区分这两个元素

这是一个有效的方案吗

如果是,我如何区分它们

如果是的话,这是否意味着一个模式可以混合使用elementFormDefault=限定名称空间和非限定名称空间,而不存在潜在的元素名称冲突


谢谢你的帮助

对我来说,这不是一个有效的场景,XSD定义不能冲突,否则将使您的XSD集无效。如果两个实体具有相同的名称,并且必须在公共架构中使用/导入,则必须按名称空间(
elementFormDefault
qualified、
targetnamespace
-和默认名称空间-present)区分它们

如果您正在使用一个好的XML模式验证器,它应该会引发一个错误,或者至少是一个警告。如果它“不是无效的”,这是非常危险的,因为解析器或验证器会随机选择其中一个定义


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

对我来说,这不是一个有效的场景,XSD定义决不能冲突,否则将使您的XSD集无效。如果两个实体具有相同的名称,并且必须在公共架构中使用/导入,则必须按名称空间(
elementFormDefault
qualified、
targetnamespace
-和默认名称空间-present)区分它们

如果您正在使用一个好的XML模式验证器,它应该会引发一个错误,或者至少是一个警告。如果它“不是无效的”,这是非常危险的,因为解析器或验证器会随机选择其中一个定义


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

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

但我从未见过有人这样做,这可能有很好的理由

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

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

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


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

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

但我从未见过有人这样做,这可能有很好的理由

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

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

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


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

谢谢你的回答。这很有帮助。我只是浏览了一下XML标准。似乎元素可以通过使用xmlns属性覆盖其默认声明的命名空间。这是区分两个项目名称的好办法吗?e、 g.*注意,这是一个使用非限定xml元素的模式。我从未在XSD中尝试过它,但在xml实例中使用它时,它会起作用。由于XSD本身就是一个XML,这可能没问题:-D我想在这种情况下,解析定义的引擎会记住具有不同QName(blah:ItemName和notTheSameblah:ItemName)的ItemName,但不确定您是否可以这样做。如果它定义了targetNamespace,则在原始帖子中添加一条注释:you
import
a schema,所以一般来说,因为元素或属性是qualif