You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xerces.apache.org by sa...@apache.org on 2002/05/07 17:54:28 UTC

cvs commit: xml-xerces/java/src/org/apache/xerces/impl/xs/traversers XSDAbstractParticleTraverser.java XSDAbstractTraverser.java XSDAttributeGroupTraverser.java XSDAttributeTraverser.java XSDComplexTypeTraverser.java XSDElementTraverser.java XSDGroupTraverser.java XSDHandler.java

sandygao    02/05/07 08:54:28

  Modified:    java/src/org/apache/xerces/impl/xs XSAttributeDecl.java
                        XSElementDecl.java
               java/src/org/apache/xerces/impl/xs/traversers
                        XSDAbstractParticleTraverser.java
                        XSDAbstractTraverser.java
                        XSDAttributeGroupTraverser.java
                        XSDAttributeTraverser.java
                        XSDComplexTypeTraverser.java
                        XSDElementTraverser.java XSDGroupTraverser.java
                        XSDHandler.java
  Log:
  Store the enclosing complex type in element/attribute declarations
  with "local" scope.
  
  Revision  Changes    Path
  1.7       +18 -11    xml-xerces/java/src/org/apache/xerces/impl/xs/XSAttributeDecl.java
  
  Index: XSAttributeDecl.java
  ===================================================================
  RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/xs/XSAttributeDecl.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- XSAttributeDecl.java	3 Apr 2002 23:48:26 -0000	1.6
  +++ XSAttributeDecl.java	7 May 2002 15:54:27 -0000	1.7
  @@ -66,7 +66,7 @@
    *
    * @author Elena Litani, IBM
    * @author Sandy Gao, IBM
  - * @version $Id: XSAttributeDecl.java,v 1.6 2002/04/03 23:48:26 elena Exp $
  + * @version $Id: XSAttributeDecl.java,v 1.7 2002/05/07 15:54:27 sandygao Exp $
    */
   public class XSAttributeDecl {
   
  @@ -75,6 +75,11 @@
       public final static short     DEFAULT_VALUE       = 1;
       public final static short     FIXED_VALUE         = 2;
   
  +    // scopes
  +    public final static short     SCOPE_ABSENT        = 0;
  +    public final static short     SCOPE_GLOBAL        = 1;
  +    public final static short     SCOPE_LOCAL         = 2;
  +
       // the name of the attribute
       public String fName = null;
       // the target namespace of the attribute
  @@ -83,29 +88,31 @@
       public XSSimpleType fType = null;
       // value constraint type: default, fixed or !specified
       short fMiscFlags = 0;
  +    // scope
  +    short fScope = SCOPE_ABSENT;
  +    // enclosing complex type, when the scope is local
  +    XSComplexTypeDecl fEnclosingCT = null;
       // value constraint value
       public ValidatedInfo fDefault = null;
   
  -    private static final short CONSTRAINT_MASK = 3;
  -    private static final short GLOBAL          = 4;
  -
       // methods to get/set misc flag
   
       public short getConstraintType() {
  -        return(short)(fMiscFlags & CONSTRAINT_MASK);
  +        return  fMiscFlags;
       }
       public boolean isGlobal() {
  -        return((fMiscFlags & GLOBAL) != 0);
  +        return fScope == SCOPE_GLOBAL;
       }
   
       public void setConstraintType(short constraintType) {
  -        // first clear the bits
  -        fMiscFlags ^= (fMiscFlags & CONSTRAINT_MASK);
  -        // then set the proper one
  -        fMiscFlags |= (constraintType & CONSTRAINT_MASK);
  +        fMiscFlags = constraintType;
       }
       public void setIsGlobal() {
  -        fMiscFlags |= GLOBAL;
  +        fScope = SCOPE_GLOBAL;
  +    }
  +    public void setIsLocal(XSComplexTypeDecl enclosingCT) {
  +        fScope = SCOPE_LOCAL;
  +        fEnclosingCT = enclosingCT;
       }
   
       public void reset(){
  
  
  
  1.8       +16 -4     xml-xerces/java/src/org/apache/xerces/impl/xs/XSElementDecl.java
  
  Index: XSElementDecl.java
  ===================================================================
  RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/xs/XSElementDecl.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- XSElementDecl.java	3 Apr 2002 23:48:26 -0000	1.7
  +++ XSElementDecl.java	7 May 2002 15:54:27 -0000	1.8
  @@ -66,7 +66,7 @@
    *
    * @author Elena Litani, IBM
    * @author Sandy Gao, IBM
  - * @version $Id: XSElementDecl.java,v 1.7 2002/04/03 23:48:26 elena Exp $
  + * @version $Id: XSElementDecl.java,v 1.8 2002/05/07 15:54:27 sandygao Exp $
    */
   public class XSElementDecl {
   
  @@ -75,6 +75,11 @@
       public final static short     DEFAULT_VALUE       = 1;
       public final static short     FIXED_VALUE         = 2;
   
  +    // scopes
  +    public final static short     SCOPE_ABSENT        = 0;
  +    public final static short     SCOPE_GLOBAL        = 1;
  +    public final static short     SCOPE_LOCAL         = 2;
  +
       // name of the element
       public String fName = null;
       // target namespace of the element
  @@ -83,6 +88,10 @@
       public XSTypeDecl fType = null;
       // misc flag of the element: nillable/abstract/fixed
       short fMiscFlags = 0;
  +    // scope
  +    short fScope = SCOPE_ABSENT;
  +    // enclosing complex type, when the scope is local
  +    XSComplexTypeDecl fEnclosingCT = null;
       // block set (disallowed substitutions) of the element
       public short fBlock = SchemaSymbols.EMPTY_SET;
       // final set (substitution group exclusions) of the element
  @@ -99,7 +108,6 @@
       private static final short CONSTRAINT_MASK = 3;
       private static final short NILLABLE        = 4;
       private static final short ABSTRACT        = 8;
  -    private static final short GLOBAL          = 16;
   
       // methods to get/set misc flag
   
  @@ -113,7 +121,7 @@
           return ((fMiscFlags & ABSTRACT) != 0);
       }
       public boolean isGlobal() {
  -        return ((fMiscFlags & GLOBAL) != 0);
  +        return fScope == SCOPE_GLOBAL;
       }
   
       public void setConstraintType(short constraintType) {
  @@ -129,7 +137,11 @@
           fMiscFlags |= ABSTRACT;
       }
       public void setIsGlobal() {
  -        fMiscFlags |= GLOBAL;
  +        fScope = SCOPE_GLOBAL;
  +    }
  +    public void setIsLocal(XSComplexTypeDecl enclosingCT) {
  +        fScope = SCOPE_LOCAL;
  +        fEnclosingCT = enclosingCT;
       }
   
       public void addIDConstaint(IdentityConstraint idc) {
  
  
  
  1.9       +16 -11    xml-xerces/java/src/org/apache/xerces/impl/xs/traversers/XSDAbstractParticleTraverser.java
  
  Index: XSDAbstractParticleTraverser.java
  ===================================================================
  RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/xs/traversers/XSDAbstractParticleTraverser.java,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- XSDAbstractParticleTraverser.java	26 Apr 2002 22:03:43 -0000	1.8
  +++ XSDAbstractParticleTraverser.java	7 May 2002 15:54:27 -0000	1.9
  @@ -61,6 +61,7 @@
   import org.apache.xerces.impl.xs.SchemaSymbols;
   import org.apache.xerces.impl.xs.XSParticleDecl;
   import org.apache.xerces.impl.xs.XSModelGroup;
  +import org.apache.xerces.impl.xs.XSComplexTypeDecl;
   import org.apache.xerces.util.DOMUtil;
   import org.apache.xerces.impl.xs.util.XInt;
   import org.w3c.dom.Element;
  @@ -68,7 +69,7 @@
   /**
    * @author Elena Litani, IBM
    * @author Sandy Gao, IBM
  - * @version $Id: XSDAbstractParticleTraverser.java,v 1.8 2002/04/26 22:03:43 sandygao Exp $
  + * @version $Id: XSDAbstractParticleTraverser.java,v 1.9 2002/05/07 15:54:27 sandygao Exp $
    */
   abstract class XSDAbstractParticleTraverser extends XSDAbstractTraverser {
   
  @@ -91,7 +92,8 @@
       XSParticleDecl traverseAll(Element allDecl,
                                  XSDocumentInfo schemaDoc,
                                  SchemaGrammar grammar,
  -                               int allContextFlags) {
  +                               int allContextFlags,
  +                               XSComplexTypeDecl enclosingCT) {
   
           // General Attribute Checking
   
  @@ -117,7 +119,7 @@
   
               // Only elements are allowed in <all>
               if (childName.equals(SchemaSymbols.ELT_ELEMENT)) {
  -                particle = fSchemaHandler.fElementTraverser.traverseLocal(child, schemaDoc, grammar, PROCESSING_ALL_EL);
  +                particle = fSchemaHandler.fElementTraverser.traverseLocal(child, schemaDoc, grammar, PROCESSING_ALL_EL, enclosingCT);
               }
               else {
                   Object[] args = {"all", "(annotation?, element*)"};
  @@ -180,9 +182,10 @@
       XSParticleDecl traverseSequence(Element seqDecl,
                                       XSDocumentInfo schemaDoc,
                                       SchemaGrammar grammar,
  -                                    int allContextFlags) {
  +                                    int allContextFlags,
  +                                    XSComplexTypeDecl enclosingCT) {
   
  -        return traverseSeqChoice(seqDecl, schemaDoc, grammar, allContextFlags, false);
  +        return traverseSeqChoice(seqDecl, schemaDoc, grammar, allContextFlags, false, enclosingCT);
       }
   
       /**
  @@ -203,9 +206,10 @@
       XSParticleDecl traverseChoice(Element choiceDecl,
                                     XSDocumentInfo schemaDoc,
                                     SchemaGrammar grammar,
  -                                  int allContextFlags) {
  +                                  int allContextFlags,
  +                                  XSComplexTypeDecl enclosingCT) {
   
  -        return traverseSeqChoice (choiceDecl, schemaDoc, grammar, allContextFlags, true);
  +        return traverseSeqChoice (choiceDecl, schemaDoc, grammar, allContextFlags, true, enclosingCT);
       }
   
       /**
  @@ -221,7 +225,8 @@
                                                XSDocumentInfo schemaDoc,
                                                SchemaGrammar grammar,
                                                int allContextFlags,
  -                                             boolean choice) {
  +                                             boolean choice,
  +                                             XSComplexTypeDecl enclosingCT) {
   
           // General Attribute Checking
           Object[] attrValues = fAttrChecker.checkAttributes(decl, false, schemaDoc);
  @@ -245,7 +250,7 @@
   
               childName = DOMUtil.getLocalName(child);
               if (childName.equals(SchemaSymbols.ELT_ELEMENT)) {
  -                particle = fSchemaHandler.fElementTraverser.traverseLocal(child, schemaDoc, grammar, NOT_ALL_CONTEXT);
  +                particle = fSchemaHandler.fElementTraverser.traverseLocal(child, schemaDoc, grammar, NOT_ALL_CONTEXT, enclosingCT);
               }
               else if (childName.equals(SchemaSymbols.ELT_GROUP)) {
                   particle = fSchemaHandler.fGroupTraverser.traverseLocal(child, schemaDoc, grammar);
  @@ -261,10 +266,10 @@
   
               }
               else if (childName.equals(SchemaSymbols.ELT_CHOICE)) {
  -                particle = traverseChoice(child, schemaDoc, grammar, NOT_ALL_CONTEXT);
  +                particle = traverseChoice(child, schemaDoc, grammar, NOT_ALL_CONTEXT, enclosingCT);
               }
               else if (childName.equals(SchemaSymbols.ELT_SEQUENCE)) {
  -                particle = traverseSequence(child, schemaDoc, grammar, NOT_ALL_CONTEXT);
  +                particle = traverseSequence(child, schemaDoc, grammar, NOT_ALL_CONTEXT, enclosingCT);
               }
               else if (childName.equals(SchemaSymbols.ELT_ANY)) {
                   particle = fSchemaHandler.fWildCardTraverser.traverseAny(child, schemaDoc, grammar);
  
  
  
  1.16      +7 -3      xml-xerces/java/src/org/apache/xerces/impl/xs/traversers/XSDAbstractTraverser.java
  
  Index: XSDAbstractTraverser.java
  ===================================================================
  RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/xs/traversers/XSDAbstractTraverser.java,v
  retrieving revision 1.15
  retrieving revision 1.16
  diff -u -r1.15 -r1.16
  --- XSDAbstractTraverser.java	4 Apr 2002 18:36:26 -0000	1.15
  +++ XSDAbstractTraverser.java	7 May 2002 15:54:27 -0000	1.16
  @@ -72,6 +72,7 @@
   import org.apache.xerces.impl.xs.XSAttributeUse;
   import org.apache.xerces.impl.xs.XSWildcardDecl;
   import org.apache.xerces.impl.xs.XSTypeDecl;
  +import org.apache.xerces.impl.xs.XSComplexTypeDecl;
   import org.apache.xerces.impl.xs.XSParticleDecl;
   import org.apache.xerces.xni.QName;
   import org.apache.xerces.util.SymbolTable;
  @@ -92,7 +93,7 @@
    * @author Rahul Srivastava, Sun Microsystems Inc.
    * @author Neeraj Bajaj, Sun Microsystems Inc.
    *
  - * @version $Id: XSDAbstractTraverser.java,v 1.15 2002/04/04 18:36:26 sandygao Exp $
  + * @version $Id: XSDAbstractTraverser.java,v 1.16 2002/05/07 15:54:27 sandygao Exp $
    */
   abstract class XSDAbstractTraverser {
   
  @@ -399,7 +400,8 @@
       // This method will return the first non-attribute/attrgrp found
       //
       Element traverseAttrsAndAttrGrps(Element firstAttr, XSAttributeGroupDecl attrGrp,
  -                                     XSDocumentInfo schemaDoc, SchemaGrammar grammar ) {
  +                                     XSDocumentInfo schemaDoc, SchemaGrammar grammar,
  +                                     XSComplexTypeDecl enclosingCT) {
   
           Element child=null;
           XSAttributeGroupDecl tempAttrGrp = null;
  @@ -410,7 +412,9 @@
               childName = DOMUtil.getLocalName(child);
               if (childName.equals(SchemaSymbols.ELT_ATTRIBUTE)) {
                   tempAttrUse = fSchemaHandler.fAttributeTraverser.traverseLocal(child,
  -                                                                               schemaDoc, grammar);
  +                                                                               schemaDoc,
  +                                                                               grammar,
  +                                                                               enclosingCT);
                   if (tempAttrUse == null) break;
                   if (attrGrp.getAttributeUse(tempAttrUse.fAttrDecl.fTargetNamespace,
                                               tempAttrUse.fAttrDecl.fName)==null) {
  
  
  
  1.7       +2 -2      xml-xerces/java/src/org/apache/xerces/impl/xs/traversers/XSDAttributeGroupTraverser.java
  
  Index: XSDAttributeGroupTraverser.java
  ===================================================================
  RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/xs/traversers/XSDAttributeGroupTraverser.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- XSDAttributeGroupTraverser.java	15 Feb 2002 22:08:48 -0000	1.6
  +++ XSDAttributeGroupTraverser.java	7 May 2002 15:54:27 -0000	1.7
  @@ -77,7 +77,7 @@
    * @author Rahul Srivastava, Sun Microsystems Inc.
    * @author Sandy Gao, IBM
    *
  - * @version $Id: XSDAttributeGroupTraverser.java,v 1.6 2002/02/15 22:08:48 sandygao Exp $
  + * @version $Id: XSDAttributeGroupTraverser.java,v 1.7 2002/05/07 15:54:27 sandygao Exp $
    */
   class XSDAttributeGroupTraverser extends XSDAbstractTraverser {
   
  @@ -165,7 +165,7 @@
           // Traverse the attribute and attribute group elements and fill in the 
           // attributeGroup structure
   
  -        Element nextNode = traverseAttrsAndAttrGrps(child, attrGrp, schemaDoc, grammar);
  +        Element nextNode = traverseAttrsAndAttrGrps(child, attrGrp, schemaDoc, grammar, null);
           if (nextNode!=null) {
               // An invalid element was found...
               Object[] args = new Object [] {nameAttr, DOMUtil.getLocalName(nextNode)};
  
  
  
  1.14      +25 -19    xml-xerces/java/src/org/apache/xerces/impl/xs/traversers/XSDAttributeTraverser.java
  
  Index: XSDAttributeTraverser.java
  ===================================================================
  RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/xs/traversers/XSDAttributeTraverser.java,v
  retrieving revision 1.13
  retrieving revision 1.14
  diff -u -r1.13 -r1.14
  --- XSDAttributeTraverser.java	12 Apr 2002 12:30:31 -0000	1.13
  +++ XSDAttributeTraverser.java	7 May 2002 15:54:27 -0000	1.14
  @@ -68,6 +68,7 @@
   import org.apache.xerces.impl.xs.XSAttributeUse;
   import org.apache.xerces.impl.xs.XSElementDecl;
   import org.apache.xerces.impl.xs.XSTypeDecl;
  +import org.apache.xerces.impl.xs.XSComplexTypeDecl;
   import org.apache.xerces.xni.QName;
   import org.apache.xerces.util.DOMUtil;
   import org.apache.xerces.util.SymbolTable;
  @@ -93,7 +94,7 @@
    *
    * @author Sandy Gao, IBM
    * @author Neeraj Bajaj, Sun Microsystems, inc.
  - * @version $Id: XSDAttributeTraverser.java,v 1.13 2002/04/12 12:30:31 sandygao Exp $
  + * @version $Id: XSDAttributeTraverser.java,v 1.14 2002/05/07 15:54:27 sandygao Exp $
    */
   class XSDAttributeTraverser extends XSDAbstractTraverser {
   
  @@ -104,7 +105,8 @@
   
       protected XSAttributeUse traverseLocal(Element attrDecl,
                                              XSDocumentInfo schemaDoc,
  -                                           SchemaGrammar grammar) {
  +                                           SchemaGrammar grammar,
  +                                           XSComplexTypeDecl enclosingCT) {
   
           // General Attribute Checking
           Object[] attrValues = fAttrChecker.checkAttributes(attrDecl, false, schemaDoc);
  @@ -136,7 +138,7 @@
                   attribute = null;
               }
           } else {
  -            attribute = traverseNamedAttr(attrDecl, attrValues, schemaDoc, grammar, false);
  +            attribute = traverseNamedAttr(attrDecl, attrValues, schemaDoc, grammar, false, enclosingCT);
           }
   
           // get 'value constraint'
  @@ -152,7 +154,7 @@
           XSAttributeUse attrUse = null;
           if (attribute != null) {
               if (fSchemaHandler.fDeclPool !=null) {
  -                attrUse = fSchemaHandler.fDeclPool.getAttributeUse();            
  +                attrUse = fSchemaHandler.fDeclPool.getAttributeUse();
               } else {
                   attrUse = new XSAttributeUse();
               }
  @@ -215,14 +217,10 @@
   
           // General Attribute Checking
           Object[] attrValues = fAttrChecker.checkAttributes(attrDecl, true, schemaDoc);
  -
  -        XSAttributeDecl attribute = traverseNamedAttr(attrDecl, attrValues, schemaDoc, grammar, true);
  +        XSAttributeDecl attribute = traverseNamedAttr(attrDecl, attrValues, schemaDoc, grammar, true, null);
           fAttrChecker.returnAttrArray(attrValues, schemaDoc);
  -
  -        if (attribute != null)
  -            attribute.setIsGlobal();
  -
           return attribute;
  +
       }
   
       /**
  @@ -239,7 +237,8 @@
                                         Object[] attrValues,
                                         XSDocumentInfo schemaDoc,
                                         SchemaGrammar grammar,
  -                                      boolean isGlobal) {
  +                                      boolean isGlobal,
  +                                      XSComplexTypeDecl enclosingCT) {
   
           String  defaultAtt = (String) attrValues[XSAttributeChecker.ATTIDX_DEFAULT];
           String  fixedAtt   = (String) attrValues[XSAttributeChecker.ATTIDX_FIXED];
  @@ -250,7 +249,7 @@
           // Step 1: get declaration information
           XSAttributeDecl attribute = null;
           if (fSchemaHandler.fDeclPool !=null) {
  -            attribute = fSchemaHandler.fDeclPool.getAttributeDecl();            
  +            attribute = fSchemaHandler.fDeclPool.getAttributeDecl();
           } else {
               attribute = new XSAttributeDecl();
           }
  @@ -262,16 +261,23 @@
           // get 'target namespace'
           if (isGlobal) {
               attribute.fTargetNamespace = schemaDoc.fTargetNamespace;
  -        } else if (formAtt != null) {
  -            if (formAtt.intValue() == SchemaSymbols.FORM_QUALIFIED)
  +            attribute.setIsGlobal();
  +        }
  +        else {
  +            if (enclosingCT != null)
  +                attribute.setIsLocal(enclosingCT);
  +            if (formAtt != null) {
  +                if (formAtt.intValue() == SchemaSymbols.FORM_QUALIFIED)
  +                    attribute.fTargetNamespace = schemaDoc.fTargetNamespace;
  +                else
  +                    attribute.fTargetNamespace = null;
  +            } else if (schemaDoc.fAreLocalAttributesQualified) {
                   attribute.fTargetNamespace = schemaDoc.fTargetNamespace;
  -            else
  +            } else {
                   attribute.fTargetNamespace = null;
  -        } else if (schemaDoc.fAreLocalAttributesQualified) {
  -            attribute.fTargetNamespace = schemaDoc.fTargetNamespace;
  -        } else {
  -            attribute.fTargetNamespace = null;
  +            }
           }
  +
           // get 'value constraint'
           // for local named attribute, value constraint is absent
           if (isGlobal) {
  
  
  
  1.19      +7 -7      xml-xerces/java/src/org/apache/xerces/impl/xs/traversers/XSDComplexTypeTraverser.java
  
  Index: XSDComplexTypeTraverser.java
  ===================================================================
  RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/xs/traversers/XSDComplexTypeTraverser.java,v
  retrieving revision 1.18
  retrieving revision 1.19
  diff -u -r1.18 -r1.19
  --- XSDComplexTypeTraverser.java	26 Apr 2002 22:03:43 -0000	1.18
  +++ XSDComplexTypeTraverser.java	7 May 2002 15:54:27 -0000	1.19
  @@ -92,7 +92,7 @@
    *            ((group | all | choice | sequence)?,
    *            ((attribute | attributeGroup)*, anyAttribute?))))
    * </complexType>
  - * @version $Id: XSDComplexTypeTraverser.java,v 1.18 2002/04/26 22:03:43 sandygao Exp $
  + * @version $Id: XSDComplexTypeTraverser.java,v 1.19 2002/05/07 15:54:27 sandygao Exp $
    */
   
   class  XSDComplexTypeTraverser extends XSDAbstractParticleTraverser {
  @@ -486,7 +486,7 @@
                                attrNode);
                   }
                   Element node=traverseAttrsAndAttrGrps(attrNode,typeInfo.fAttrGrp,
  -                                                      schemaDoc,grammar);
  +                                                      schemaDoc,grammar,typeInfo);
                   if (node!=null) {
                       throw new ComplexTypeRecoverableError("src-ct.0.1",
                                new Object[]{typeInfo.fName,DOMUtil.getLocalName(node)},
  @@ -521,7 +521,7 @@
                                                             attrNode);
                   }
                   Element node=traverseAttrsAndAttrGrps(attrNode,typeInfo.fAttrGrp,
  -                                                      schemaDoc,grammar);
  +                                                      schemaDoc,grammar,typeInfo);
   
                   if (node!=null) {
                       throw new ComplexTypeRecoverableError("src-ct.0.1",
  @@ -836,17 +836,17 @@
               }
               else if (childName.equals(SchemaSymbols.ELT_SEQUENCE)) {
                   particle = traverseSequence(complexContentChild,schemaDoc,grammar,
  -                                            NOT_ALL_CONTEXT);
  +                                            NOT_ALL_CONTEXT,typeInfo);
                   attrNode = DOMUtil.getNextSiblingElement(complexContentChild);
               }
               else if (childName.equals(SchemaSymbols.ELT_CHOICE)) {
                   particle = traverseChoice(complexContentChild,schemaDoc,grammar,
  -                                          NOT_ALL_CONTEXT);
  +                                          NOT_ALL_CONTEXT,typeInfo);
                   attrNode = DOMUtil.getNextSiblingElement(complexContentChild);
               }
               else if (childName.equals(SchemaSymbols.ELT_ALL)) {
                   particle = traverseAll(complexContentChild,schemaDoc,grammar,
  -                                       PROCESSING_ALL_GP);
  +                                       PROCESSING_ALL_GP,typeInfo);
                   attrNode = DOMUtil.getNextSiblingElement(complexContentChild);
               }
               else {
  @@ -880,7 +880,7 @@
                                                         attrNode);
               }
               Element node =
  -            traverseAttrsAndAttrGrps(attrNode,typeInfo.fAttrGrp,schemaDoc,grammar);
  +            traverseAttrsAndAttrGrps(attrNode,typeInfo.fAttrGrp,schemaDoc,grammar,typeInfo);
               if (node!=null) {
                   throw new ComplexTypeRecoverableError("src-ct.0.1",
                                                         new Object[]{typeInfo.fName,DOMUtil.getLocalName(node)},
  
  
  
  1.16      +33 -27    xml-xerces/java/src/org/apache/xerces/impl/xs/traversers/XSDElementTraverser.java
  
  Index: XSDElementTraverser.java
  ===================================================================
  RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/xs/traversers/XSDElementTraverser.java,v
  retrieving revision 1.15
  retrieving revision 1.16
  diff -u -r1.15 -r1.16
  --- XSDElementTraverser.java	3 Apr 2002 23:48:27 -0000	1.15
  +++ XSDElementTraverser.java	7 May 2002 15:54:27 -0000	1.16
  @@ -97,7 +97,7 @@
    *
    * @author Sandy Gao, IBM
    *
  - * @version $Id: XSDElementTraverser.java,v 1.15 2002/04/03 23:48:27 elena Exp $
  + * @version $Id: XSDElementTraverser.java,v 1.16 2002/05/07 15:54:27 sandygao Exp $
    */
   class XSDElementTraverser extends XSDAbstractTraverser {
   
  @@ -129,18 +129,19 @@
       XSParticleDecl traverseLocal(Element elmDecl,
                                    XSDocumentInfo schemaDoc,
                                    SchemaGrammar grammar,
  -                                 int allContextFlags) {
  +                                 int allContextFlags,
  +                                 XSComplexTypeDecl enclosingCT) {
   
           XSParticleDecl particle = null;
           if (fSchemaHandler.fDeclPool !=null) {
  -            particle = fSchemaHandler.fDeclPool.getParticleDecl();            
  -        } else {        
  +            particle = fSchemaHandler.fDeclPool.getParticleDecl();
  +        } else {
               particle = new XSParticleDecl();
           }
           if(fDeferTraversingLocalElements) {
  -            fSchemaHandler.fillInLocalElemInfo(elmDecl, schemaDoc, allContextFlags, particle);
  +            fSchemaHandler.fillInLocalElemInfo(elmDecl, schemaDoc, allContextFlags, enclosingCT, particle);
           } else {
  -            traverseLocal(particle, elmDecl, schemaDoc, grammar, allContextFlags);
  +            traverseLocal(particle, elmDecl, schemaDoc, grammar, allContextFlags, enclosingCT);
           }
   
           return particle;
  @@ -154,10 +155,12 @@
        *
        * @param  index
        */
  -    protected void traverseLocal(XSParticleDecl particle, Element elmDecl,
  -                               XSDocumentInfo schemaDoc,
  -                               SchemaGrammar grammar,
  -                               int allContextFlags) {
  +    protected void traverseLocal(XSParticleDecl particle,
  +                                 Element elmDecl,
  +                                 XSDocumentInfo schemaDoc,
  +                                 SchemaGrammar grammar,
  +                                 int allContextFlags,
  +                                 XSComplexTypeDecl enclosingCT) {
   
           // General Attribute Checking
           Object[] attrValues = fAttrChecker.checkAttributes(elmDecl, false, schemaDoc);
  @@ -188,7 +191,7 @@
                   element = null;
               }
           } else {
  -            element = traverseNamedElement(elmDecl, attrValues, schemaDoc, grammar, false);
  +            element = traverseNamedElement(elmDecl, attrValues, schemaDoc, grammar, false, enclosingCT);
           }
   
           particle.fMinOccurs = minAtt.intValue();
  @@ -219,14 +222,10 @@
   
           // General Attribute Checking
           Object[] attrValues = fAttrChecker.checkAttributes(elmDecl, true, schemaDoc);
  -        XSElementDecl element = traverseNamedElement(elmDecl, attrValues, schemaDoc, grammar, true);
  +        XSElementDecl element = traverseNamedElement(elmDecl, attrValues, schemaDoc, grammar, true, null);
           fAttrChecker.returnAttrArray(attrValues, schemaDoc);
  -
  -        // set the scope of the element as global
  -        if (element != null)
  -            element.setIsGlobal();
  -
           return element;
  +
       }
   
       /**
  @@ -243,7 +242,8 @@
                                          Object[] attrValues,
                                          XSDocumentInfo schemaDoc,
                                          SchemaGrammar grammar,
  -                                       boolean isGlobal) {
  +                                       boolean isGlobal,
  +                                       XSComplexTypeDecl enclosingCT) {
   
           Boolean abstractAtt  = (Boolean) attrValues[XSAttributeChecker.ATTIDX_ABSTRACT];
           XInt    blockAtt     = (XInt)    attrValues[XSAttributeChecker.ATTIDX_BLOCK];
  @@ -257,11 +257,11 @@
           QName   typeAtt      = (QName)   attrValues[XSAttributeChecker.ATTIDX_TYPE];
   
           // Step 1: get declaration information
  -        
  +
           XSElementDecl element = null;
           if (fSchemaHandler.fDeclPool !=null) {
               element = fSchemaHandler.fDeclPool.getElementDecl();
  -        } else {        
  +        } else {
               element = new XSElementDecl();
           }
           // get 'name'
  @@ -271,16 +271,22 @@
           // get 'target namespace'
           if (isGlobal) {
               element.fTargetNamespace = schemaDoc.fTargetNamespace;
  +            element.setIsGlobal();
           }
  -        else if (formAtt != null) {
  -            if (formAtt.intValue() == SchemaSymbols.FORM_QUALIFIED)
  +        else {
  +            if (enclosingCT != null)
  +                element.setIsLocal(enclosingCT);
  +
  +            if (formAtt != null) {
  +                if (formAtt.intValue() == SchemaSymbols.FORM_QUALIFIED)
  +                    element.fTargetNamespace = schemaDoc.fTargetNamespace;
  +                else
  +                    element.fTargetNamespace = null;
  +            } else if (schemaDoc.fAreLocalElementsQualified) {
                   element.fTargetNamespace = schemaDoc.fTargetNamespace;
  -            else
  +            } else {
                   element.fTargetNamespace = null;
  -        } else if (schemaDoc.fAreLocalElementsQualified) {
  -            element.fTargetNamespace = schemaDoc.fTargetNamespace;
  -        } else {
  -            element.fTargetNamespace = null;
  +            }
           }
   
           // get 'block', 'final', 'nillable', 'abstract'
  
  
  
  1.12      +4 -4      xml-xerces/java/src/org/apache/xerces/impl/xs/traversers/XSDGroupTraverser.java
  
  Index: XSDGroupTraverser.java
  ===================================================================
  RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/xs/traversers/XSDGroupTraverser.java,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- XSDGroupTraverser.java	26 Apr 2002 22:03:43 -0000	1.11
  +++ XSDGroupTraverser.java	7 May 2002 15:54:27 -0000	1.12
  @@ -78,7 +78,7 @@
    * @author Rahul Srivastava, Sun Microsystems Inc.
    * @author Elena Litani, IBM
    * @author Lisa Martin,  IBM
  - * @version $Id: XSDGroupTraverser.java,v 1.11 2002/04/26 22:03:43 sandygao Exp $
  + * @version $Id: XSDGroupTraverser.java,v 1.12 2002/05/07 15:54:27 sandygao Exp $
    */
   class  XSDGroupTraverser extends XSDAbstractParticleTraverser {
   
  @@ -178,11 +178,11 @@
                                     new Object[]{"group (global)", "(annotation?, (all | choice | sequence))"},
                                     elmNode);
               } else if (childName.equals(SchemaSymbols.ELT_ALL)) {
  -                particle = traverseAll(l_elmChild, schemaDoc, grammar, CHILD_OF_GROUP);
  +                particle = traverseAll(l_elmChild, schemaDoc, grammar, CHILD_OF_GROUP, null);
               } else if (childName.equals(SchemaSymbols.ELT_CHOICE)) {
  -                particle = traverseChoice(l_elmChild, schemaDoc, grammar, CHILD_OF_GROUP);
  +                particle = traverseChoice(l_elmChild, schemaDoc, grammar, CHILD_OF_GROUP, null);
               } else if (childName.equals(SchemaSymbols.ELT_SEQUENCE)) {
  -                particle = traverseSequence(l_elmChild, schemaDoc, grammar, CHILD_OF_GROUP);
  +                particle = traverseSequence(l_elmChild, schemaDoc, grammar, CHILD_OF_GROUP, null);
               } else {
                   reportSchemaError("s4s-elt-must-match",
                                     new Object[]{"group (global)", "(annotation?, (all | choice | sequence))"},
  
  
  
  1.41      +8 -2      xml-xerces/java/src/org/apache/xerces/impl/xs/traversers/XSDHandler.java
  
  Index: XSDHandler.java
  ===================================================================
  RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/xs/traversers/XSDHandler.java,v
  retrieving revision 1.40
  retrieving revision 1.41
  diff -u -r1.40 -r1.41
  --- XSDHandler.java	3 May 2002 17:17:45 -0000	1.40
  +++ XSDHandler.java	7 May 2002 15:54:27 -0000	1.41
  @@ -119,7 +119,7 @@
    *
    * @author Neil Graham, IBM
    * @author Pavani Mukthipudi, Sun Microsystems
  - * @version $Id: XSDHandler.java,v 1.40 2002/05/03 17:17:45 elena Exp $
  + * @version $Id: XSDHandler.java,v 1.41 2002/05/07 15:54:27 sandygao Exp $
    */
   public class XSDHandler {
   
  @@ -357,6 +357,7 @@
       private XSParticleDecl[] fParticle = new XSParticleDecl[INIT_STACK_SIZE];
       private Element[] fLocalElementDecl = new Element[INIT_STACK_SIZE];
       private int[] fAllContext = new int[INIT_STACK_SIZE];
  +    private XSComplexTypeDecl[] fEnclosingCT = new XSComplexTypeDecl[INIT_STACK_SIZE];
       private String [][] fLocalElemNamespaceContext = new String [INIT_STACK_SIZE][1];
   
       // these data members are needed for the deferred traversal
  @@ -1524,7 +1525,7 @@
               Element currElem = fLocalElementDecl[i];
               XSDocumentInfo currSchema = (XSDocumentInfo)fDoc2XSDocumentMap.get(DOMUtil.getDocument(currElem));
               SchemaGrammar currGrammar = fGrammarBucket.getGrammar(currSchema.fTargetNamespace);
  -            fElementTraverser.traverseLocal (fParticle[i], currElem, currSchema, currGrammar, fAllContext[i]);
  +            fElementTraverser.traverseLocal (fParticle[i], currElem, currSchema, currGrammar, fAllContext[i], fEnclosingCT[i]);
           }
       }
   
  @@ -1533,6 +1534,7 @@
       void fillInLocalElemInfo(Element elmDecl,
                                XSDocumentInfo schemaDoc,
                                int allContextFlags,
  +                             XSComplexTypeDecl enclosingCT,
                                XSParticleDecl particle) {
   
           // if the stack is full, increase the size
  @@ -1547,6 +1549,9 @@
               int[] newStackI = new int[fLocalElemStackPos+INC_STACK_SIZE];
               System.arraycopy(fAllContext, 0, newStackI, 0, fLocalElemStackPos);
               fAllContext = newStackI;
  +            XSComplexTypeDecl[] newStackC = new XSComplexTypeDecl[fLocalElemStackPos+INC_STACK_SIZE];
  +            System.arraycopy(fEnclosingCT, 0, newStackC, 0, fLocalElemStackPos);
  +            fEnclosingCT = newStackC;
               String [][] newStackN = new String [fLocalElemStackPos+INC_STACK_SIZE][];
               System.arraycopy(fLocalElemNamespaceContext, 0, newStackN, 0, fLocalElemStackPos);
               fLocalElemNamespaceContext = newStackN;
  @@ -1555,6 +1560,7 @@
           fParticle[fLocalElemStackPos] = particle;
           fLocalElementDecl[fLocalElemStackPos] = elmDecl;
           fAllContext[fLocalElemStackPos] = allContextFlags;
  +        fEnclosingCT[fLocalElemStackPos] = enclosingCT;
           fLocalElemNamespaceContext[fLocalElemStackPos++] = schemaDoc.fNamespaceSupport.getEffectiveLocalContext();
       } // end fillInLocalElemInfo(...)
   
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: xerces-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: xerces-cvs-help@xml.apache.org