Home » Archived » XML Schema Definition (XSD) » Problem Including schemas
Problem Including schemas [message #7187] |
Thu, 26 December 2002 11:42 |
Eclipse User |
|
|
|
Originally posted by: hayden.unicorn.com
I have encountered a problem with the references schema resolving - below
I explain the scenario:
I have 3 xsds - A.xsd, B.xsd, and C.xsd.
Here are snippets of my schemas:
A.xsd:
<xs:include schemaLocation="B.xsd"/>
<xs:include schemaLocation="C.xsd"/>
<xs:element name="car">
<xs:complexType>
<xs:sequence>
<xs:element ref="service"/>
<xs:element ref="model"/>
</xs:sequence>
</xs:complexType>
</xs:element>
B.xsd
<xs:element name="service>
<complexTYpe>
<sequence>
<element ref="id"/>
</sequence>
</complexType>
</xs:element>
C.xsd
<xs:element name="id>....
<xs:element name="model...
Now, when validating A.xsd, then the whole group of schemas is valid, even
though the element reference 'id' that is referenced in B, is defined in
C, and there in no include/import of C. this works since in A.xsd we are
including both B and C, so as a whole, we have no problems.
However, when I parse A.xsd with eclipse xsd, and I look at the
XSDElementDeclaration for 'id' in schema B, when I call
XSDElementDeclaration.getTypeDefinition() it returns null, and not the
XSDTypeDefintion for id (whether it be a complex type of simple type).
At the moment I have hacked my B.xsd to have the include statement.
Other parsers can cope with this problem, and XML Spy lets my open my
A.xsd is does not complain (but does complain when I open B.xsd)
I hope that my explanation is clear.
|
|
|
Re: Problem Including schemas [message #9498 is a reply to message #7187] |
Fri, 24 January 2003 10:52 |
Eclipse User |
|
|
|
Originally posted by: merks.ca.ibm.com
Hayden,
Sorry for the long delay answering forum questions...
In the example below, B.xsd must have an include of C.xsd in order to be
valid. Including B.xsd in A.xsd will not help to resolve the ref to "id" in
B.xsd. According to the spec (in my reading of it), for a QName to resolve,
there must be an explicit import/include/redefine directly in the .xsd file;
the "id" element simply isn't visible in B.xsd when the schema for B.xsd is
being (transitively) processed. Perhaps other processors are more tolerant of
this error, perhaps even resolving the identifier via indirect
includes/imports, but XSD is strict in this regard. And since the ref to "id"
doesn't resolve, a placeholder element is provided by XSD instead and that
placeholder doesn't have a type.
Adding the include to B.xsd is not a hack, it's required.
Hayden Marchant wrote:
> I have encountered a problem with the references schema resolving - below
> I explain the scenario:
>
> I have 3 xsds - A.xsd, B.xsd, and C.xsd.
>
> Here are snippets of my schemas:
>
> A.xsd:
>
> <xs:include schemaLocation="B.xsd"/>
> <xs:include schemaLocation="C.xsd"/>
> <xs:element name="car">
> <xs:complexType>
> <xs:sequence>
> <xs:element ref="service"/>
> <xs:element ref="model"/>
> </xs:sequence>
> </xs:complexType>
> </xs:element>
>
> B.xsd
>
> <xs:element name="service>
> <complexTYpe>
> <sequence>
> <element ref="id"/>
> </sequence>
> </complexType>
> </xs:element>
>
> C.xsd
>
> <xs:element name="id>....
>
> <xs:element name="model...
>
> Now, when validating A.xsd, then the whole group of schemas is valid, even
> though the element reference 'id' that is referenced in B, is defined in
> C, and there in no include/import of C. this works since in A.xsd we are
> including both B and C, so as a whole, we have no problems.
>
> However, when I parse A.xsd with eclipse xsd, and I look at the
> XSDElementDeclaration for 'id' in schema B, when I call
> XSDElementDeclaration.getTypeDefinition() it returns null, and not the
> XSDTypeDefintion for id (whether it be a complex type of simple type).
>
> At the moment I have hacked my B.xsd to have the include statement.
>
> Other parsers can cope with this problem, and XML Spy lets my open my
> A.xsd is does not complain (but does complain when I open B.xsd)
>
> I hope that my explanation is clear.
--
Ed Merks
|
|
|
Re: Problem Including schemas [message #564728 is a reply to message #7187] |
Fri, 24 January 2003 10:52 |
Ed Merks Messages: 33264 Registered: July 2009 |
Senior Member |
|
|
Hayden,
Sorry for the long delay answering forum questions...
In the example below, B.xsd must have an include of C.xsd in order to be
valid. Including B.xsd in A.xsd will not help to resolve the ref to "id" in
B.xsd. According to the spec (in my reading of it), for a QName to resolve,
there must be an explicit import/include/redefine directly in the .xsd file;
the "id" element simply isn't visible in B.xsd when the schema for B.xsd is
being (transitively) processed. Perhaps other processors are more tolerant of
this error, perhaps even resolving the identifier via indirect
includes/imports, but XSD is strict in this regard. And since the ref to "id"
doesn't resolve, a placeholder element is provided by XSD instead and that
placeholder doesn't have a type.
Adding the include to B.xsd is not a hack, it's required.
Hayden Marchant wrote:
> I have encountered a problem with the references schema resolving - below
> I explain the scenario:
>
> I have 3 xsds - A.xsd, B.xsd, and C.xsd.
>
> Here are snippets of my schemas:
>
> A.xsd:
>
> <xs:include schemaLocation="B.xsd"/>
> <xs:include schemaLocation="C.xsd"/>
> <xs:element name="car">
> <xs:complexType>
> <xs:sequence>
> <xs:element ref="service"/>
> <xs:element ref="model"/>
> </xs:sequence>
> </xs:complexType>
> </xs:element>
>
> B.xsd
>
> <xs:element name="service>
> <complexTYpe>
> <sequence>
> <element ref="id"/>
> </sequence>
> </complexType>
> </xs:element>
>
> C.xsd
>
> <xs:element name="id>....
>
> <xs:element name="model...
>
> Now, when validating A.xsd, then the whole group of schemas is valid, even
> though the element reference 'id' that is referenced in B, is defined in
> C, and there in no include/import of C. this works since in A.xsd we are
> including both B and C, so as a whole, we have no problems.
>
> However, when I parse A.xsd with eclipse xsd, and I look at the
> XSDElementDeclaration for 'id' in schema B, when I call
> XSDElementDeclaration.getTypeDefinition() it returns null, and not the
> XSDTypeDefintion for id (whether it be a complex type of simple type).
>
> At the moment I have hacked my B.xsd to have the include statement.
>
> Other parsers can cope with this problem, and XML Spy lets my open my
> A.xsd is does not complain (but does complain when I open B.xsd)
>
> I hope that my explanation is clear.
--
Ed Merks
Ed Merks
Professional Support: https://www.macromodeling.com/
|
|
|
Goto Forum:
Current Time: Fri Dec 27 09:06:30 GMT 2024
Powered by FUDForum. Page generated in 0.03157 seconds
|