0

「implementationClass」属性を持つ親要素があります。この親要素には、デフォルト値を定義したい多くの子があります。親要素の定義は次のとおりです。

<xsd:complexType name="serviceType">
    <xsd:sequence>
        <xsd:element name="name" type="xsd:ID" />
        <xsd:element name="connection">
            <xsd:complexType>
                <xsd:attribute name="reference" type="xsd:IDREF" use="required" />
            </xsd:complexType>
        </xsd:element>
    </xsd:sequence>
    <xsd:attribute name="implementationClass" type="xsd:string" use="optional" />
</xsd:complexType>

追加の属性を持つ子要素を作成するには、「拡張機能」を使用する必要があります。デフォルト値を定義するには、「制限」を使用する必要があります。ただし、これら 2 つは相互に排他的です。

誰でもそれを行う方法を理解するのを手伝ってくれますか?

前もって感謝します

4

1 に答える 1

0

いくつかの中間タイプを介して、「拡張」と「制限」の両方の効果を達成できます。

serviceType -> serviceTypeIntermediate -> serviceTypeResult

例えば:

<xsd:complexType name="serviceTypeIntermediate">
  <xsd:complexContent>
    <xsd:extension base="serviceType">
      <xsd:sequence>
        <xsd:element name="something" type="xsd:String"/>
      <xsd:sequence>
    <xsd:extension>
  </xsd:complexContent>
</xsd:complexType>

<xsd:complexType name="serviceTypeResult">
  <xsd:complexContent>
    <xsd:restriction base="serviceTypeIntermediate">
      ...
    <xsd:restriction>
  </xsd:complexContent>
</xsd:complexType>

ただし、次の点に注意してください。

(複雑なコンテンツの)拡張は、新しい子要素 (その中で宣言されている) が最初のコンテンツにシーケンスとして追加されるように機能します。つまり、基本型ですでに宣言されている子を「拡張」することはできません。

制限では、コンテンツ モデル全体を新たに定義する必要があります。ただし、その新しいコンテンツは、基本型で定義されたものと完全に互換性がある必要があります。

于 2013-07-17T01:57:15.813 に答える