gpt4 book ai didi

xsd - 扩展 complexType 时是否混合继承?

转载 作者:行者123 更新时间:2023-12-04 23:45:31 25 4
gpt4 key购买 nike

我在架构中有以下内容:

<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) 中有一些内容表明,当复杂类型具有复杂内容且两者都没有混合属性时,有效混合为假。这意味着混合内容生效的唯一方法是 cell.type 的扩展导致 mixed="true"被继承。

更熟悉模式的人可以评论正确的解释吗?

(顺便说一句:如果我可以控制架构,我会将 mixed="true"移动到元素定义中,但这不是我的决定。)

最佳答案

任何阅读我的问题的人都可能想阅读 this线程也(通过 Damien )。看来我的回答并不完全正确:解析器/验证器不会以相同的方式处理基/派生元素上的混合属性声明。


关于扩展复杂类型,section 3.4.6 的第 1.4.3.2.2.1 小节|在 part 1 W3C 的 XML Schema规范说

Both [derived and base] {content type}s must be mixed or both must be element-only.

所以是的,它是继承的(或者更像是你不能覆盖它——最后是一样的)。

基本上,您所描述的是所需的(并且就我而言)最合乎逻辑的行为。

我创建了一个简单的模式来使用 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 无法验证,因为派生类型不会混合,因为它(再一次)无法覆盖基础的混合。

你也说过

Some parsers allow PCDATA directly in the element, while others don't

澄清您所谈论的是哪些解析器并没有什么坏处。 好的 解析器在遇到混合内容时不应失败。如果在架构不允许的情况下遇到混合内容,则在给定适当架构的情况下,验证解析器将失败。

关于xsd - 扩展 complexType 时是否混合继承?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8736931/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com