sandygao    2002/11/11 11:08:45

  Modified:    java/src/org/apache/xerces/impl/xs/traversers
                        XSDSimpleTypeTraverser.java
  Log:
  Now we can process the Schema for Schemas
  (found at http://www.w3.org/2001/XMLSchema.xsd)
  without reporting any errors. Inserted special logic to permit the presence
  of the built-in Schema datatypes in this particular schema.
  
  Revision  Changes    Path
  1.19      +30 -4     
xml-xerces/java/src/org/apache/xerces/impl/xs/traversers/XSDSimpleTypeTraverser.java
  
  Index: XSDSimpleTypeTraverser.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xerces/java/src/org/apache/xerces/impl/xs/traversers/XSDSimpleTypeTraverser.java,v
  retrieving revision 1.18
  retrieving revision 1.19
  diff -u -r1.18 -r1.19
  --- XSDSimpleTypeTraverser.java       17 Jun 2002 18:41:46 -0000      1.18
  +++ XSDSimpleTypeTraverser.java       11 Nov 2002 19:08:44 -0000      1.19
  @@ -126,6 +126,9 @@
       // the factory used to query/create simple types
       private final SchemaDVFactory schemaFactory = SchemaDVFactory.getInstance();
   
  +    // whether the type being parsed is a S4S built-in type.
  +    private boolean fIsBuiltIn = false;
  +
       XSDSimpleTypeTraverser (XSDHandler handler,
                               XSAttributeChecker gAttrCheck) {
           super(handler, gAttrCheck);
  @@ -246,7 +249,12 @@
           // get base type from "base" attribute
           XSSimpleType baseValidator = null;
           if ((restriction || list) && baseTypeName != null) {
  -            baseValidator = findDTValidator(child, baseTypeName, refType, 
schemaDoc);
  +            baseValidator = findDTValidator(child, name, baseTypeName, refType, 
schemaDoc);
  +            // if its the built-in type, return null from here
  +            if (baseValidator == null && fIsBuiltIn) {
  +                fIsBuiltIn = false;
  +                return null;
  +            }
           }
   
           // get types from "memberTypes" attribute
  @@ -259,7 +267,7 @@
               // for each qname in the list
               for (int i = 0; i < size; i++) {
                   // get the type decl
  -                dv = findDTValidator(child, (QName)memberTypes.elementAt(i),
  +                dv = findDTValidator(child, name, (QName)memberTypes.elementAt(i),
                                        XSConstants.DERIVATION_UNION, schemaDoc);
                   if (dv != null) {
                       // if it's a union, expand it
  @@ -401,7 +409,9 @@
       //return XSSimpleType available for the baseTypeStr, null if not found or 
disallowed.
       // also throws an error if the base type won't allow itself to be used in this 
context.
       // REVISIT: can this code be re-used?
  -    private XSSimpleType findDTValidator(Element elm, QName baseTypeStr, short 
baseRefContext, XSDocumentInfo schemaDoc) {
  +    private XSSimpleType findDTValidator(Element elm, String refName,
  +                                         QName baseTypeStr, short baseRefContext,
  +                                         XSDocumentInfo schemaDoc) {
           if (baseTypeStr == null)
               return null;
   
  @@ -411,6 +421,12 @@
               if (baseType.getTypeCategory() != XSTypeDecl.SIMPLE_TYPE ||
                   baseType == SchemaGrammar.fAnySimpleType &&
                   baseRefContext == XSConstants.DERIVATION_RESTRICTION) {
  +                // if the base type is anySimpleType and the current type is
  +                // a S4S built-in type, return null. (not an error).
  +                if (baseType == SchemaGrammar.fAnySimpleType &&
  +                    checkBuiltIn(refName, schemaDoc.fTargetNamespace)) {
  +                    return null;
  +                }
                   reportSchemaError("st-props-correct.4.1", new 
Object[]{baseTypeStr.rawname}, elm);
                   return SchemaGrammar.fAnySimpleType;
               }
  @@ -428,6 +444,16 @@
           }
   
           return (XSSimpleType)baseType;
  +    }
  +
  +    // check whethe the type denoted by the name and namespace is a S4S
  +    // built-in type. update fIsBuiltIn at the same time.
  +    private final boolean checkBuiltIn(String name, String namespace) {
  +        if (namespace != SchemaSymbols.URI_SCHEMAFORSCHEMA)
  +            return false;
  +        if (SchemaGrammar.SG_SchemaNS.getGlobalTypeDecl(name) != null)
  +            fIsBuiltIn = true;
  +        return fIsBuiltIn;
       }
   
       // find if a datatype validator is a list or has list datatype member.
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to