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]