Только что попробовал в VS 2013 и VS 2015. Теперь они подтвердили ключ / refkey. Это показало предупреждения на родительском уровне все же.
Но, как сказал @antiduh, они все еще не проверяют файл xsd. Так что вам действительно нужно убедиться, что ключ / refkey в xsd верен .
Мне потребовались часы, чтобы найти простой образец. Даже образец на MSDN не работает. Я должен был немного изменить это.
Сначала убедитесь, что вы знаете , как позволить Visual Studio проверять xml на xsd на ваш выбор .
Затем используйте следующие примеры xsd и xml для проверки ключа / refkey. Помните, что предупреждение касается закрытия корневого элемента, а не элемента, нарушающего правило key / ref.
Файл xsd выглядит следующим образом:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema
xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="namespace1"
xmlns:r="namespace1"
elementFormDefault="qualified">
<xs:element name="root">
<xs:complexType>
<xs:sequence>
<xs:element name="A" type="r:A" maxOccurs="unbounded"/>
<xs:element name="B" type="r:B"/>
</xs:sequence>
</xs:complexType>
<xs:keyref name="dummy" refer="r:pNumKey">
<xs:selector xpath="r:A/r:part"/>
<xs:field xpath="@ref-number"/>
</xs:keyref>
<xs:key name="pNumKey">
<xs:selector xpath="r:B/r:part"/>
<xs:field xpath="@key-number"/>
</xs:key>
</xs:element>
<xs:complexType name="A">
<xs:sequence>
<xs:element name="part" maxOccurs="unbounded">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="ref-number" type="xs:integer"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="B">
<xs:sequence>
<xs:element name="part" maxOccurs="unbounded">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="key-number" type="xs:integer"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:schema>
И XML-файл выглядит так:
<?xml version="1.0" encoding="utf-8" ?>
<root xmlns="namespace1">
<A>
<!-- if the ref-number is equal to one of the key-number, the validation will pass -->
<part ref-number="1"/>
</A>
<A>
<!-- if the ref-number is not equal to one of the key-number, the validation will give error -->
<part ref-number="5"/>
</A>
<B>
<part key-number="1"/>
<part key-number="2"/>
<part key-number="3"/>
</B>
</root><!--you will see warnings here-->