Mike Beckerle created DAFFODIL-2916:
---------------------------------------
Summary: xs:include of no-namespace schema does not chameleon the
references properly
Key: DAFFODIL-2916
URL: https://issues.apache.org/jira/browse/DAFFODIL-2916
Project: Daffodil
Issue Type: Bug
Components: Front End
Affects Versions: 3.8.0
Reporter: Mike Beckerle
Discovered when doing experiments trying to combine smaller schemas together
into larger schemas.
We want to take a no-namespace schema, such as jpeg.dfdl.xsd (from
DFDLSchemas), and include it into a schema that gives it a target namespace.
For example suppose we create jpeg-ns.dfdl.xsd which is supposed to have a
target namespace and it includes jpeg.dfdl.xsd.
The symbols in jpeg.dfdl.xsd are supposed to take on the new namespace of the
file they are included into.
And here is what isn't working: references within jpeg.dfdl.xsd to global
elements/types/groups within that schema (which means they are referencing
global elements with no namespace) are supposed to end up referencing those
same elmeents, but in the new namespace into which the schema was included.
This doesn't happen. You get SDEs about there being no definition for
"{}empty", that is, the reference is to empty is also supposed to "chameleon"
to be a reference to the new global element in the new chameleon namespace.
Per: Definitive XML Schema, Walmsley, ISBN: 0-13-065567-8. Chapter 4 (Schema
Composition) Section 4.4.1 (Include) Example 4-4, pages 67-68.
In detail, suppose you create jpeg-ns.dfdl.xsd like this:
{code:java}
<xs:schema targetNamespace="urn:jpeg" ...>
<xs:include schemaLocation="jpeg.dfdl.xsd"/>
</xs:schema>{code}
That should be all that is required to define a namespace-qualified version of
jpeg.
Now you define a combined schema which combines jpeg and other schemas together
like this:
{code:java}
<xs:schema targetNamespace="urn:combined" xmlns:jpeg="urn:jpeg"...>
<xs:import namespace="urn:jpeg" schemaLocation="jpeg-ns.dfdl.xsd"/>
...
<xs:complexType name="combo">
<xs:choice>
<xs:element ref="jpeg:JFIF"/>
...
</xs:choice>
</xs:complexType>
</xs:schema>{code}
That *should* work. It doesn't. There's a global type defined and referenced in
jpeg.dfdl.xsd named "empty".
The SDE one gets is that "{}empty" is not found.
But the xs:include should be converting that reference from one referring to
the original no-namespace declaration to a reference to the new chameleon
namespaced insteance of that type.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)