これを行う 1 つの方法は、置換グループを使用することです。ボイラープレートのベース XSD を定義します。
Base.xsd
<?xml version="1.0" encoding="utf-8"?>
<!--W3C Schema generated by QTAssistant/XML Schema Refactoring Module (http://www.paschidev.com)-->
<xsd:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="head">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="common1" type="xsd:anyType"/>
<xsd:element name="common2" type="xsd:anyType"/>
<xsd:element ref="headerPlaceholder"/>
<xsd:element name="common3" type="xsd:anyType"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="headerPlaceholder" type="headerPlaceholder" abstract="true"/>
<xsd:complexType name="headerPlaceholder" abstract="true"/>
<xsd:complexType name="request" abstract="true">
<xsd:sequence>
<xsd:element ref="head"/>
</xsd:sequence>
</xsd:complexType>
</xsd:schema>
その後、req1 と req を個別に構築できます。
Req1.xsd
<?xml version="1.0" encoding="utf-8"?>
<!--W3C Schema generated by QTAssistant/XML Schema Refactoring Module (http://www.paschidev.com)-->
<xsd:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:include schemaLocation="SubstitutionGroupHeader.xsd"/>
<xsd:element name="req1" type="req1"/>
<xsd:complexType name="req1">
<xsd:complexContent>
<xsd:extension base="request">
<xsd:sequence>
<xsd:element name="data1"/>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:element name="choice1" substitutionGroup="headerPlaceholder">
<xsd:complexType>
<xsd:complexContent>
<xsd:extension base="headerPlaceholder"/>
</xsd:complexContent>
</xsd:complexType>
</xsd:element>
<xsd:element name="choice2" substitutionGroup="headerPlaceholder">
<xsd:complexType>
<xsd:complexContent>
<xsd:extension base="headerPlaceholder"/>
</xsd:complexContent>
</xsd:complexType>
</xsd:element>
</xsd:schema>
構造は次のようになります。

Req2.xsd
<?xml version="1.0" encoding="utf-8"?>
<!--W3C Schema generated by QTAssistant/XML Schema Refactoring Module (http://www.paschidev.com)-->
<xsd:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:include schemaLocation="SubstitutionGroupHeader.xsd"/>
<xsd:element name="req2" type="req2"/>
<xsd:complexType name="req2">
<xsd:complexContent>
<xsd:extension base="request">
<xsd:sequence>
<xsd:element name="data2"/>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:element name="choice3" substitutionGroup="headerPlaceholder">
<xsd:complexType>
<xsd:complexContent>
<xsd:extension base="headerPlaceholder"/>
</xsd:complexContent>
</xsd:complexType>
</xsd:element>
<xsd:element name="choice4" substitutionGroup="headerPlaceholder">
<xsd:complexType>
<xsd:complexContent>
<xsd:extension base="headerPlaceholder"/>
</xsd:complexContent>
</xsd:complexType>
</xsd:element>
</xsd:schema>
req2 の構造:

内容が重複しないように、choice1/2 と choice3/4 を req1 と req2 に入れました。したがって、ファイル構造は次のようになります。

XSD コンポーネント間の全体的な関係:

req1 と req2 の両方から同じ choice2 を参照したい場合は、choice2 を独自のファイルでリファクタリングする必要があります。
選択肢と代替グループについては多くの議論ができますが、それは別のことです...