Sólo probamos en VS 2013 y VS 2015. Hicieron validar clave/refkey ahora. Sin embargo, aparecieron advertencias en el nivel principal.
Pero como dijo @antiduh, todavía no comprueban el archivo xsd. Entonces realmente necesita asegúrese de que la clave/refkey en xsd es correcta.
Me tomó horas encontrar una muestra simple. Incluso el sample on MSDN no funciona. Tuve que modificarlo un poco.
En primer lugar, asegúrese de saber how to let Visual Studio validate an xml against an xsd of your choice.
A continuación, utilice la siguiente muestra xsd y xml para la validación de clave/refkey. Tenga en cuenta que la advertencia se refiere al cierre del elemento raíz, en lugar de al elemento que infringe la regla clave/ref.
El archivo xsd se ve así:
<?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>
y el archivo XML es el siguiente:
<?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-->
posible duplicado de [se puede validar xsd contra XML en VS 2010?] (Http: //stackoverflow.com/questions/8988593/can-you-validate-xsd-against-xml-in-vs-2010) – DaveShaw
¿Alguna vez encontró una respuesta a esto? Parece que esto es compatible con el XSD XSD después de todo ... –
Aún sin respuesta, estoy pensando que a medida que más y más personas voten a favor de esto, no hay respuesta. Desafortunadamente. –