除非您使用引用全局元素(又称“salami-slice”模式)的建模方法,否则这没有问题,因为您不能用相同的名称定义两个全局元素。如果您使用稍微基于类型的方法,这没有问题(注意,为了清楚起见,我省略了重复乘客列表):
<xs:complexType name="FlightDefinition">
<xs:sequence>
<xs:element name="passenger" type="Passenger"/>
</xs:sequence>
<xs:attribute name="number" type="xs:ID" use="required"/>
</xs:complexType>
<xs:complexType name="Passenger">
<xs:sequence>
<xs:element name="name" type="xs:string"/>
<xs:element name="flight" type="FlightReference"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="FlightReference">
<xs:attribute name="href" type="xs:IDREF" use="required"/>
</xs:complexType>
<xs:element name="flight" type="FlightDefinition"/>
顺便说一句:我认为乘客内部的航班参考将指向其他地方,如果乘客包含在一个航班中,这是多余的。