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