11

最初の質問(親切にしてください!)説明:プロパティがtrueの場合、要素を持つ型が必要です。したがって、属性がtrueの場合、XML出力は次のようになります。

<Approval Approved="true">
   <By>RT</By>
   <Date>27/07/2011</Date>
</Approval>

また、承認されていない場合、XML出力は次のようになります。

<Approval Approved="false" />

XSDでこのようなものを指定することは可能ですか?

4

2 に答える 2

6

結局のところ、あなたはそれを(一種の)行うことができますが、その方法は完全に最悪です。

2 つの複雑なタイプ (承認済みタグのあるものとないもの) を作成し、ルート要素を変更して、次のように 2 つのタイプを切り替える必要がありました。

<xs:element name="ArchivedFormulation">
 <xs:complexType>
  <xs:choice>
    <xs:element name="ApprovedFormulation" type="ApprovedFormulation" />
    <xs:element name="NonApprovedFormulation" type="NonApprovedFormulation" />
  </xs:choice>
</xs:complexType>

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>

それは私が欲しかったものを私に与えました。

于 2011-07-28T10:22:02.760 に答える
1

少し単純な方法はApproved、値が true または false のいずれかである属性ではなく、Approved存在するか存在しない空の要素でブール値を通知することです。

<xs:element name="Formulation">
  <xs:complexType>
    <xs:sequence minOccurs="0">
      <xs:element ref="Approved"/>
      <xs:element ref="By"/>
      <xs:element ref="Date"/>
    </xs:sequence>
  </xs:complexType>
</xs:element>

2 つの例は次のようになります。

<Formulation/>
<Formulation>
  <Approved/>
  <By>RT</By> 
  <Date>27/07/2011</Date>
</Formulation>
于 2013-01-24T09:28:20.047 に答える