XSD是一个元素还是另一个元素

时间:2014-04-07 12:49:22

标签: xml xslt schema xsd

在XSD架构中,我知道我可以定义序列或元素,元素的选择或不必按顺序排列的必需集合,但有没有办法说复杂类型应该具有元素约翰或元素杰克,或者没有,只有当元素约翰存在时,元素安娜是否可以在与约翰相同的嵌套级别指定一次(但不是必需的)?

可能的情况:

<John /> | <John /> | <Jack /> | <!-- Neither. -->
           <Anna /> |          | 

如果是,我认为还应该可以说:

<FolderPath /> | <MainFilePath />      | <!-- Neither. -->
               | <Sidekick1FilePath /> |
               | <SideKick2FilePath /> |

同样,两者都不是必需的,但是一旦指定了文件夹,就不能存在任何文件,并且当指定了所有文件时,不能指定文件夹。不应该只指定一个或两个文件,无论是文件夹还是三个文件,都不能。

1 个答案:

答案 0 :(得分:1)

您可以通过嵌套选择和序列来实现此目的。可选内容(&#34;在您的示例中均未&#34;)使用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>