[xsd-users] Issue with includes
Boris Kolpackov
boris at codesynthesis.com
Thu Sep 28 13:19:04 EDT 2006
Hi Patrick,
Patrick Shinpaugh <shpatric at vt.edu> writes:
> I am trying to use xsd to create data binding for the x3d schema
> ( http://www.web3d.org/x3d/specifications/ ) - the 3 .xsd files. I have
> validated the schema using the w3c validator which gives the warnings
> about anyType.
I downloaded the schemas and tried to compile x3d-3.0.xsd. I got the
following error:
error: Complex type 'X3DAppearanceNode' violates the Unique Particle
Attribution rule in its components 'ProtoInstance' and 'ProtoInstance'
Did you manage to resolve this?
> As such, it appears that your program handles includes
> differently than perhaps it should - validating each file separately
> instead of as a whole.
Right. XSD tries to preserve the modularity of your schemas in the
generated code by mapping xsd:includes (and xsd:imports) to the C
preprocessor #include directives. As a result of this mapping, XSD
requires that the included schema files be self-sufficient which is
not required by the XML Schema spec as you correctly pointed out.
This is the first real-world schema where we run into this issue.
> Below is the output I get. If I remove the includes then the data
> binding will succeed (without the extensions which we also need) and
> the anyType variables are handled nicely.
>
> Is there an option to change the way includes are handled?
There is no such option at the moment. One way to address this would
be to provide an option to generate code for included schemas inline
instead of generating #include directives. We may implement this
option in the future versions of XSD.
Meantime I can suggest a couple of workarounds:
1. XSD can handle cyclic inclusion if the types in the two schemas
do not inherit from each other (e.g., type D from schema d.xsd
inherits from type B from schema b.xsd and both b.xsd and d.xsd
include each other). So the first thing to try it to xsd:include
x3d-3.0.xsd in x3d-3.0-Web3dExtensionsPrivate.xsd and/or
x3d-3.0-Web3dExtensionsPublic.xsd and see of the generated code
compiles. I do not know what you have in your extension schemas
so I cannot say whether this will work or not.
2. The second approach is to still add inclusion of x3d-3.0.xsd in
x3d-3.0-Web3dExtensionsPrivate.xsd and/or
x3d-3.0-Web3dExtensionsPublic.xsd but break the cycle by removing
inclusions from x3d-3.0.xsd. You can also rename the modified
x3d-3.0.xsd to something like x3d-3.0-base.xsd and create a new
x3d-3.0.xsd which will include all three other schemas. In other
words, you include graph will look like this:
x3d-3.0-base.xsd
x3d-3.0-Web3dExtensionsPublic.xsd includes x3d-3.0-base.xsd
x3d-3.0-Web3dExtensionsPrivate.xsd includes x3d-3.0-base.xsd
x3d-3.0.xsd: includes x3d-3.0-base.xsd, x3d-3.0-Web3dExtensionsPublic.xsd,
and x3d-3.0-Web3dExtensionsPrivate.xsd
This method will work no matter what you have in your schemas and will
result in the schema equivalent to the original (e.g., it will validate
exactly the same set of documents).
Please let me know if this works for you.
-boris
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 652 bytes
Desc: Digital signature
Url : http://codesynthesis.com/pipermail/xsd-users/attachments/20060928/5189c0f4/attachment.pgp
More information about the xsd-users
mailing list