2

この場合、「ref」が機能しないのはなぜですか。

<xs:complexType name="Team">
    <xs:sequence>
        <xs:element name="Name" type="xs:string"/>
        <xs:element name="Size">
            <xs:simpleType>
                <xs:restriction base="xs:integer">
                    <xs:totalDigits value="1"/>
                </xs:restriction>
            </xs:simpleType>
        </xs:element>
        <xs:element ref="Size"/>
    </xs:sequence>
</xs:complexType>

要素Sizeにはローカルスコープがありますが、ローカルで再利用できませんか?

編集:上記のケースはあまり意味がないかもしれません。以下のケースを検討してください。「サイズ」の既存の定義を再利用する方法はありません。

<xs:complexType name="Team">
    <xs:sequence>
        <xs:element name="Name" type="xs:string"/>
        <xs:element name="Size">
            <xs:simpleType>
                <xs:restriction base="xs:integer">
                    <xs:totalDigits value="1"/>
                </xs:restriction>
            </xs:simpleType>
        </xs:element>
        <xs:element name="teamLeads">
            <xs:complexType>
                <xs:sequence>
                    <xs:element ref="Size"/>
                </xs:sequence>
            </xs:complexType>
        </xs:element>
    </xs:sequence>
</xs:complexType>
4

2 に答える 2

3

トップレベルの要素のみを参照できます。

{term} ref[属性] の [実際の値] によって [解決される] (最上位の) 要素宣言。

http://www.w3.org/TR/2004/REC-xmlschema-1-20041028/structures.html#declare-element (ボックスの最後のセクションを参照)

于 2013-01-02T07:36:36.740 に答える
1

Why Does not 'ref' work in this case

同じ要素を 2 回定義しようとしているためです。ref を使用せずに name を指定しても、エラーが発生します。

次のように要素を2回宣言するのと同じくらい良いです:

例:

<xs:complexType name="Team">
    <xs:sequence>
        <xs:element name="Name" type="xs:string"/>
        <xs:element name="Size">
            <xs:simpleType>
                <xs:restriction base="xs:integer">
                    <xs:totalDigits value="1" />
                </xs:restriction>
            </xs:simpleType>
        </xs:element>
        <xs:element name="Size">
            <xs:simpleType>
                <xs:restriction base="xs:integer">
                    <xs:totalDigits value="1" />
                </xs:restriction>
            </xs:simpleType>
        </xs:element>
     </xs:sequence>
  </xs:complexType>

ComplexType には、同じタイプまたは異なるタイプの同じ名前の要素を複数回定義することはできません。 Warning : Elements with the same name and in the same scope must have the same type.

これがエラーの原因である可能性があります。メッセージは明確ではないかもしれませんが、理由は同じです。

編集:このような状況では、仕事をする maxOccurs を使用します!
ref を使用する場合、対応する要素は別の XSD (名前空間を介してインポート) にあるか、少なくとも現在の ComplexType の外にある必要があります

同じ名前で、異なる階層に複数の要素が存在する可能性があります! 違うタイプ!! XSDはこれを可能にします! そしてそれは許可しなければなりません!
そして、この名前でrefを使用する場合、どの要素を考慮する必要がありますか?? 曖昧な定義になってしまいます!ではない?
これが理由です。XSD では非グローバル要素を ref. として許可していません。現在のコードには同じ名前の複数の要素はありませんが、..を持つことができます

。 :

<xs:complexType>
  <xs:sequence>
    <xs:element name="Name" type="xs:string"/>
    <xs:element name="Size">
      <xs:simpleType>
        <xs:restriction base="xs:integer">
          <xs:totalDigits value="1" />
        </xs:restriction>
      </xs:simpleType>
    </xs:element>
    <xs:element name="something">
      <xs:complexType>
        <xs:sequence>
          <xs:element name="Size" type="xs:string"/>
        </xs:sequence>
      </xs:complexType>
    </xs:element>
    <!--<xs:element ref="Size" />-->
  </xs:sequence>
</xs:complexType>
于 2013-01-02T07:56:45.127 に答える