Problem: xs:choice in xs:redefine
I have a base schema in one file with the following definition:
<xs:complexType name="ODMcomplexTypeDefinition-Protocol">
<xs:sequence>
<xs:element ref="StudyEventRef"
maxOccurs="unbounded"/>
<xs:group ref="ProtocolElementExtension" minOccurs="0"
maxOccurs="unbounded"/>
</xs:sequence>
<xs:attributeGroup ref="ProtocolAttributeExtension"/>
</xs:complexType>
<!-- empty group for extensions to the Protocol element -->
<xs:group name="ProtocolElementExtension">
<xs:sequence/>
</xs:group>
<xs:element name="Protocol" type="ODMcomplexTypeDefinition-Protocol">
Now I defined an extension XML-schema (in another namespace).
The incorporation of the extension schema (TDM_Part1_extension.xsd) into the
base schema is done by:
<xs:redefine schemaLocation="ODM1-2-1.xsd">
<xs:complexType name="ODMcomplexTypeDefinition-Protocol">
<xs:complexContent>
<xs:restriction
base="ODMcomplexTypeDefinition-Protocol">
<xs:choice>
<xs:sequence>
<xs:element ref="StudyEventRef"
maxOccurs="unbounded"/>
</xs:sequence>
<xs:sequence>
<xs:element ref="tdm:TrialArm"
minOccurs="0" maxOccurs="unbounded"/>
<xs:element ref="tdm:TrialSegment" minOccurs="0"
maxOccurs="unbounded"/>
<xs:element ref="tdm:TrialElement" minOccurs="0"
maxOccurs="unbounded"/>
<xs:element ref="tdm:TrialEpoch" minOccurs="0"
maxOccurs="unbounded"/>
</xs:sequence>
</xs:choice>
<!-- keep the attributes -->
<xs:attributeGroup
ref="ProtocolAttributeExtension"/>
</xs:restriction>
</xs:complexContent>
</xs:complexType>
</xs:redefine>
What I mean to accomplish is that in the extended schema it is defined that
the element Protocol can EITHER have one or more StudyEventRef subelements
OR one zero or more of the tdm:TrialArm etc.. elements.
This seems to work fine (I can correctly validate instance files against the
schema), until I try to compile the schema with XMLBeans (v.2.2.0, Xerces
2.6.2)
In the Java code I do the following:
List sdocs = new ArrayList();
schemaInformation = new SchemaInformation();
XmlOptions xmloptions = new XmlOptions();
xmloptions.setLoadLineNumbers().setLoadMessageDigest();
xmloptions.setCompileDownloadUrls(); // allow compilation of schemas that
are imported/included using a URL
// xmloptions.setSaveNamespacesFirst(); // just trying, 30.8.2005
try {
sdocs.add(XmlObject.Factory.parse(schemaFile, xmloptions));
} catch (Exception e) {
System.err.println( schemaFile + " not loadable: " + e );
OK = false;
}
XmlObject[] schemas = (XmlObject[])sdocs.toArray(new XmlObject[0]);
//System.out.println("length of schemas = " + schemas.length); // should
give 1 if only one schema was compiled
XmlObject mySchema = schemas[0];
System.out.println("Schema validation gives : " + mySchema.validate());
This does not give any problems. The schema validates fine.
Then I try to compile ...
XmlObject[] schemas = (XmlObject[])sdocs.toArray(new XmlObject[0]);
SchemaTypeLoader sLoader = null;
Collection compErrors = new ArrayList();
XmlOptions schemaOptions = new XmlOptions();
schemaOptions.setCompileDownloadUrls(); // allow import of other schemas
using URLs
schemaOptions.setErrorListener(compErrors);
//schemaOptions.setSaveAggressiveNamespaces();
if (downloadURLs) schemaOptions.setCompileDownloadUrls();
//SchemaTypeSystem sts = null;
try {
if (schemas != null && schemas.length > 0) sts =
XmlBeans.compileXsd(schemas, sLoader, schemaOptions);
} catch (Exception e) {
...
The errors I get are:
Schema invalid:
Loading referenced file
file:/C:/Protocol_ODM/TDM_Part1/xmldsig-core-schema.xsd
Loading referenced file
file:/C:/Protocol_ODM/TDM_Part1/TDM_Part1_extension.xsd
Loading referenced file file:/C:/Protocol_ODM/TDM_Part1/TDM_Part1_ns.xsd
Loading referenced file file:/C:/Protocol_ODM/TDM_Part1/ODM1-2-1.xsd
Loading referenced file file:/C:/Protocol_ODM/TDM_Part1/xlink.xsd
Loading referenced file
file:/C:/Protocol_ODM/TDM_Part1/ODM1-2-1-foundation.xsd
C:\Protocol_ODM\TDM_Part1\TDM_Part1_extension.xsd:19:3:
error: cos-particle-restrict.2: Invalid Restriction.
The derived content model <element
name="[EMAIL PROTECTED]://www.cdisc.org/ns/odm/v1.2"> cannot restrict base
content model <choice>.
So I presume I did something wrong within the <xs:redefine>, maybe that it
is not allowed to have <xs:choice> within <xs:restriction> ?
Can someone explain one is wrong with my schema, and how it can be improved
so that what is meant to be accomplished is still OK ?
Many thanks in advance
Jozef
_________________________________________________________________
Play online games with your friends with Messenger
http://www.join.msn.com/messenger/overview
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]