次の XML フラグメントを検討してください。
<languages default="de-DE">
<language id="es-ES" />
<language id="de-DE" />
</languages>
およびそれを説明する xsd:
<xs:simpleType name="availableCultures" id="availableCultures">
<xs:restriction base="xs:QName">
<xs:enumeration value="en-US"/>
<xs:enumeration value="de-DE"/>
<xs:enumeration value="es-ES"/>
</xs:restriction>
</xs:simpleType>
...
<xs:element name="languages">
<xs:complexType>
<xs:sequence>
<xs:element name="language" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:attribute name="id" form="unqualified" type="mstns:availableCultures" use="required" />
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="default" form="unqualified" type="mstns:availableCultures" />
</xs:complexType>
<xs:keyref name="defaultP" refer="mstns:languageKey">
<xs:selector xpath="."/>
<xs:field xpath="@default"/>
</xs:keyref>
<xs:key name="languageKey">
<xs:selector xpath="mstns:language"/>
<xs:field xpath="@id"/>
</xs:key>
<xs:unique name="languageUnique">
<xs:selector xpath="mstns:language"/>
<xs:field xpath="@id"/>
</xs:unique>
</xs:element>
さて、これはほとんど機能します。リスト内の言語は一意であることが強制され、その「デフォルト」属性はリスト内の言語の 1 つを参照する必要があります。また、'id' フィールドと 'default' フィールドの両方で Intellisense をサポートしています。しかし、Intellisense が 'default' フィールドの xml ファイルのリストから言語のみを提案するようにしたいと思います。それ、どうやったら出来るの?
なぜこれが実行可能であると思うのですか? 上記の xsd ファイルを書き込むと、Intellisense は「xs:attribute」要素の「type」属性のドロップダウン リストに「mstns:availableCultures」を表示したためです。
私が知らないのは、これが xsd のみを使用して実行できるかどうか、または何らかの VS パッケージ/アドインを作成する必要があるかどうかです。