Hóa ra, bạn có thể làm điều đó (loại) nhưng phương pháp hoàn toàn hút.
Đã phải làm hai loại phức tạp (một với thẻ Approved và một không có), thay đổi các yếu tố gốc và cho phép chuyển đổi giữa hai loại như thế này:
<xs:element name="ArchivedFormulation">
<xs:complexType>
<xs:choice>
<xs:element name="ApprovedFormulation" type="ApprovedFormulation" />
<xs:element name="NonApprovedFormulation" type="NonApprovedFormulation" />
</xs:choice>
</xs:complexType>
thể thêm khu phức hợp loại sử dụng thừa kế 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>
Điều đó đã cho tôi những gì tôi muốn.
Đó là không thể trong XSD, nhưng bạn có thể bày tỏ rằng việc sử dụng Schematron (http://www.schematron.com/) hoặc một cái gì đó tương tự. –