0

以下のような入力 XML スキーマがあり、以下の 2 つの制約をコーディングする方法がわからないため、スキーマで以下の 2 つのことを実行する必要がありました。

  1. 「確立された」要素が存在する場合、他の要素「planToEstablish」は発生してはなりません。逆に、要素「planToEstablish」が存在する場合、「確立された」要素は存在してはなりません。また、両方の要素が存在しなくてもかまいません。
  2. Farm 要素は、「farmOwnerName」属性と「produce」属性の両方で検証する必要があります。たとえば、farmOwnerName="Jerry" Produce="apple" の場合、同じ farmOwnerName="Jerry" Produce="apple" を持つ別のファームを保存することはできません。ただし、「produce」または「farmOwnerName」が異なる限り、他の farm 要素を格納できます。例 farmOwnerName="Jerry" Produce="orange" は引き続き格納できます。

以下は、入力 XML ファイルです。

<Country>
 <farm farmOwnerName="Jerry" produce="apple">
   <established>1974</established>
   <totalWorker>30</totalWorker>
 </farm>
 <farm farmOwnerName="Ronald" produce="apple">
   <totalWorker>15</totalWorker>
 </farm>
 <farm farmOwnerName="Richard" produce="lemon">
   <planToEstablish>1970</planToEstablish>
   <totalWorker>20</totalWorker>
 </farm>
</Country>

以下は、私が今持っている XML スキーマ コードです。

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" >
<xs:element name="established" type="xs:integer"/>
<xs:element name="planToEstablish" type="xs:integer"/>
<xs:element name="totalWorker" type="xs:integer"/>

<xs:element name="Country">

<xs:complexType name="farm">
<xs:sequence maxOccurs="unbounded">
    <xs:element ref="established" use="optional"/>
    <xs:element ref="planToEstablish" use="optional"/>
    <xs:element ref="totalWorker"/>
</xs:sequence>
<xs:attribute name="farmOwnerName"  use="required"/>
<xs:attribute name="produce"  use="required"/>
<xs:attribute name="quality"  use="optional">
    <xs:simpleType>
        <xs:restriction base="xs:token">
            <xs:enumeration value="best"/>
            <xs:enumeration value="normal"/>
            <xs:enumeration value="low"/>
        </xs:restriction>
    </xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
</xs:schema>
4

1 に答える 1

0

最初の制約は、次の選択肢で達成されます。

<xs:choice minOccurs="0">
    <xs:element ref="established" use="optional"/>
    <xs:element ref="planToEstablish" use="optional"/>
</xs:choice>

2番目の制約は、セレクターが「Farm」に設定されたCountry要素のxs:unique制約、およびフィールド@farmOwnerNameと@produceで実現されます。

于 2012-11-24T09:19:36.120 に答える