Ответ 1
Оказывается, вы можете это сделать (вроде), но метод полностью отстой.
Чтобы сделать два сложных типа (один с тегом Approved и один без), измените корневой элемент и разрешите переключение между двумя типами следующим образом:
<xs:element name="ArchivedFormulation">
<xs:complexType>
<xs:choice>
<xs:element name="ApprovedFormulation" type="ApprovedFormulation" />
<xs:element name="NonApprovedFormulation" type="NonApprovedFormulation" />
</xs:choice>
</xs:complexType>
Можно добавить сложные типы, используя наследование XSD.
<xs:complexType name="ApprovedFormulation">
<xs:complexContent>
<xs:extension base="NonApprovedFormulation">
<xs:sequence>
<xs:element name="Approved" minOccurs="1" maxOccurs="1">
<xs:complexType>
<xs:sequence>
<xs:element name="ApprovedBy" type="xs:string" />
<xs:element name="ApprovedOn" type="xs:date" />
</xs:sequence>
<xs:attribute name="IsApproved" type="xs:boolean" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:extension>
</xs:complexContent>
Это дало мне то, что я хотел.