0

次のスキーマは、'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>
4

1 に答える 1

2

XSD 1.0 は、この種の制約を表現するようには設計されていません。

XSD 1.0 を使用する場合は、XML にこの設計は必要ありません。この XML 構造が必要な場合は、XSD 1.0 を使用したくありません。代替手段には、XSD 1.1 (アサーションまたは条件付き型割り当てを使用)、または Relax NG または Schematron が含まれます。

于 2013-11-02T16:30:04.557 に答える