2011-03-09 87 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