Рассмотрим этот фрагмент 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>
Теперь это почти работает, т.е. языки в списке должны быть уникальными, и этот атрибут «по умолчанию» должен ссылаться на один из языков в списке. Я также получаю поддержку Intellisense для полей 'id' и 'default'. Но я бы хотел, чтобы Intellisense предлагал только языки из списка в xml-файле для поля «по умолчанию», а не все из типа availableCultures (в конце концов, они единственные допустимые). Как мне это сделать?
Почему я подозреваю, что это должно быть выполнимо? Потому что при написании вышеуказанного xsd-файла Intellisense отображал «mstns: availableCultures» в раскрывающемся списке для атрибута «type» элемента «xs: attribute».
Чего я не знаю, так это того, можно ли это сделать, используя только xsd, или мне нужно написать какой-нибудь пакет / надстройку VS.