定义xsd架构中的元素列表

时间:2012-07-10 15:48:40

标签: xsd

我的架构的这部分给了我麻烦:

        <xs:element name="newrecipients">
            <xs:complexType>
                <xs:choice>
                    <xs:element name="csv" type="xs:string" />
                    <!-- List of recipients -->
                </xs:choice>
            </xs:complexType>
        </xs:element>

收件人列表包括以下内容:

<recipient>
    <field1>...</field1>
    ...
    <fieldN>...</field>
</recipient>

其中标记接收者可能包含模式未知的随机标记序列。所以我使用了像

这样的东西
  <xs:element name="recipient">
    <xs:complexType>
      <xs:sequence>
        <xs:any minOccurs="1"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>

问题是我不知道如何定义收件人列表。我知道<xs:list>但在这种情况下我无法理解如何使用它,因为通常我会看到类似

的内容
<xs:element name="intvalues" type="valuelist">

<xs:simpleType name="valuelist">
  <xs:list itemType="xs:integer"/>
</xs:simpleType>

</xs:schema>

您必须定义包含列表的元素。我想直接csv或直接list

我错过了什么?感谢。

编辑:输出示例

此:

<newrecipients>
    <csv>myrecipients.csv</csv>
</newrecipients>

或者这个:

<newrecipients>
    <recipient>
        <field1>...</field1>
        ...
        <fieldN>...</field>
    </recipient>
    ...
    <recipient>
        <field1>...</field1>
        ...
        <fieldN>...</field>
    </recipient>
</newrecipients>

1 个答案:

答案 0 :(得分:4)

我不确定它是否在xsd:choice元素内有效:

<xs:element name="newrecipients">
    <xs:complexType>
        <xs:choice>
            <xs:element name="csv" type="xs:string" />
            <!-- List of recipients -->
            <xs:element name="recipient" maxOccurs="unbounded">
                <xs:complexType>
                    <xs:sequence>
                        <xs:any minOccurs="1"/>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
        </xs:choice>
    </xs:complexType>
</xs:element>

当然,您可以使用此解决方案将元素声明包装在xsd:sequence标记内,但是当且仅当缺少csv元素时,我不知道您是否希望列表存在。