gpt4 book ai didi

xml - 我怎样才能重复使用相同的 in different complex type definitions?

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

我正在为描述文章、论文、书籍等章节的 XML 文件编写架构。高级概念是 <chapter>可以有任意数量的段落 <par> , 节 <section> 、图像和列表。现在,这同样适用于一个部分,它也可以有任意数量的段落、图像、列表;小节也可以(尚未实现)。

我当前的模式是这样的:

<xs:complexType name="chapter-type">
<xs:choice maxOccurs="unbounded">
<xs:element name="section" type="section-type" />
<xs:element name="par" type="par-type" />
<xs:element name="image" type="image-type" />
<xs:element name="ol" type="list-type" />
<xs:element name="ul" type="list-type" />
</xs:choice>
</xs:complexType>
<xs:complexType name="section-type">
<xs:choice maxOccurs="unbounded">
<xs:element name="par" type="par-type" />
<xs:element name="image" type="image-type" />
<xs:element name="ol" type="list-type" />
<xs:element name="ul" type="list-type" />
</xs:choice>
</xs:complexType>
<!-- <subsection> and other content-containing elements will repeat the par, image, ol, ul -->

如您所见,有很多重复,并且在小节和其他我想重复使用章节/节内容的地方会变得“更糟”。

我可以添加一个新元素,比如说 <content>或其他,包装段落/图像/列表,但这需要我将该元素添加到我的 XML 中。这就是我想避免的。

所以我的问题是:如何避免在各处重复这些元素?

最佳答案

使用命名组。

<xs:group name="paragraphs-etc">
<xs:choice>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="par" type="par-type" />
<xs:element name="image" type="image-type" />
<xs:element name="ol" type="list-type" />
<xs:element name="ul" type="list-type" />
</xs:choice>
</xs:choice>
</xs:group>

然后从您的复杂类型中引用组:

<xs:complexType name="chapter-type">
<xs:choice maxOccurs="unbounded">
<xs:element name="section" type="section-type" />
<xs:group ref="paragraphs-etc"/>
</xs:choice>
</xs:complexType>
<xs:complexType name="section-type">
<xs:group ref="paragraphs-etc"/>
</xs:complexType>

组引用的重复信息来自组引用,而不是组定义。 (因此,将段落等组包装在一个不必要的 xs:choice 中——它确保对该组的任何引用都是对一组可重复选择的引用。)

关于xml - 我怎样才能重复使用相同的 <xs :choice> in different complex type definitions?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17892453/

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