2015-10-28 142 views
2

我想使用另一种复杂类型来定义XSD复杂类型。另一种复杂类型的XSD复杂类型扩展

<xs:complexType name="A"> 
    <!-- sequence with some elements --> 
</xs:complexType> 

<xs:complexType name="B"> 
    <!-- sequence with some elements --> 
</xs:complexType> 

<xs:complexType name="C">  
    <xs:complexContent>    
     <xs:extension base="A"> 
      <!-- ??? reference to complex type B ??? --> 
     </xs:extension> 
    </xs:complexContent>    
</xs:complexType> 

有没有办法做到这一点,而无需声明类型B的新元素?

编辑:

现在我想起来了,类型扩展与其他类型的恐怕不是为了禁止自行扩展许可。

正如RCB建议的那样,可以使用一个组作为解决方法。

<xs:complexType name="A"> 
    <!-- sequence with some elements --> 
</xs:complexType> 

<xs:group name="B"> 
    <!-- sequence with some elements --> 
</xs:group> 

<xs:complexType name="B"> 
    <xs:group ref="B"/> 
</xs:complexType> 

<xs:complexType name="C">  
    <xs:complexContent>    
     <xs:extension base="A"> 
      <xs:group ref="B"/> 
     </xs:extension> 
    </xs:complexContent>    
</xs:complexType> 
+1

据我所知,目前还没有其他办法。 – Kachna

回答

1

如果你能够从复杂类型的一组改变B,那么你可以做:

<xs:group name="B"> 
    <xs:sequence> 
     <!-- Some elements --> 
    </xs:sequence> 
</xs:group> 

<xs:complexType name="C"> 
    <xs:complexContent> 
     <xs:extension base="A"> 
      <xs:group ref="B"/> 
     </xs:extension> 
    </xs:complexContent> 
</xs:complexType> 
+0

这很有趣。它虽然阻止了B的使用。但是由于我可以定义由B组组成的类型B,因此可以将其用作解决方法。谢谢。 – Bastien