次のスキーマは、'DEPARTMENT' と 'BOOK_NAME' の 2 つの属性を持つ 'book' 要素を定義します。スキーマを改善して、対応する XML ファイルの書き込み中に「DEPARTMENT」属性が最初に表示され、その値が選択され (PHOTOGRAPHY/COMPUTER_SCIENCE/MEDICINE)、次に「DEPARTMENT」属性の値に基づいて「BOOK_NAME」が表示されるようにします。 ' は、対応するリストから選択されます。したがって、DEPARTMENT="PHOTOGRAPHY" の場合、XML ファイルの作成者は COMPUTER_SCIENCE または MEDICINE 部門から本を選択できません。
book 要素を分割して、これらの属性を子要素にすることはお勧めしません。別の属性に選択されたタイプに基づいて、ある属性のタイプを制限するソリューションを探しています。
ありがとうございました
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xs:element name="books">
<xs:complexType>
<xs:sequence>
<xs:element ref="book"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="book">
<xs:complexType>
<xs:attribute name="DEPARTMENT" type="departmentName" use="required"/>
<xs:attribute name="BOOK_NAME" type="should be photographyBooks or computerScienceBooks or medicineBooks depending on the selected department" use="required"/>
</xs:complexType>
</xs:element>
<xs:simpleType name="departmentName">
<xs:restriction base="xs:string">
<xs:enumeration value="PHOTOGRAPHY"/>
<xs:enumeration value="COMPUTER_SCIENCE"/>
<xs:enumeration value="MEDICINE"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="photographyBooks">
<xs:restriction base="xs:string">
<xs:enumeration value="Adobe PhotoShop in a nutshell"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="computerScienceBooks">
<xs:restriction base="xs:string">
<xs:enumeration value="An Intruduction to Computer Programming using C"/>
<xs:enumeration value="Best Practices in Java"/>
<xs:enumeration value="Guide to Perl Scripting"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="medicineBooks">
<xs:restriction base="xs:string">
<xs:enumeration value="Principles an Practices of Medicine"/>
<xs:enumeration value="Mortality in relation to Smoking"/>
<xs:enumeration value="Heart Protection Study"/>
</xs:restriction>
</xs:simpleType>
</xs:schema>