Redefine plays no role in this scenario. You are trying to restrict a content model of
StudyEventRef+ with StudyEventRef+|tdm:TrialArm.... This is not allowed. The restriction must validate a subset of the documents validated by the base type. As far as being able to validate documents ok, I think maybe the validator doesn't have access to the redefining Schema or something, validation should of course fail. Hope this helps, Radu On Fri, 2006-10-27 at 08:10 +0000, Jozef Aerts - Comp.Chem.Cons. - XML4Pharma wrote: > 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] > --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]