gpt4 book ai didi

Xml 架构扩展顺序

转载 作者:数据小太阳 更新时间:2023-10-29 01:47:42 26 4
gpt4 key购买 nike

如果我有一个扩展,我如何保证派生元素在基类元素之前?默认值是相反的。我很想使用 all,但我知道那是不可能的。

<xs:complexType name="BaseClass">
<xs:sequence>
<xs:element name="foo" type="xs:string/>
<xs:element name="bar" type="xs:string/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="DerivedClass">
<xs:complexContent>
<xs:extension base="BaseClass">
<xs:sequence>
<!-- This makes the order foo, bar, cheese, tomato -->
<!-- But I need cheese, tomato, foo, bar -->
<xs:element name="cheese" type="xs:string/>
<xs:element name="tomato" type="xs:string/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="BaseClass" type="BaseClass"/>
<xs:element name="DerivedClass" type="DerivedClass" substitutionGroup="BaseClass"/>

我希望被接受的 xml 看起来像这样:

<mylist>
<BaseClass>
<foo>lala</foo>
<bar>lala</bar>
</BaseClass>
<DerivedClass>
<cheese>cheddar</cheese>
<tomato>red</tomato>
<foo>lala</foo>
<bar>lala</bar>
</DerivedClass>
</mylist>

目前我正在考虑将 BaseClass 的所有元素也复制到 DerivedClass 中,但我不知道 substitutiongroups 会发生什么,什么不会。

最佳答案

If I have an extension, how can I assure that the derived elements are in front of the base class elements?

不幸的是,这是不可能的。扩展 complexType 时,新元素将作为序列添加到基本元素中。基本上,新的内容模型如下所示:

(base element model), (extension element model)

这就是 XSD 中类型扩展的工作原理。你可能想知道为什么?因为扩展类型必须符合基本类型。你不能将任何东西作为任何东西的延伸作为基础。

假设您有一个软件知道如何处理类型 A 的元素。该软件可能假设实际上类型 A 可能会被扩展,但在任何情况下,它都必须能够在假定为 A 类型的元素中找到它从类型 A 知道/期望的一切......以及类型 A 固有的元素内容(这是最重要的事情之一)必须放在第一位!

关于Xml 架构扩展顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18847801/

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