2012-12-07 58 views
4

试图找出是否可以通过XSD架构级别验证实现以下方案。XSD验证以及否则可能性


E.g-

<PreferredPlan> 
This tag can have Values - Family or Single 

,如果我得到的值作为 “家”,我应该有下面的XML元素。

<Family> 
<tag1></tag1> 
<tag2></tag2> 

如果 “单” 的价值被捕获,我应该有下面的标签。

<Single> 
<tag3></tag3> 
<tag4></tag4> 
</Single> 


回答

6

一个简单的方法来定义,这将是这个样子:

<xs:element name="PreferredPlan"> 
    <xs:complexType> 
    <xs:choice> 
     <xs:element ref="Family"/> 
     <xs:element ref="Single"/> 
    </xs:choice> 
    </xs:complexType> 
</xs:element> 

<xs:element name="Family"> 
    <xs:complexType> 
    <xs:sequence> 
     <xs:element ref="tag1"/> 
     <xs:element ref="tag2"/> 
    </xs:sequence> 
    </xs:complexType> 
</xs:element> 

<xs:element name="Single"> 
    <xs:complexType> 
    <xs:sequence> 
     <xs:element ref="tag3"/> 
     <xs:element ref="tag4"/> 
    </xs:sequence> 
    </xs:complexType> 
</xs:element> 

<xs:element name="tag1" type="xs:string"/> 
<xs:element name="tag2" type="xs:string"/> 
<xs:element name="tag3" type="xs:string"/> 
<xs:element name="tag4" type="xs:string"/> 

这使得

<PreferredPlan> 
    <Family> 
    <tag1/> 
    <tag2/> 
    </Family> 
</PreferredPlan> 

<PreferredPlan> 
    <Single> 
    <tag3/> 
    <tag4/> 
    </Single> 
</PreferredPlan> 

,并禁止

<PreferredPlan> 
    <Family> 
    <tag3/> 
    <tag4/> 
    </Family> 
</PreferredPlan>