任何阅读我的问题的人可能想阅读this http://lists.w3.org/Archives/Public/xmlschema-dev/2005Sep/0018.html线程也(通过Damien https://stackoverflow.com/users/438970/damien)。看来我的答案并不完全正确:解析器/验证器不处理mixed基/派生元素上的属性声明也以相同的方式进行。
关于扩展复杂类型,第 1.4.3.2.2.1 节第3.4.6节 http://www.w3.org/TR/xmlschema-1/#cos-ct in part 1 http://www.w3.org/TR/xmlschema-1W3C 的XML模式 http://www.w3.org/TR/xmlschema-1规范说
Both [衍生和基础]{content type} 必须混合,或者两者都必须是纯元素。
所以是的,它是继承的(或者更像是你不能覆盖它——最终是一样的)。
基本上,您所描述的是所需的(就我而言)最合乎逻辑的行为。
我创建了一个简单的模式来使用 Eclipse 的 XML 工具运行一些测试。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="c">
<xs:complexType>
<xs:complexContent mixed="false">
<xs:extension base="a"/>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:complexType name="a" mixed="true">
<xs:sequence minOccurs="0" maxOccurs="unbounded">
<xs:element name="b"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
上述模式是有效的,因为 Eclipse 或 W3C 的“官方”XML 模式验证器都没有注意到它的任何问题。
以下 XML 通过了针对上述架构的验证。
<?xml version="1.0" encoding="UTF-8"?>
<c xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="test.xsd">
x
<b/>
y
</c>
所以基本上你不能覆盖混合性复杂的基本类型。为了进一步支持这一说法,请尝试交换基本类型和派生类型的混合性。在这种情况下,XML 将无法验证,因为派生类型不会被混合,因为它(再次)无法覆盖基类的混合性。
你也说过
一些解析器允许 PCDATA 直接出现在元素中,而其他解析器则不允许
澄清你正在谈论哪些解析器并没有什么坏处。 Agood解析器在遇到混合内容时不应失败。给定正确的模式,验证解析器如果在模式不允许的情况下遇到混合内容,将会失败。