¿Cuál es la diferencia entre xsd: include y xsd: import?

Respuestas:

205

La diferencia fundamental entre includey importes que debe usar importpara referirse a declaraciones o definiciones que están en un espacio de nombres de destino diferente y debe usar includepara referirse a declaraciones o definiciones que están (o estarán) en el mismo espacio de nombres de destino.

Fuente: https://web.archive.org/web/20070804031046/http://xsd.stylusstudio.com/2002Jun/post08016.htm

Sergiy Belozorov
fuente
La publicación de stylusstudio a la que se refiere @Pops está aquí: web.archive.org/web/20140831005739/http://xsd.stylusstudio.com/…
tony19
54

Use xsd: include para traer un XSD desde el mismo espacio de nombres o sin este.

Use xsd: import para traer un XSD desde un espacio de nombres diferente .

kjhughes
fuente
19

Otra diferencia es que <import>permite importar haciendo referencia a otro espacio de nombres. <include>solo permite importar haciendo referencia a un URI del esquema de inclusión previsto. Esa es definitivamente otra diferencia que la importación de espacios de nombres entre intra.

Por ejemplo, el validador de esquemas xml ya puede conocer las ubicaciones de todos los esquemas por espacio de nombres . Especialmente teniendo en cuenta que referirse a los espacios de nombres XML por URI puede ser problemático en diferentes sistemas donde classpath: // no significa nada, o donde http: // no está permitido, o donde algunos URI no apuntan a lo mismo que en otro sistema

Muestra de código de importaciones válidas e inválidas e incluye:

Válido:

<xsd:import namespace="some/name/space"/>
<xsd:import schemaLocation="classpath://mine.xsd"/>

<xsd:include schemaLocation="classpath://mine.xsd"/>

Inválido:

<xsd:include namespace="some/name/space"/>
Zombis
fuente
Creo que te refieres a hacer referencia a espacios de nombres XML por URL de ubicación en lugar de por URI . Los URI de espacio de nombres (es decir, el namespaceatributo de <xs:import>) siempre están bien y se consideran como un identificador (solo texto, no interpretado), mientras que schemaLocation(una URL, no un URI) generalmente debe procesarse para resolverse. Y de hecho, el esquema declasspath: URL específico de Java puede no significar nada. Pero al lado de esta selección ordenada, este es un comentario valioso, gracias.
ddevienne
7

Estoy interesado en esto también. La única explicación que he encontrado es que xsd:includese usa para inclusiones dentro del espacio de nombres, mientras que xsd:importes para la inclusión entre espacios de nombres.

Matt Luongo
fuente
0

Presupuesto directo de MSDN: Elemento <xsd: import>, sección Comentarios

La diferencia entre el elemento de inclusión y el elemento de importación es que el elemento de importación permite referencias a componentes de esquema de documentos de esquema con diferentes espacios de nombres de destino y el elemento de inclusión agrega los componentes de esquema de otros documentos de esquema que tienen el mismo espacio de nombres de destino (o ningún espacio de nombres de destino especificado ) al esquema contenedor. En resumen, el elemento de importación le permite usar componentes de esquema de cualquier esquema; el elemento de inclusión le permite agregar todos los componentes de un esquema incluido al esquema que lo contiene.

Mrinmoy Sarkar
fuente
-3

Use xsd: include trae todas las declaraciones y definiciones de un documento de esquema externo al esquema actual.

Utilice xsd: import para incorporar un XSD desde un espacio de nombres diferente y se utiliza para crear un nuevo esquema extendiendo los documentos de esquema existentes.

Shailej Shimpi
fuente