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

6

231

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?

Crosstie answered 1/3, 2010 at 18:8 Comment(1)
See also answer at #4998563Eisteddfod
N
230

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

Nifty answered 1/3, 2010 at 18:15 Comment(1)
The stylusstudio post that @Crosstie refers to is here: web.archive.org/web/20140831005739/http://xsd.stylusstudio.com/…Kamin
L
62

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.

Lowminded answered 16/4, 2014 at 17:16 Comment(0)
B
23

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"/>
Bourse answered 10/2, 2015 at 16:6 Comment(1)
I think you mean referring to XML namespaces by location URLs rather than by URI. Namespace URIs (i.e. the namespace attribute of <xs:import>) are always OK, and considered as an identifier (just text, not interpreted), while the schemaLocation (a URL not a URI) must typically be processed, to be resolved. And there indeed, the Java-specific classpath: URL scheme may mean nothing. But beside this neat-pick, this is a valuable comment, thanks.Noggin
C
7

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.

Chilon answered 1/3, 2010 at 18:12 Comment(0)
S
1

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.

Sinuate answered 6/2, 2014 at 20:8 Comment(1)
So, what I get from that description is that import will bring in stuff you refer to only, whereas include means those who refer your XSD will be implicitly getting all the stuff from the XSD you importedSelfhelp
D
-2

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..

Dumbarton answered 14/4, 2016 at 8:58 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.