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