2012-03-09 15 views
8

He estado buscando la respuesta y no pude encontrar uno:clave XSD/soporte de validación intelisense keyref en Visual Studio 2010

  • ¿Hay un/soporte de validación XSD keyref clave a través de Intellisense en Visual Studio 2010?
  • Si es así, ¿cómo hacerlo funcionar?
  • En caso negativo, ¿existe una forma (incorporada) en Visual Studio para realizar la validación de claves/referencias en un XML que tenga un esquema XSD en absoluto?

Gracias!

ACTUALIZACIÓN: Tenga en cuenta que la pregunta no es sobre cómo validar un XML que tiene un archivo XSD. Estoy preguntando específicamente sobre el key/keyref intellisense/lo que sea compatible con en Visual Studio, que no parece ser agregado en absoluto.

+0

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

+2

¿Alguna vez encontró una respuesta a esto? Parece que esto es compatible con el XSD XSD después de todo ... –

+0

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. –

Respuesta

1

La funcionalidad no es actualmente compatible con VS2010, ni tampoco está en VS2012 (según el soporte técnico de MS).

Tal vez lo apoyará en futuras versiones ...

2

Visual Studio 2012 ahora es compatible con la validación de instancias de documentos XML que están sujetos a las restricciones de clave/keyref tal como se definen en un esquema de referencia.

Sin embargo, Visual Studio no proporciona ningún error para el documento de esquema en sí, cuando ese documento de esquema utiliza clave/keyref incorrectamente, independientemente de si algún documento cumple el esquema.

Específicamente, los elementos clave/keyref como se define en el esquema deben usar espacios de nombres en los estados selector XPath, de acuerdo con la siguiente SO mensaje:

https://stackoverflow.com/a/4492004/344638

Para citar:

Además, esta es una cuestión: las restricciones clave no reconocen el espacio de nombres predeterminado. Siempre debe prefijar cada parte del selector xpath con el prefijo del espacio de nombres del elemento que está buscando. Si no tiene un prefijo de espacio de nombres, difícil, tendrá que agregar uno. Esta es una limitación del estándar.

La siguiente publicación SO proporciona un ejemplo completo de un esquema que utiliza key/keyref, una instancia de documento XML y un validador manual basado en C#. El esquema y el documento XML validan correctamente en Visual Studio - Visual Studio generará errores si el documento viola las limitaciones/clave del esquema keyref:

https://stackoverflow.com/a/2866428/344638

0

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-->