在 XSD 模式中,我知道我可以定义序列或元素、元素的选择或所需的集合,这些集合不必按逐字顺序排列,但是有没有办法说复杂类型应该具有元素 John或者元素 Jack,或者都不存在,并且只有当元素 John 存在时,元素 Anna 才可以在与 John 相同的嵌套级别上指定一次(但不是必需的)吗?
可能的情况:
<John /> | <John /> | <Jack /> | <!-- Neither. -->
<Anna /> | |
如果是的话,我想以下也应该可以说:
<FolderPath /> | <MainFilePath /> | <!-- Neither. -->
| <Sidekick1FilePath /> |
| <SideKick2FilePath /> |
同样,两者都不是必需的,但是一旦指定了文件夹,则不得存在任何文件,并且当指定了所有文件时,不得指定文件夹。不应该只指定一个或两个文件,一个文件夹或三个文件或什么都不指定。
最佳答案
您可以通过嵌套选择和序列来实现这一点。可选内容(在您的示例中为“两者都不是”)由 minOccurs="0"
完成基数。基数限制可用于元素声明或集合,如 <xs:choice>
上所示。下面是示例类型。
<xs:complexType name="something">
<xs:choice minOccurs="0">
<xs:sequence>
<xs:element name="John" type="xs:string" />
<xs:element minOccurs="0" name="Anna" type="xs:string" />
</xs:sequence>
<xs:element name="Jack" type="xs:string" />
</xs:choice>
</xs:complexType>
关于xml - XSD 一个元素或另一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22912906/