问题是我使用的是XS:所有因为元素可以是任何顺序。我不能在引用的元素上放置maxoccurs:
<xs:element name="PersonInfo">
<xs:complexType>
<xs:all>
<xs:element name="Addr" type="AdressType" minOccurs="0" maxOccurs="unbounded" />
</xs:all>
<xs:attribute name="id" type="xs:ID" use="optional" />
<xs:attribute name="Test" type="xs:string" use="optional" />
</xs:complexType>
</xs:element>
<xs:complexType name="AdressType">
<xs:all>
<xs:element name="BuildingAptNumber" type="xs:string" minOccurs="0" />
<xs:element name="Addr1" type="xs:string" minOccurs="0" />
<xs:element name="City" type="xs:string" minOccurs="0" />
<xs:element name="StateProvCd" type="xs:string" minOccurs="0" />
<xs:element name="PostalCode" type="xs:string" minOccurs="0" />
</xs:all>
<xs:attribute name="AddrTypeCd" type="xs:string" use="optional" />
</xs:complexType>
如果未引用该元素,我将能够使用ComplexType。有没有办法引用该元素并在xs:all?
下有一个maxoccurs编辑:我看到添加maxoccurs的唯一方法是使用complextype并在复杂类型中定义xs:choice:
<xs:element name="Test" minOccurs="0">
<xs:complexType>
<xs:choice maxOccurs="unbounded">
<xs:element name="Addr" type="PMICADDRESS"/>
</xs:choice>
</xs:complexType>
</xs:element>
所以问题是我不知道如何声明addr元素的复杂类型。我找到的一个解决方案是更改为xsd 1.1。我无法更新到XSD 1.1。然而。我找到了一个有用的帖子:Middle way between XSD all and XSD sequence
答案 0 :(得分:2)
对maxOccurs的限制=&#34; 1&#34; on xs:all在XSD 1.1中删除。您可以选择使用XSD 1.1处理器吗?据我所知,目前有三种:Saxon,Xerces和Altova。
答案 1 :(得分:1)
如果没有引用该元素,我将能够逃脱 使用ComplexType
不,你maxOccurs="unbounded"
下的xs:element
仍然无法xs:all
。
有没有办法引用该元素并在其下有一个maxoccurs xs:all?
不,xs:element
下的xs:all
可能只有0或1。
关于xs的更新:评论中的选择理念:
我可以使用
xs:choice
并创建元素而不是引用 现有的(不适合作为参考使用多个点)。我是 试图找出是否有办法使用引用 元素xs:choice
。
如果您的首要任务是避免排序并仍然允许Addr
下的多个PersonInfo
元素,是的话,您可以将xs:choice
与maxOccurs="unbounded"
一起使用:
<xs:choice maxOccurs="unbounded">
<xs:element name="Addr" type="AdressType"/>
<xs:element name="e1"/>
<xs:element name="e2"/>
</xs:choice>
但请注意,与xs:all
不同,此处Addr
或e1
或e2
可以省略。在此特定配置中,e1
和e2
也可能重复出现。如果您想探索其他组合,请参阅minOccurs and maxOccurs on elements inside xsd:choice了解如何解释maxOccurs
及其xsd:choice
个孩子的xsd:element
。最后,您可以在一组有序的元素之前或之后隔离xs:all
元素,其中您可以允许基数大于1。