xerces-j-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Mark Brucks <bru...@charter.net>
Subject Re: XSModel - namespaces for imported schema
Date Thu, 27 Aug 2009 17:25:58 GMT
Michael:

Thanks for the response.  I assumed that xs:anyType and a content type  
of mixed was the "most general" substitution if it couldn't find the  
schema.  However, I am using an entity resolver.  Here is how I  
created and configured my grammar preparser:

         grammarParser = new XMLGrammarPreparser();
          
grammarParser.registerPreparser(XMLGrammarDescription.XML_SCHEMA, null);

         grammarParser.setFeature(Constants.XERCES_FEATURE_PREFIX +  
Constants.NAMESPACE_PREFIXES_FEATURE, true);
         grammarParser.setFeature(Constants.NAMESPACES_FEATURE, true);
         grammarParser.setFeature(Constants.SCHEMA_AUGMENT_PSVI, true);
         grammarParser.setFeature(Constants.SCHEMA_ELEMENT_DEFAULT,  
true);
         grammarParser.setFeature(Constants.SCHEMA_FULL_CHECKING, true);
         grammarParser.setFeature(Constants.SCHEMA_NORMALIZED_VALUE,  
true);
         grammarParser.setFeature(Constants.SCHEMA_VALIDATION_FEATURE,  
true);
         grammarParser.setFeature(Constants.VALIDATION_FEATURE, true);

         String grammarPoolProperty0 =  
Constants.XERCES_PROPERTY_PREFIX + Constants.ENTITY_RESOLVER_PROPERTY;
         grammarParser.setProperty(grammarPoolProperty0,  
catalogResolver);

         String grammarPoolProperty = Constants.XERCES_PROPERTY_PREFIX  
+ Constants.XMLGRAMMAR_POOL_PROPERTY;
         grammarParser.setProperty(grammarPoolProperty, new  
XMLGrammarPoolImpl());

I checked my catalog resolver and was pretty sure that was right.  I  
was still worried that I had done something wrong, so I added the  
location of the second schema to the first, using the following:

            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="http://www.grs.com/WayptSchema ./ 
waypt.xsd"

The mission and waypt schemata are in the same directory, and I tried  
it with both relative and absolute paths.  Still the same problem.  Is  
it possibly something wrong with my configuration of the grammar  
preparser?

Mark


On Aug 27, 2009, at 5:09 AM, Michael Glavassevich wrote:

> Hi Mark,
>
> There's an error message that you're probably ignoring which would  
> be complaining about not being able to resolve "wp:WayptType". When  
> a type definition cannot be found Xerces recovers from this error by  
> assigning xs:anyType as the type of the element. You do have an  
> import in the first schema document but it has no schema location  
> hint (e.g. schemaLocation="file:///some/uri). Therefore the schema  
> loader would have no idea where to find the other schema document  
> unless you register an entity resolver that knows how to locate it  
> based on the namespace "http://www.grs.com/WayptSchema".
>
> Thanks.
>
> Michael Glavassevich
> XML Parser Development
> IBM Toronto Lab
> E-mail: mrglavas@ca.ibm.com
> E-mail: mrglavas@apache.org
>
> Mark Brucks <brux54@charter.net> wrote on 08/26/2009 05:50:36 PM:
>
> > I'm parsing a schema and traversing the resultant XSModel instance.
> > I'm having problems getting the correct content types and namespace
> > information for elements whose types are declared in an imported  
> schema.
> >
> > I have two schemata, the first imports the second.  A relevant
> > snippet of the first is:
> >
> > <xs:schema targetNamespace="http://www.grs.com/MissionSchema"
> >            xmlns:mis ="http://www.grs.com/MissionSchema"
> >            xmlns:wp ="http://www.grs.com/WayptSchema"
> >            xmlns:xs ="http://www.w3.org/2001/XMLSchema"
> >            elementFormDefault ="qualified"
> >            attributeFormDefault ="unqualified">
> >
> >   <xs:import namespace="http://www.grs.com/WayptSchema"/>
> >
> >   <xs:element name="mission">
> >     <xs:complexType>
> >       <xs:sequence>
> >         <xs:element name="waypt_defs">
> >           <xs:complexType>
> >             <xs:sequence>
> >               <xs:element name="waypt" type="wp:WayptType"  
> maxOccurs=
> > "unbounded"/>
> >             </xs:sequence>
> >           </xs:complexType>
> >         </xs:element>
> >   ...
> >
> > and a relevant snippet of the second is:
> >
> > <xs:schema targetNamespace="http://www.grs.com/WayptSchema"
> >            xmlns:wp ="http://www.grs.com/WayptSchema"
> >            xmlns:xs ="http://www.w3.org/2001/XMLSchema"
> >            elementFormDefault ="qualified"
> >            attributeFormDefault ="unqualified">
> >
> >   <xs:complexType name="WayptType">
> >     <xs:sequence>
> >       <xs:element name="location">
> >         <xs:complexType>
> >           <xs:attribute name="lat" type="xs:double"/>
> >           <xs:attribute name="lon" type="xs:double"/>
> >   ...
> >
> > After I parse the first schema I traverse the XSModel.  When I reach
> > the XSElementDeclaration for the element “waypt”, I get a content
> > type I don't understand.  The XSTypeDefinition is
> > XSComplexTypeDefinition, which is good.  However, the content type
> > is CONTENTTYPE_MIXED, the name is “anyType” and the namespace is
> > http://www.w3.org/2001/XMLSchema.  It would seem that it isn't
> > recognizing the imported schema. I printed out the schema namespaces
> > (returned from XSModel.getNamespaces()), and sure enough, the waypt
> > schema isn't printed.
> >
> > I'm missing something fundamental here - what is it?
> >
> > Thanks - Mark
>


Mime
View raw message