Quelle est la différence entre xsd: include et xsd: import?

200

Quelle est la différence entre xsd:includeet xsd:import? Quand utiliseriez-vous l'un au lieu de l'autre, et quand cela n'aurait-il pas d'importance?

Pops
la source
Voir également la réponse sur stackoverflow.com/questions/4998063/…
Nashev

Réponses:

205

La différence fondamentale entre includeet importest que vous devez utiliser importpour faire référence aux déclarations ou définitions qui se trouvent dans un espace de noms cible différent et que vous devez utiliser includepour faire référence aux déclarations ou définitions qui sont (ou seront) dans le même espace de noms cible.

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

Sergiy Belozorov
la source
Le post de stylusstudio auquel @Pops fait référence est ici: web.archive.org/web/20140831005739/http://xsd.stylusstudio.com/…
tony19
54

Utilisez xsd: include pour importer un XSD à partir du même espace de noms ou d'aucun espace de noms.

Utilisez xsd: import pour importer un XSD à partir d'un espace de noms différent .

kjhughes
la source
19

Une autre différence est que <import>permet l'importation en se référant à un autre espace de noms. <include>autorise uniquement l'importation en se référant à un URI du schéma d'inclusion prévu. C'est certainement une autre différence que l'importation d'espace de noms inter-intra.

Par exemple, le validateur de schéma xml peut déjà connaître déjà les emplacements de tous les schémas par espace de noms . Surtout si l'on considère que la référence aux espaces de noms XML par URI peut être problématique sur différents systèmes où classpath: // ne veut rien dire, ou où http: // n'est pas autorisé, ou où certains URI ne pointent pas vers la même chose que sur un autre système.

Échantillon de code d'importations valides et non valides et comprend:

Valide:

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

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

Invalide:

<xsd:include namespace="some/name/space"/>
Des morts-vivants
la source
Je pense que vous voulez dire faire référence aux espaces de noms XML par URL de localisation plutôt que par URI . Les URI d'espace de noms (c'est-à-dire l' namespaceattribut de <xs:import>) sont toujours OK et considérés comme un identifiant (juste du texte, non interprété), tandis que schemaLocation(une URL et non un URI) doit généralement être traité pour être résolu. Et là, en effet, le schéma d'classpath: URL spécifique à Java peut ne rien signifier. Mais à côté de ce choix soigné, c'est un commentaire précieux, merci.
ddevienne
7

Cela m'intéresse également. La seule explication que j'ai trouvée est qu'elle xsd:includeest utilisée pour les inclusions intra-espace de noms, tandis que xsd:importc'est pour l'inclusion inter-espaces de noms.

Matt Luongo
la source
0

Devis direct de MSDN: élément <xsd: import>, section Remarques

La différence entre l' élément include et l' élément import est que l' élément import permet des références aux composants de schéma à partir de documents de schéma avec des espaces de noms cibles différents et l' élément include ajoute les composants de schéma à partir d'autres documents de schéma qui ont le même espace de noms cible (ou aucun espace de noms cible spécifié ) au schéma conteneur. En bref, l' élément d' importation vous permet d'utiliser des composants de schéma à partir de n'importe quel schéma; l' élément include vous permet d'ajouter tous les composants d'un schéma inclus au schéma conteneur.

Mrinmoy Sarkar
la source
-3

Utiliser xsd: include regroupe toutes les déclarations et définitions d'un document de schéma externe dans le schéma actuel.

Utilisez xsd: import pour importer un XSD à partir d'un espace de noms différent et utilisé pour créer un nouveau schéma en étendant les documents de schéma existants.

Shailej Shimpi
la source