Qual é a diferença entre xsd: include e xsd: import?

200

Qual é a diferença entre xsd:includee xsd:import? Quando você usaria um em vez do outro e quando isso não importaria?

Pops
fonte
Consulte também a resposta em stackoverflow.com/questions/4998063/…
Nashev

Respostas:

205

A diferença fundamental entre includee importé que você deve usar importpara se referir a declarações ou definições que estão em um espaço para nome de destino diferente e deve usar includepara se referir a declarações ou definições que estão (ou serão) no mesmo espaço para nome de destino.

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

Sergiy Belozorov
fonte
A postagem do stylusstudio à qual o @Pops se refere está aqui: web.archive.org/web/20140831005739/http://xsd.stylusstudio.com/…
tony19
54

Use xsd: include para trazer um XSD do mesmo ou nenhum espaço para nome.

Use xsd: import para trazer um XSD de um espaço para nome diferente .

kjhughes
fonte
19

Outra diferença é que <import>permite importar consultando outro espaço para nome. <include>só permite importar consultando um URI do esquema de inclusão pretendido. Essa é definitivamente outra diferença do que a importação de espaço para nome intra-intra.

Por exemplo, o validador de esquema xml já pode saber os locais de todos os esquemas pelo namespace . Especialmente considerando que a referência a namespaces XML por URI pode ser problemática em sistemas diferentes onde classpath: // não significa nada, ou onde http: // não é permitido, ou onde alguns URI não apontam para a mesma coisa que em outro sistema.

Amostra de código de importações válidas e inválidas e inclui:

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"/>
Zumbis
fonte
Eu acho que você quer dizer referir-se aos namespaces XML por URLs de localização e não por URI . Os URIs de namespace (ou seja, o namespaceatributo de <xs:import>) estão sempre OK e são considerados um identificador (apenas texto, não interpretado), enquanto o schemaLocation(uma URL não um URI) normalmente deve ser processado, para ser resolvido. E, de fato, o esquema declasspath: URL específico do Java pode não significar nada. Mas, além dessa escolha, esse é um comentário valioso, obrigado.
ddevienne
7

Também estou interessado nisso. A única explicação que encontrei é que xsd:includeé usada para inclusões intra-namespace, enquanto xsd:importé para inclusão entre namespace.

Matt Luongo
fonte
0

Citação direta do MSDN: Elemento <xsd: import>, seção Observações

A diferença entre o elemento de inclusão e o elemento de importação é que o elemento de importação permite referências a componentes de esquema de documentos de esquema com diferentes espaços de nomes de destino e o elemento include inclui os componentes de esquema de outros documentos de esquema que possuem o mesmo espaço de nome de destino (ou nenhum espaço de nome de destino especificado ) para o esquema que o contém. Resumindo, o elemento import permite usar componentes de esquema de qualquer esquema; o elemento include permite adicionar todos os componentes de um esquema incluído ao esquema que o contém.

Mrinmoy Sarkar
fonte
-3

Usar xsd: include traz todas as declarações e definições de um documento de esquema externo para o esquema atual.

Use xsd: import para trazer um XSD de um espaço para nome diferente e usado para criar um novo esquema, estendendo os documentos de esquema existentes.

Shailej Shimpi
fonte