Xsd 扩展complexType时是否继承了混合?
我在模式中有以下内容:Xsd 扩展complexType时是否继承了混合?,xsd,Xsd,我在模式中有以下内容: <xs:element name="td"> <xs:complexType> <xs:complexContent> <xs:extension base="cell.type"/> </xs:complexContent> </xs:complexType> </xs:element> <xs:complexType name="cel
<xs:element name="td">
<xs:complexType>
<xs:complexContent>
<xs:extension base="cell.type"/>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:complexType name="cell.type" mixed="true">
<xs:sequence minOccurs="0" maxOccurs="unbounded">
<xs:element ref="p"/>
</xs:sequence>
</xs:complexType>
一些解析器允许PCDATA直接在元素中,而其他解析器则不允许。XSD建议(3.4.2)中有一点指出,当一个复杂类型具有复杂内容,并且两个类型都没有混合属性时,有效的混合属性为false。这意味着,如果cell.type的扩展导致mixed=“true”被继承,则混合内容的唯一有效方式就是
是否有更熟悉模式的人可以对正确的解释进行评论
(顺便说一句:如果我控制了模式,我会将mixed=“true”移动到元素定义中,但这不是我的要求。)任何阅读我的问题的人都可能想阅读thread(通过)。我的答案似乎并不完全正确:解析器/验证器不会以相同的方式处理基/派生元素上的混合属性声明
关于扩展复杂类型,W3C规范第1.4.3.2.2.1小节指出 [派生的和基的]{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>
x
Y
因此,基本上不能覆盖复杂基类型的混合性。为了进一步支持此语句,请尝试交换基本类型和dervied类型的混合性。在这种情况下,XML无法验证,因为派生类型不会混合,因为它(再次)无法覆盖基的混合性
你也说过
一些解析器允许PCDATA直接在元素中,而其他解析器则不允许
弄清楚你说的是哪种解析器并没有什么坏处。一个好的解析器在遇到混合内容时不应该失败。给定正确模式的验证解析器,如果在模式不允许的情况下遇到混合内容,则将失败。W3C邮件列表中已提出此问题: