XSD XML所有序列maxOccurs

时间:2019-02-07 05:03:43

标签: xml xsd sequence

我试图创建/更正以下XSD以匹配程序逻辑。当前的非XSD逻辑允许以下属性(以下XML表示形式)以任何顺序进行解析。我对XSD非常满意。这将是解析验证的宝贵工具。是否可以创建XSD以允许以允许Susp_O_CD发生maxOccurs的任何顺序处理这些属性?我知道序列将允许maxOccurs,而所有序列都不允许,但是必须允许Susp_O_CD具有最多五个值,并且需要StReas,StReas_N,ListSusp_T和Susp_O_CD标记的任何输入顺序。

<PrimaryReason>
   <StReas>2</StReas>
   <StReas_N>Reason for stop test</StReas_N>
   <ListSusp_T>
       <Susp_T>8</Susp_T>
       <Susp_T>4</Susp_T>
   </ListSusp_T>
   <Susp_O_CD>00100</Susp_O_CD>
   <Susp_O_CD>00200</Susp_O_CD>
   <Susp_O_CD>00101</Susp_O_CD>
   <Susp_O_CD>00201</Susp_O_CD>
</PrimaryReason>

XSD:

<xs:element name="PrimaryReason" type="Reason_Set"/>

<xs:complexType name="Reason_Set">
    <xs:all>
        <xs:element name="StReas" type="StReas"/>
        <xs:element name="StReas_N" type="StReas_N"/>
        <xs:element name="Tr_ID" type="Tr_ID" minOccurs="0"/>
        <xs:element name="Tr_O_CD" type="Tr_O_CD" minOccurs="0"/>
        <xs:element name="EDU_sec_CD" type="EDU_sec_CD" minOccurs="0"/>
        <xs:element name="EDU_subDiv_CD" type="EDU_subDiv_CD" minOccurs="0"/>
        <xs:element name="ListSusp_T" minOccurs="0">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="Susp_T" type="Susp_T" minOccurs="0" maxOccurs="9"/>
            </xs:sequence>
        </xs:complexType>
        </xs:element>
        <xs:element name="Susp_O_CD" type="Susp_O_CD"  minOccurs="0" maxOccurs="5"/>
    </xs:all>   
</xs:complexType>

希望可以做到这一点。我确实尝试过Group,但不适用于所有标签。所有建议都值得欢迎。

1 个答案:

答案 0 :(得分:0)

在XSD 1.0中,xs:all粒子中的元素只能出现零次或一次。

在XSD 1.1中取消了此限制,以允许任何maxOccurs值。

因此,您需要确定是否可以迁移到XSD 1.1(相对较少的架构处理器(Xerces,Altova和Saxon支持))。

顺便说一句,将元素称为属性会令人困惑。 “属性”是XML中的技术术语。模式文档中的“名称”和“ maxOccurs”是属性;实例文档中的“ Susp_O_CD”是一个元素。

另请参阅XSD - how to allow elements in any order any number of times?