2011-03-09 92 views
4

学习XML Schema,我希望能够在另一个元素中包含元素的集合。看起来很简单,不太清楚如何去做。XML中的集合SChema

这是架构:

<xs:attributeGroup name="ProcedureMappingFragment"> 
    <xs:attribute name="ParameterName" type="xs:string" /> 
    <xs:attribute name="TypeName" type="xs:string" /> 
    <xs:attribute name="PropertyName" type="xs:string" /> 

<xs:complexType name="ProcedureMappingSection"> 
    <xs:sequence> 
    <xs:element name="ProcMapping" type="ProcedureMapping" /> 
    </xs:sequence> 
</xs:complexType> 

<xs:complexType name="ProcedureMapping"> 
    <xs:attributeGroup id="two" ref="ProcedureMappingFragment" /> 
    <xs:attribute name="ProcedureName" type="xs:string" /> 
</xs:complexType> 

,我试图以产生类似这样的:

<MappingSection xmlns="http://tempuri.org/ServiceMapping.xsd"> 
    <ProcMapping ParameterName="ParameterName1" TypeName="TypeName1" PropertyName="PropertyName1" ProcedureName="ProcedureName1" /> 
    <ProcMapping ParameterName="ParameterName1" TypeName="TypeName1" PropertyName="PropertyName1" ProcedureName="ProcedureName1" /> 
    <ProcMapping ParameterName="ParameterName1" TypeName="TypeName1" PropertyName="PropertyName1" ProcedureName="ProcedureName1" /> 
    <ProcMapping ParameterName="ParameterName1" TypeName="TypeName1" PropertyName="PropertyName1" ProcedureName="ProcedureName1" /> 
</MappingSection> 

然而,告诉我在MappingSection里只能有一个ProcMapping。具体来说,它将对命名空间MappingSection调用第二个ProcMapping元素无效。

回答

8

您需要设置minOccursmaxOccurs。由于它们的默认值为1,因此只允许使用一个元素。

所以我会定义:

<xs:complexType name="ProcedureMappingSection"> 
    <xs:sequence> 
     <xs:element name="ProcMapping" type="ProcedureMapping" maxOccurs="unbounded" /> 
    </xs:sequence> 
</xs:complexType> 
+0

谢谢,这个作品。虽然当我删除XS:序列是说XS:元素是一个无效的成员直接在complexType中? – 2011-03-09 23:25:08

+0

是的,那是我的错,我把它放回去了。 “xs:sequence”或“choice”或“group”是强制性的,我已经忘记了这一点。 – Aliostad 2011-03-09 23:26:45