Pops
Pops

Reputation: 30858

What's the difference between xsd:include and xsd:import?

What's the difference between xsd:include and xsd:import? When would you use one instead of the other, and when might it not matter?

Upvotes: 236

Views: 170523

Answers (6)

Zombies
Zombies

Reputation: 25912

Another difference is that <import> allows importing by referring to another namespace with the @namespace attribute, and/or the schemaLocation with the @schemaLocation attribute.

However, <include> only allows importing by referring to a URI of intended include schema with the @schemaLocation attribute, <include> does not allow the @namespace attribute.

The ability to use the @namespace attribute is definitely another difference than inter-intra namespace importing.

For example, the xml schema validator may already know the locations of all schemas by namespace. Especially considering that referring to XML namespaces by their schema URL location may be problematic on different systems (i.e. classpath:// means nothing, or where http:// isn't allowed, or where the URL doesn't point to the same thing as it does on another system.)

Code sample of valid and invalid imports and includes:

Valid:

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

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

Invalid:

<xsd:include namespace="some/name/space"/>

Upvotes: 25

Mrinmoy Sarkar
Mrinmoy Sarkar

Reputation: 45

Direct quote from MSDN: <xsd:import> Element, Remarks section

The difference between the include element and the import element is that import element allows references to schema components from schema documents with different target namespaces and the include element adds the schema components from other schema documents that have the same target namespace (or no specified target namespace) to the containing schema. In short, the import element allows you to use schema components from any schema; the include element allows you to add all the components of an included schema to the containing schema.

Upvotes: 2

Sergiy Belozorov
Sergiy Belozorov

Reputation: 6084

The fundamental difference between include and import is that you must use import to refer to declarations or definitions that are in a different target namespace and you must use include to refer to declarations or definitions that are (or will be) in the same target namespace.

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

Upvotes: 234

Shailej Shimpi
Shailej Shimpi

Reputation: 145

Use xsd:include brings all declarations and definitions of an external schema document into the current schema.

Use xsd:import to bring in an XSD from a different namespace and used to build a new schema by extending existing schema documents..

Upvotes: -2

kjhughes
kjhughes

Reputation: 111716

Use xsd:include to bring in an XSD from the same or no namespace.

Use xsd:import to bring in an XSD from a different namespace.

Upvotes: 66

Matt Luongo
Matt Luongo

Reputation: 14859

I'm interested in this as well. The only explanation I've found is that xsd:include is used for intra-namespace inclusions, while xsd:import is for inter-namespace inclusion.

Upvotes: 7

Related Questions