microsoft - editor xml
ValidaciĆ³n XML con XSD en Visual Studio IDE (5)
Sé que he hecho esto antes, pero no está funcionando hoy, ni puedo encontrar ningún lugar que explique cómo hacerlo. Podría ser mi falta de sueño, pero sospecho gremlins.
Tengo un documento XML y un directorio lleno de XSD que lo definen. ¿Cómo configuro el Visual IDE para notificarme de fallas de validación y luego proporciono una lista inteligente de etiquetas y atributos válidos en un contexto dado?
Lo que he intentado:
- He agregado los XSD al proyecto con el documento XML.
- He agregado los XSD a la lista de esquemas XML (en el elemento de menú XML / Esquemas ...).
- Incluso he incluido los atributos schemaLocation y noNamespaceSchemaLocation en el documento XML.
Visual Studio aún no renuncia a ninguna información útil de depuración o edición. Intenté tanto en 2010 como en 2008 (lo he hecho antes en 2008, pensé)
Actualización: tuve otro desarrollador intente esto y falló para él también. Él sabe que lo ha hecho con otros documentos XML y lo hizo funcionar. Luego descargué el editor Oxygen XML y funcionó bien en los mismos archivos XML y XSD, por lo que los archivos parecen estar bien (o que Oxygen es más indulgente / flexible ...)
¿Su xsd contiene un atributo "targetNamespace" / schema / @ targetNamespace que es similar al espacio de nombres al que hace referencia en el xml?
Ejemplo:
xsd: <xs: schema .... targetNamespace = "Archivo de datos.xsd" ...>
xml: <data xmlns = "Datafile.xsd"> ...
ver también XML / XSD intellisense no funciona en Visual Studio 2010
Jim,
Necesita asociar el documento XML en Visual Studio con el archivo XSD que tiene; debería ver algo como esto en la ventana Propiedades del documento XML:
En el editor de conjunto de esquemas XML (se abre al hacer clic en los puntos suspensivos (...) en el cuadro de texto "Esquemas" en la ventana Propiedades), debe asegurarse de tener su esquema presente. Además, asegúrese de que la columna Use
para ese esquema esté habilitada; si no, haga clic en él, obtendrá una lista desplegable de opciones, elija la opción Use
con la marca de verificación verde:
Asegúrese de que la ventana Lista de errores de Visual Studio esté visible (menú Ver> Lista de errores). Esto mostrará todas las incoherencias entre las definiciones de esquema XML y XSD.
Una vez que todo esté en su lugar, el editor XML de Visual Studio debería resaltar los problemas con su XML en el editor usando squigglies azules:
No es necesario que asocie manualmente los archivos en Visual Studio: automáticamente hará coincidir un archivo XML con un archivo XSD si los tiene abiertos y tiene su espacio de nombres definido correctamente.
Para definir el espacio de nombres:
En el elemento raíz del archivo XML:
<Data xmlns=''http://yourdomain.com/yourschema.xsd''>
...
</Data>
En el elemento de esquema del archivo XSD:
<xs:schema
xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://yourdomain.com/yourschema.xsd"
xmlns:this="http://yourdomain.com/yourschema.xsd"
elementFormDefault="qualified">
...
</xs:schema>
Una nota sobre el uso de Tipos en su esquema cuando tiene un targetNamespace
Como está especificando un targetNamespace
en su esquema, cualquier referencia a tipos definidos en el esquema necesitará un prefijo con un espacio de nombres (por eso agregamos el xmlns:this
atributo en el elemento <xs:schema />
).
<!-- Define the type as normal -->
<xs:complexType name="Row">
<xs:sequence>
<xs:element name="Name" type="xs:string" minOccurs="1" maxOccurs="1" />
<xs:element name="Value" type="xs:float" minOccurs="1" maxOccurs="1" />
</xs:sequence>
</xs:complexType>
<!-- Use the type (note the "this:" prefix) -->
<xs:element name="Row" type="this:Row" minOccurs="0" maxOccurs="unbounded" />
Otro punto de falla aquí es Windows 7 "bloqueando" los archivos de esquema ... haga clic derecho en el archivo xsd en el disco, Propiedades> General y, si está bloqueado, tendrá un botón "Desbloquear". Esto estaba causando que mi validación XML fallara en VS2012.
Tenía el mismo problema, pero VS ya hacía referencia a mi esquema correctamente. Resulta que el archivo que intentaba validar no tenía una extensión de archivo ''xml''. Se agregó .xml al final de mi nombre de archivo y la validación comenzó a funcionar.