how to import XSD types into root schema?

10,886

When the targetNamespace (tns) attributes of the involved XSDs are specified and the same, only xsd:include is allowed (a targetNamespace attribute cannot have empty string as its value).

However, one may include a schema (s1) without a tns from a schema (s2) that has a tns; the net effect is s1 components assume the namespace of the s2 schema. This usage is often referred to as chameleonic composition.

A reference on SO describing the difference between the two, is here.

Share:
10,886
yegor256
Author by

yegor256

Lab director at Huawei, co-founder at Zerocracy, blogger at yegor256.com, author of Elegant Objects book; architect of Zold.

Updated on June 04, 2022

Comments

  • yegor256
    yegor256 about 2 years

    This is my existing XSD schema in foo.xsd, that declares just the type:

    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" version="1.0"
      targetNamespace="foo">
      <xs:complexType name="alpha">
        <!-- skipped -->
      </xs:complexType>
    </xs:schema>
    

    This is another schema, that declares the element:

    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" version="1.0"
      targetNamespace="foo">
      <xs:import schemaLocation="foo.xsd" namespace="foo" />
      <xs:element name="RootElement" type="alpha"/>
    </xs:schema>
    

    This is what I'm getting from SAX parser in Java:

    "The namespace attribute 'foo' of an <import> element information 
    item must not be the same as the targetNamespace of the schema it exists in."
    

    What am I doing wrong?

  • yegor256
    yegor256 over 12 years
    Thanks a lot, this is exactly what I was looking for!
  • Line
    Line almost 7 years
    Is "tns" the same as "targetNamespace"?