example - ¿Cómo vinculas XML a un XSD?
xs xml schema (4)
Intente schemaLocation .
<?xml version="1.0"?>
<note
xmlns="http://www.w3schools.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3schools.com note.xsd">
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don''t forget me this weekend!</body>
</note>
noNamespaceSchemaLocation es diferente. Tenga en cuenta que ambos son, de hecho, solo "sugerencias" en teoría, para un consumidor de un documento XML. Nunca me he encontrado con un procesador xml que no los haya seguido; después de todo, es una recomendación del W3C. ver http://www.w3.org/TR/xmlschema-1/
Pero, de hecho, podría salir mal, como here , pero, de nuevo, se considera un error por una razón.
Para abreviar: solo confío en eso, sin daño hasta ahora :-)
No creo que ningún procesador xml medio decente pueda ignorar esta "sugerencia" en estos días.
Las direcciones URL son siempre para unicidad, pero en algunos casos se proporcionará cierta información bajo la URL.
Me pregunto, al igual que usamos la -declaración para enlazar XML a una DTD, ¿cómo lo hacemos con XSD?
Ejemplo de MSDN:
<?xml version="1.0"?>
<Product ProductID="123"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="Product.xsd">
<ProductName>Rugby jersey</ProductName>
</Product>
¿Es el xsi: NoNamespaceSchemaLocation el que hace el truco? ¿O es esto simplemente otro espacio de nombres?
[EDITAR] Y es el
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
..line solo por darnos un espacio de nombres XML único, o también proporciona información sobre dónde se puede ubicar el esquema?
No es una pregunta estúpida, pero John Saunders tiene razón .
al igual que usamos la -decleración para enlazar XML a una DTD, ¿cómo lo hacemos con XSD?
Aquí está la esencia del problema, no puedes. Uno de los problemas con el enfoque DTD fue que el documento especificaba el mecanismo de validación y no el consumidor del documento. Después de la DTD, puede tomar un documento XML y validarlo con XSD o RELAX NG o algún otro mecanismo; están desacoplados (al menos en teoría). Cualquier enlace XSD es solo una pista y es opcional. No es posible validar un documento arbitrario .
Por lo general, solo incluyo el espacio de nombres y espero que si la persona que lo procesa se preocupa por validarlo, obtendrá el esquema y configurará su entorno de procesamiento para que pueda encontrar el XSD. He tenido un éxito limitado con xsi:schemaLocation
y dichos atributos. La mayoría de los problemas suelen estar centrados en encontrar el propio archivo XSD. Algunos procesadores quieren que se incluya la ruta, lo que es muy divertido si el XSD está en un sistema de archivos en lugar de un servidor web.
Cada procesador parece implementar la búsqueda un poco diferente. Algunos usan objetos de catálogo de esquema separados, otros requieren que cargue y adjunte esquemas por separado. A menos que proporcione el código para procesar documentos, es mejor que no incluya xsi:schemaLocation
o xsi:noNamespaceSchemaLocation
IMHO. Lo único que puede hacer su inclusión es impedir que la persona que procesa su documento coloque el esquema en la misma ubicación o encuentre alguna manera de hacer que el procesador elegido ignore o resuelva la especificación de la ubicación.
Como nota al margen, el mayor problema con el que me he encontrado fue en realidad con las DTD que se especificaron usando una declaración del SYSTEM
que se refería a "c:/somepath/doc.dtd"
. El problema era que estaba procesando los documentos en un cuadro de FreeBSD. Terminé escribiendo mi propio sistema de resolución para asignar las rutas de estilo de Windows a un sistema de archivos local, ya que no podía modificar los documentos por sí mismos y tenía que validarlos.
xsi: noNamespaceSchemaLocation y xsi: schemaLocation proporcionan sugerencias a los procesadores XML que deciden obedecer esas sugerencias. Pero son solo insinuaciones. No necesariamente hacen que su documento se valide contra el esquema.