2013-06-05 42 views
0

我试图创建一个模式和所遇到的这个问题,但我发现在我的案件的解决方案应该工作(XSD - how to allow elements in any order any number of times?)不。XML方案:使用任意数量的元素复杂类型任意次数

<xsd:element name="foo"> 
<xsd:complexType> 
    <xsd:choice> 
      <xsd:element ref="p" maxOccurs="unbounded"/> *--element p is complex--* 
      <xsd:element ref="f" maxOccurs="unbounded"/> *--element f is complex--* 
      <xsd:element ref="summary"/> 
    </xsd:choice> 
     <xsd:attribute ref="type"/> 
</xsd:complexType> 
</xsd:element> 

以此来验证下面的XML带回错误“意外的子元素”:

<foo type="###"> 
    <p type="###"> 
     <pr date="##/##/##" amount="###"/> 
     <pr date="##/##/##" amount="###"/> 
    </p> 
    <f type="###"> 
     <fr date="##/##/##" factor="###"/> 
     <fr date="##/##/##" factor="###"/> 
    </f> 
    <p type="###"> 
     <pr date="##/##/##" amount="###"/> 
     <pr date="##/##/##" amount="###"/> 
    </p> 
    <f type="###"> 
     <fr date="##/##/##" factor="###"/> 
     <fr date="##/##/##" factor="###"/> 
    </f> 
    <summary> 
     <p_summary date="##/##/##" p="####" dis="###" ......./> 
     <p_summary date="##/##/##" p="####" dis="###" ......./> 
     <p_summary date="##/##/##" p="####" dis="###" ......./> 
    </summary> 
</foo> 

我还没有列出的定义为PF和总结,但它们都包含的maxOccurs =“无界“对它们各自的元件(FR,PR,p_summary)。

回答

1

这是< XSD:选择>那一定是无界这里。您正确的模式应该是这样的:

<xsd:element name="foo"> 
<xsd:complexType> 
    <xsd:choice maxOccurs="unbounded"> 
     <xsd:element ref="p"/> 
     <xsd:element ref="f"/> 
     <xsd:element ref="summary"/> 
    </xsd:choice> 
    <xsd:attribute ref="type"/> 
</xsd:complexType> 
</xsd:element> 

每个元素(pfsummary)设置maxOccurs="unbounded"不会在这里做任何区别。它只是让你重复相同的元素很多次,但不与他人混用。

+0

谢谢ColdFusion的,那正是我想要的! – skipstar