У меня есть обходной путь. Это не оптимальное решение, но очень работоспособное.
<xs:schema>
<xs:element name="ExternalReference" type="xs:string"/>
<xs:group name="InternalReference">
<xs:sequence>
<xs:element name="HeaderNumber" type="xs:int"/>
<xs:element name="LineNumber" type="xs:int"/>
<xs:element ref="ExternalReference" minOccurs="0" maxOccurs="1"/>
</xs:sequence>
</xs:group>
<xs:group name="External">
<xs:sequence>
<xs:element ref="ExternalReference" minOccurs="1" maxOccurs="1"/>
</xs:sequence>
</xs:group>
<xs:group name="Reference">
<xs:choice>
<xs:group ref="InternalReference"/>
<xs:group ref="External"/>
</xs:choice>
</xs:group>
<xs:complexType name="message">
<xs:sequence>
<xs:group ref="Reference" minOccurs="1"/>
</xs:sequence>
</xs:complexType>
<xs:element name="Message" type="message"/>
</xs:schema>
Я все еще надеюсь на лучший способ.