0
以下架构定义了具有两个属性(即'DEPARTMENT'和'BOOK_NAME')的'book'元素。我想改进模式,以便在写入相应的XML文件时,首先出现'DEPARTMENT'属性,选择值(PHOTOGRAPHY/COMPUTER_SCIENCE/MEDICINE),然后根据'DEPARTMENT'属性的值'BOOK_NAME '是从相应的列表中选择的。因此,如果DEPARTMENT =“PHOTOGRAPHY”,则XML文件的作者应该无法从COMPUTER_SCIENCE或MEDICINE部门选择书籍。Xml架构:根据另一个属性的类型限制属性的值类型
请不要建议拆分书籍元素,并将这些属性作为子元素,我正在寻找一种解决方案,根据为其他属性选择的类型限制一种属性的类型。
谢谢
<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>