how to import XSD types into root schema?
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.
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, 2022Comments
-
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 over 12 yearsThanks a lot, this is exactly what I was looking for!
-
Line almost 7 yearsIs "tns" the same as "targetNamespace"?