我的架构的这部分给了我麻烦:
<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>
答案 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元素时,我不知道您是否希望列表存在。