xml - XSD 一个元素或另一个元素

标签 xml xslt schema xsd

在 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/

相关文章:

xml - 如何从动态行中获取数据

database - 客户评论的关系数据库设计

xml - 从 tomcat 服务器上的 jsp 访问 xml 会抛出 FileNotFoundException 试图访问 .keystore?

.net - XML 到 .NET 类

xml - XSLT:获取最新日期

database - 选择用于存储文件夹系统的数据库模式

schema - Datomic - db/isComponent 相当于强制外键依赖?

xml - Lua - 我只想解析一个 XML 文件

xml - 将 XML 的所有字段(和子字段)导入为数据框

xml - 在不排序的情况下从和xml中选择最低值