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 2001/09/24 17:24:55 UTC
cvs commit: xml-xerces/java/src/org/apache/xerces/impl/v2 SchemaSymbols.java SchemaValidator.java XSAttributeChecker.java XSDAbstractIDConstraintTraverser.java XSDAbstractParticleTraverser.java XSDAbstractTraverser.java XSDAttributeGroupTraverser.java XSDAttributeTraverser.java XSDComplexTypeTraverser.java XSDElementTraverser.java XSDGroupTraverser.java XSDHandler.java XSDKeyrefTraverser.java XSDNotationTraverser.java XSDSimpleTypeTraverser.java XSDUniqueOrKeyTraverser.java XSDWildcardTraverser.java XSDocumentInfo.java XSWildcardDecl.java
sandygao 01/09/24 08:24:55
Modified: java/src/org/apache/xerces/impl/v2 SchemaSymbols.java
SchemaValidator.java XSAttributeChecker.java
XSDAbstractIDConstraintTraverser.java
XSDAbstractParticleTraverser.java
XSDAbstractTraverser.java
XSDAttributeGroupTraverser.java
XSDAttributeTraverser.java
XSDComplexTypeTraverser.java
XSDElementTraverser.java XSDGroupTraverser.java
XSDHandler.java XSDKeyrefTraverser.java
XSDNotationTraverser.java
XSDSimpleTypeTraverser.java
XSDUniqueOrKeyTraverser.java
XSDWildcardTraverser.java XSDocumentInfo.java
XSWildcardDecl.java
Log:
1. Added new code in SchemaValidator;
2. Modified XSAttributeChecker, so that ID is checked within one document, instead of all documents.
3. Part of widlcard traversal is moved into XSAttributeChecker: so that we don't duplicate the code of tokenize the namespace attribute in both classes.
4. An allowNamespace method is added to XSWildcardDecl.
Revision Changes Path
1.13 +5 -5 xml-xerces/java/src/org/apache/xerces/impl/v2/SchemaSymbols.java
Index: SchemaSymbols.java
===================================================================
RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/v2/SchemaSymbols.java,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -r1.12 -r1.13
--- SchemaSymbols.java 2001/09/21 19:56:32 1.12
+++ SchemaSymbols.java 2001/09/24 15:24:54 1.13
@@ -63,7 +63,7 @@
* Collection of symbols used to parse a Schema Grammar.
*
* @author jeffrey rodriguez
- * @version $Id: SchemaSymbols.java,v 1.12 2001/09/21 19:56:32 sandygao Exp $
+ * @version $Id: SchemaSymbols.java,v 1.13 2001/09/24 15:24:54 sandygao Exp $
*/
public final class SchemaSymbols {
@@ -71,12 +71,11 @@
// are not symbols in the schema document.
// the validator can choose to add them by itself.
- // xmlns attributes
- public static final String XMLNS = "xmlns";
-
// the following strings (xsi:, xsd) will be added into the
// symbol table that comes with the parser
+ // xmlns attributes
+ public static final String O_XMLNS = "xmlns";
// xsi attributes: in validator
public static final String OURI_XSI = "http://www.w3.org/2001/XMLSchema-instance";
public static final String OXSI_SCHEMALOCACTION = "schemaLocation";
@@ -93,7 +92,8 @@
// XSDHandler is responsible for passing this symbol table to that parser.
public static final SymbolTable fSymbolTable = new SymbolTable();
- // schema namespace is also added to the schema symbol table
+ // xmlns and schema namespace is also added to the schema symbol table
+ public static final String XMLNS = fSymbolTable.addSymbol(O_XMLNS);
public static final String URI_SCHEMAFORSCHEMA = fSymbolTable.addSymbol(OURI_SCHEMAFORSCHEMA);
// all possible schema element names
1.9 +345 -8 xml-xerces/java/src/org/apache/xerces/impl/v2/SchemaValidator.java
Index: SchemaValidator.java
===================================================================
RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/v2/SchemaValidator.java,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- SchemaValidator.java 2001/09/21 19:56:32 1.8
+++ SchemaValidator.java 2001/09/24 15:24:54 1.9
@@ -107,7 +107,7 @@
* @author Andy Clark, IBM
* @author Jeffrey Rodriguez IBM
*
- * @version $Id: SchemaValidator.java,v 1.8 2001/09/21 19:56:32 sandygao Exp $
+ * @version $Id: SchemaValidator.java,v 1.9 2001/09/24 15:24:54 sandygao Exp $
*/
public class SchemaValidator
implements XMLComponent, XMLDocumentHandler {
@@ -658,6 +658,7 @@
static final int INC_STACK_SIZE = 8;
// some constants that'll be added into the symbol table
+ String XMLNS;
String URI_XSI;
String XSI_SCHEMALOCACTION;
String XSI_NONAMESPACESCHEMALOCACTION;
@@ -727,6 +728,15 @@
Hashtable fTableOfIDs = new Hashtable();
Hashtable fTableOfIDRefs = new Hashtable();
+ /**
+ * temprory qname
+ */
+ QName fTempQName = new QName();
+ /**
+ * temprory empty object, used to fill IDREF table
+ */
+ static final Object fTempObject = new Object();
+
//
// Constructors
//
@@ -748,6 +758,7 @@
// get symbol table. if it's a new one, add symbols to it.
SymbolTable symbolTable = (SymbolTable)componentManager.getProperty(SYMBOL_TABLE);
if (symbolTable != fSymbolTable) {
+ XMLNS = symbolTable.addSymbol(SchemaSymbols.O_XMLNS);
URI_XSI = symbolTable.addSymbol(SchemaSymbols.OURI_XSI);
XSI_SCHEMALOCACTION = symbolTable.addSymbol(SchemaSymbols.OXSI_SCHEMALOCACTION);
XSI_NONAMESPACESCHEMALOCACTION = symbolTable.addSymbol(SchemaSymbols.OXSI_NONAMESPACESCHEMALOCACTION);
@@ -920,14 +931,28 @@
// get the type for the current element
fCurrentType = null;
- if (fCurrentElemDecl != null)
+ if (fCurrentElemDecl != null) {
+ // Check whether this element is abstract. If so, an error
+ if (fCurrentElemDecl.isAbstract()) {
+ reportGenericSchemaError("A member of abstract element " + element.rawname + "'s substitution group must be specified");
+ }
+ // then get the type
fCurrentType = fCurrentElemDecl.fType;
+ }
// get type from xsi:type
String xsiType = attributes.getValue(URI_XSI, XSI_TYPE);
if (xsiType != null) {
- // REVISIT: bind namespace, get grammar, get type
- // report error if type not found.
+ getAndCheckXsiType(element, xsiType);
+ } else if (fCurrentType != null) {
+ // if no xsi:type is specified, check whether the type of
+ // the element is abstract
+ if ((fCurrentType.getXSType() & XSTypeDecl.COMPLEX_TYPE) != 0) {
+ XSComplexTypeDecl ctype = (XSComplexTypeDecl)fCurrentType;
+ if (ctype.isAbstractType()) {
+ reportGenericSchemaError("Element " + element.rawname + " is declared with a type that is abstract. Use xsi:type to specify a non-abstract type");
+ }
+ }
}
// if the element decl is not found
@@ -963,10 +988,16 @@
// and the buffer to hold the value of the element
fBuffer = new StringBuffer();
- // REVISIT: get xsi:nil (was bind...)
+ // get information about xsi:nil
+ String xsiNil = attributes.getValue(URI_XSI, XSI_NIL);
+ if (xsiNil != null)
+ getXsiNil(element, xsiNil);
// now validate everything related with the attributes
- validateOnAttributes(element, attributes);
+ if ((fCurrentType.getXSType() & XSTypeDecl.COMPLEX_TYPE) != 0) {
+ XSComplexTypeDecl ctype = (XSComplexTypeDecl)fCurrentType;
+ validateOnAttributes(element, attributes, ctype.fAttrGrp);
+ }
} // handleStartElement(QName,XMLAttributes,boolean)
@@ -975,6 +1006,8 @@
// if we are skipping, return
if (fSkipValidationDepth >= 0) {
+ // but if this is the top element that we are skipping,
+ // restore the states.
if (fSkipValidationDepth == fElementDepth &&
fSkipValidationDepth > 0) {
fSkipValidationDepth = -1;
@@ -1000,6 +1033,7 @@
// REVISIT: report an error
reportGenericSchemaError("element content doesn't allowed here");
}
+ // validate against simple type
if ((fCurrentType.getXSType() & XSTypeDecl.SIMPLE_TYPE) != 0) {
try {
DatatypeValidator dv = (DatatypeValidator)fCurrentType;
@@ -1010,6 +1044,7 @@
reportGenericSchemaError("datatype error: " + e.getMessage());
}
} else {
+ // REVISIT: validate against complex type with simple content
// if the current state is a valid state, check whether
// it's one of the final states.
if (fCurrCMState != null && fCurrCMState[0] >= 0 &&
@@ -1039,6 +1074,7 @@
}
}
} else {
+ // get the states for the parent element.
fChildCount = fChildCountStack[fElementDepth];
fCurrentElemDecl = fElemDeclStack[fElementDepth];
fCurrentType = fTypeStack[fElementDepth];
@@ -1054,12 +1090,313 @@
return;
fBuffer.append(text.toString());
} // handleCharacters(XMLString)
+
+ void getAndCheckXsiType(QName element, String xsiType) {
+ // REVISIT: bind namespace, get grammar, get type
+ // report error if type not found.
+ // (similar to code in XSAttributeChecker.resolveQName
+ String uri = null, name = null;
+ // uri = resolve; name = substring;
+ XSTypeDecl type = null;
+ SchemaGrammar grammar = fGrammarResolver.getGrammar(uri);
+ if (grammar != null)
+ type = grammar.getGlobalTypeDecl(name);
+ if (type == null) {
+ reportGenericSchemaError("can't find type '"+xsiType+"'");
+ return;
+ }
- void validateOnAttributes(QName element, XMLAttributes attributes) {
+ // if this is a complex type, check whether it's abstract
+ if ((type.getXSType() & XSTypeDecl.COMPLEX_TYPE) != 0) {
+ XSComplexTypeDecl ctype = (XSComplexTypeDecl)type;
+ if (ctype.isAbstractType())
+ reportGenericSchemaError("Abstract type " + xsiType + " should not be used in xsi:type");
+ }
- return;
+ // if there is no current type, set this one as current.
+ // and we don't need to do extra checking
+ if (fCurrentType == null) {
+ fCurrentType = type;
+ return;
+ }
+ // if there is a matching element decl, then this xsi:type must
+ // be validly derived from the type of the element decl
+ if (!checkTypeDerivationOk(type, fCurrentType, fCurrentElemDecl.fBlock))
+ reportGenericSchemaError("xsitype is not validly derived from element type");
+ }
+
+ void getXsiNil(QName element, String xsiNil) {
+ // get nil: true or false
+ boolean nil = false;
+ if (xsiNil.equals(SchemaSymbols.ATTVAL_TRUE) ||
+ xsiNil.equals(SchemaSymbols.ATTVAL_TRUE_1)) {
+ if (fCurrentElemDecl == null || fCurrentElemDecl.isNillable()) {
+ nil = true;
+ } else {
+ reportGenericSchemaError("xsi:nil must not be specified for the element '"+ element.rawname + "' with {nillable} equals 'false'");
+ }
+ } else if (!xsiNil.equals(SchemaSymbols.ATTVAL_FALSE) &&
+ !xsiNil.equals(SchemaSymbols.ATTVAL_FALSE_0)) {
+ reportGenericSchemaError("value '" + xsiNil + "' of xsi:nil attribute is not a valid boolean value");
+ }
+ // REVISIT: have a stack to hold it, because it's checked at endElement
+ }
+
+ void checkXsiNil(String xsiNil) {
+ // REVISIT: check whether the content is empty
+ }
+
+ void validateOnAttributes(QName element, XMLAttributes attributes, XSAttributeGroupDecl attrGrp) {
+
+ XSAttributeUse attrUses[] = attrGrp.getAttributeUses();
+ int useCount = attrUses.length;
+ XSWildcardDecl attrWildcard = attrGrp.fAttributeWC;
+
+ // REVISIT: do we add default attribute before or after
+ // we validate the attribute values?
+ //if (fGrammar != null && fGrammarIsSchemaGrammar && elementIndex != -1) {
+ // fAttrListHandle = addDefaultAttributes(elementIndex, attrList, fAttrListHandle, fValidating, fStandaloneReader != -1);
+ //}
+
+ // if we don't do validation, we don't need to validate the attributes
+ if (!fDoValidation)
+ return;
+
+ // for each present attribute
+ int attCount = attributes.getLength();
+ for (int index = 0; index < attCount; index++) {
+ attributes.getName(index, fTempQName);
+ // if it's from xsi namespace, it must be one of the four
+ if (fTempQName.uri == URI_XSI) {
+ if (fTempQName.localpart != XSI_SCHEMALOCACTION &&
+ fTempQName.localpart != XSI_NONAMESPACESCHEMALOCACTION &&
+ fTempQName.localpart != XSI_NIL &&
+ fTempQName.localpart != XSI_TYPE) {
+ reportGenericSchemaError("invalid attribute from xsi namespace '"+fTempQName.localpart+"'");
+ }
+ } else if (fTempQName.rawname != XMLNS && !fTempQName.rawname.startsWith("xmlns:")) {
+ // it's not xmlns, and not xsi, then we need to find a decl for it
+ XSAttributeUse currUse = null;
+ for (int i = 0; i < useCount; i++) {
+ if (attrUses[i].fAttrDecl.fName == fTempQName.localpart &&
+ attrUses[i].fAttrDecl.fTargetNamespace == fTempQName.uri) {
+ currUse = attrUses[i];
+ break;
+ }
+ }
+ // if failed, get it from wildcard
+ if (currUse == null) {
+ if (!attrWildcard.allowNamespace(fTempQName.uri)) {
+ // so this attribute is not allowed
+ reportGenericSchemaError("attribute '"+fTempQName.rawname+"' can't appear in element '"+element.rawname+"'");
+ continue;
+ }
+ }
+
+ // get the corresponding attribute decl
+ XSAttributeDecl currDecl = null;
+ if (currUse != null) {
+ currDecl = currUse.fAttrDecl;
+ } else {
+ // which means it matches a wildcard
+ // skip it if it's skip
+ if (attrWildcard.fType == XSWildcardDecl.WILDCARD_SKIP)
+ continue;
+ // now get the grammar and attribute decl
+ SchemaGrammar grammar = fGrammarResolver.getGrammar(fTempQName.uri);
+ if (grammar != null)
+ currDecl = grammar.getGlobalAttributeDecl(fTempQName.localpart);
+ // if can't find
+ if (currDecl == null) {
+ // if strict, report error
+ if (attrWildcard.fType == XSWildcardDecl.WILDCARD_STRICT)
+ reportGenericSchemaError("can't find the declaration for attribute '"+fTempQName.rawname+"'");
+ // then continue to the next attribute
+ continue;
+ }
+ }
+
+ // get the value constraint from use or decl
+ // REVISIT: don't quite understand the spec: which value constraint to use
+ short constType = XSAttributeDecl.NO_CONSTRAINT;
+ Object defaultValue = null;
+ if (currUse != null) {
+ constType = currUse.fConstraintType;
+ defaultValue = currUse.fDefault;
+ }
+ if (constType == XSAttributeDecl.NO_CONSTRAINT) {
+ constType = currDecl.fConstraintType;
+ defaultValue = currDecl.fDefault;
+ }
+ // get simple type
+ DatatypeValidator attDV = currDecl.fType;
+ // get attribute value
+ String attrValue = attributes.getValue(index);
+ // if the value is fixed
+ if (constType == XSAttributeDecl.FIXED_VALUET) {
+ // REVISIT: get compiled form of value, then compare
+ if (attDV.compare(attrValue, (String)defaultValue) != 0) {
+ reportGenericSchemaError("attribute value not match fixed value");
+ } else {
+ // if it's one of IDREF type, we should record this value for further checking against ID vlues
+ if (attDV instanceof IDREFDatatypeValidator) {
+ fTableOfIDRefs.put(fTempQName.localpart, fTempObject);
+ }
+ }
+ } else {
+ // otherwise, check the value against the simpleType
+ // REVISIT: normalize the attribute value
+ //attrValue = normalizeValue(attrValue, attDV.getWSFacet());
+ try {
+ // REVISIT: use XSSimpleTypeDecl.ValidateContext to replace null
+ attDV.validate(attrValue, null);
+ } catch (InvalidDatatypeValueException idve) {
+ reportGenericSchemaError("datatype validation error: "+idve);
+ }
+ }
+ } // end of if (not xsi and not xmlns)
+ } // end of for (all attributes)
} //validateOnAttributes
+
+ // REVISIT: move the following 5 methods to common place
+ boolean checkTypeDerivationOk(XSTypeDecl derived, XSTypeDecl base, int block) {
+ // if derived is anyType, then it's valid only if base is anyType too
+ if (derived.getXSType() == XSTypeDecl.ANY_TYPE)
+ return derived == base;
+ // if derived is anySimpleType, then it's valid only if the base
+ // is ur-type
+ if (derived.getXSType() == XSTypeDecl.ANYSIMPLE_TYPE)
+ return (base.getXSType() & XSTypeDecl.UR_TYPE) != 0;
+
+ // if derived is simple type
+ if ((derived.getXSType() & XSTypeDecl.SIMPLE_TYPE) != 0) {
+ // if base is complex type
+ if ((base.getXSType() & XSTypeDecl.COMPLEX_TYPE) != 0) {
+ // if base is anyType, change base to anySimpleType,
+ // otherwise, not valid
+ if (base.getXSType() == XSTypeDecl.ANY_TYPE)
+ base = SchemaGrammar.SG_SchemaNS.getGlobalTypeDecl(SchemaSymbols.ATTVAL_ANYSIMPLETYPE);
+ else
+ return false;
+ }
+ return checkSimpleDerivation((DatatypeValidator)derived,
+ (DatatypeValidator)base, block);
+ } else {
+ if ((base.getXSType() & XSTypeDecl.COMPLEX_TYPE) != 0)
+ block |= ((XSComplexTypeDecl)base).fBlock;
+ return checkComplexDerivation((XSComplexTypeDecl)derived, base, block);
+ }
+ }
+
+ boolean checkSimpleDerivationOk(DatatypeValidator derived, XSTypeDecl base, int block) {
+ // REVISIT: to implement and move to common place
+ return true;
+ }
+
+ boolean checkComplexDerivationOk(XSComplexTypeDecl derived, XSTypeDecl base, int block) {
+ // REVISIT: to implement and move to common place
+ return true;
+ }
+
+ /**
+ * Note: this will be a private method, and it assumes that derived is not
+ * anySimpleType, and base is not anyType. Another method will be
+ * introduced for public use, which will call this method.
+ */
+ boolean checkSimpleDerivation(DatatypeValidator derived, DatatypeValidator base, int block) {
+ // 1 They are the same type definition.
+ if (derived == base)
+ return true;
+
+ // 2 All of the following must be true:
+ // 2.1 restriction is not in the subset, or in the {final} of its own {base type definition};
+ if ((block & SchemaSymbols.RESTRICTION) != 0 ||
+ (derived.getBaseValidator().getFinalSet() & SchemaSymbols.RESTRICTION) != 0) {
+ return false;
+ }
+
+ // 2.2 One of the following must be true:
+ // 2.2.1 D's �base type definition� is B.
+ DatatypeValidator directBase = derived.getBaseValidator();
+ if (directBase == base)
+ return true;
+
+ // 2.2.2 D's �base type definition� is not the �simple ur-type definition� and is validly derived from B given the subset, as defined by this constraint.
+ if (directBase.getXSType() != XSTypeDecl.ANYSIMPLE_TYPE &&
+ checkSimpleDerivation(directBase, base, block)) {
+ return true;
+ }
+
+ // 2.2.3 D's {variety} is list or union and B is the �simple ur-type definition�.
+ if ((derived instanceof ListDatatypeValidator ||
+ derived instanceof UnionDatatypeValidator) &&
+ base.getXSType() == XSTypeDecl.ANYSIMPLE_TYPE) {
+ return true;
+ }
+
+ // 2.2.4 B's {variety} is union and D is validly derived from a type definition in B's {member type definitions} given the subset, as defined by this constraint.
+ if (base instanceof UnionDatatypeValidator) {
+ Vector subUnionMemberDV = ((UnionDatatypeValidator)base).getBaseValidators();
+ int subUnionSize = subUnionMemberDV.size();
+ for (int i=0; i<subUnionSize; i++) {
+ base = (DatatypeValidator)subUnionMemberDV.elementAt(i);
+ if (checkSimpleDerivation(derived, base, block))
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ /**
+ * Note: this will be a private method, and it assumes that derived is not
+ * anyType. Another method will be introduced for public use,
+ * which will call this method.
+ */
+ boolean checkComplexDerivation(XSComplexTypeDecl derived, XSTypeDecl base, int block) {
+ // 2.1 B and D must be the same type definition.
+ if (derived == base)
+ return true;
+
+ // 1 If B and D are not the same type definition, then the {derivation method} of D must not be in the subset.
+ if ((derived.fDerivedBy & block) != 0)
+ return false;
+
+ // 2 One of the following must be true:
+ XSTypeDecl directBase = derived.fBaseType;
+ // 2.2 B must be D's {base type definition}.
+ if (directBase == base)
+ return true;
+
+ // 2.3 All of the following must be true:
+ int directType = directBase.getXSType();
+ // 2.3.1 D's {base type definition} must not be the �ur-type definition�.
+ if ((directType & XSTypeDecl.UR_TYPE) != 0)
+ return false;
+
+ // 2.3.2 The appropriate case among the following must be true:
+ // 2.3.2.1 If D's {base type definition} is complex, then it must be validly derived from B given the subset as defined by this constraint.
+ if ((directType & XSTypeDecl.COMPLEX_TYPE) != 0)
+ return checkComplexDerivation((XSComplexTypeDecl)directBase, base, block);
+
+ // 2.3.2.2 If D's {base type definition} is simple, then it must be validly derived from B given the subset as defined in Type Derivation OK (Simple) (�3.14.6).
+ if ((directType & XSTypeDecl.SIMPLE_TYPE) != 0) {
+ // if base is complex type
+ if ((base.getXSType() & XSTypeDecl.COMPLEX_TYPE) != 0) {
+ // if base is anyType, change base to anySimpleType,
+ // otherwise, not valid
+ if (base.getXSType() == XSTypeDecl.ANY_TYPE)
+ base = SchemaGrammar.SG_SchemaNS.getGlobalTypeDecl(SchemaSymbols.ATTVAL_ANYSIMPLETYPE);
+ else
+ return false;
+ }
+ return checkSimpleDerivation((DatatypeValidator)derived,
+ (DatatypeValidator)base, block);
+ }
+
+ return false;
+ }
void reportSchemaError(String key, Object[] arguments) {
if (fDoValidation)
1.20 +71 -27 xml-xerces/java/src/org/apache/xerces/impl/v2/XSAttributeChecker.java
Index: XSAttributeChecker.java
===================================================================
RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/v2/XSAttributeChecker.java,v
retrieving revision 1.19
retrieving revision 1.20
diff -u -r1.19 -r1.20
--- XSAttributeChecker.java 2001/09/21 17:57:17 1.19
+++ XSAttributeChecker.java 2001/09/24 15:24:54 1.20
@@ -89,7 +89,7 @@
* - use symbol table instead of many hashtables
*
* @author Sandy Gao, IBM
- * @version $Id: XSAttributeChecker.java,v 1.19 2001/09/21 17:57:17 sandygao Exp $
+ * @version $Id: XSAttributeChecker.java,v 1.20 2001/09/24 15:24:54 sandygao Exp $
*/
public class XSAttributeChecker {
@@ -149,6 +149,9 @@
private static final XInt INT_WS_COLLAPSE = fXIntPool.getXInt(SchemaSymbols.WS_COLLAPSE);
private static final XInt INT_UNBOUNDED = fXIntPool.getXInt(SchemaSymbols.OCCURRENCE_UNBOUNDED);
+ // default wildcard to return
+ private static final XSWildcardDecl WC_ANY = new XSWildcardDecl();
+
// used to store the map from element name to attribute list
protected static Hashtable fEleAttrsMapG = new Hashtable();
protected static Hashtable fEleAttrsMapN = new Hashtable();
@@ -364,7 +367,7 @@
allAttrs[ATT_NAMESPACE_D] = new OneAttr(SchemaSymbols.ATT_NAMESPACE,
DT_NAMESPACE,
ATTIDX_NAMESPACE,
- SchemaSymbols.ATTVAL_TWOPOUNDANY);
+ WC_ANY);
allAttrs[ATT_NAMESPACE_N] = new OneAttr(SchemaSymbols.ATT_NAMESPACE,
DT_ANYURI,
ATTIDX_NAMESPACE,
@@ -938,9 +941,6 @@
fEleAttrsMapN.put(SchemaSymbols.ELT_MINEXCLUSIVE, oneEle);
}
- // used to store all seen ID values, and to check duplicate ID values
- private Hashtable fIdDefs = new Hashtable();
-
// used to resolver namespace prefixes
protected XSDHandler fSchemaHandler = null;
@@ -959,7 +959,6 @@
}
public void reset(XMLErrorReporter er, SymbolTable symbolTable) {
- fIdDefs.clear();
fErrorReporter = er;
fSymbolTable = symbolTable;
fNonSchemaAttrs.clear();
@@ -975,12 +974,12 @@
* @return: Hashtable - list of attributes and values
*/
public Object[] checkAttributes(Element element, boolean isGlobal,
- SchemaNamespaceSupport nsSupport) {
+ XSDocumentInfo schemaDoc) {
if (element == null)
return null;
// update NamespaceSupport
- resolveNamespace(element, nsSupport);
+ resolveNamespace(element, schemaDoc.fNamespaceSupport);
String uri = DOMUtil.getNamespaceURI(element);
String elName = DOMUtil.getLocalName(element);
@@ -1087,17 +1086,17 @@
oneAttr.dvIndex != DT_XPATH1) {
DatatypeValidator dv = fExtraDVs[oneAttr.dvIndex];
if (dv instanceof IDDatatypeValidator) {
- retValue = dv.validate( attrVal, fIdDefs );
+ retValue = dv.validate(attrVal, schemaDoc.fIdDefs);
}
else {
- retValue = dv.validate( attrVal, null);
+ retValue = dv.validate(attrVal, null);
}
}
// REVISIT: should have the datatype validators return
// the object representation of the value.
switch (oneAttr.dvIndex) {
case DT_QNAME:
- retValue = resolveQName(attrVal, nsSupport);
+ retValue = resolveQName(attrVal, schemaDoc.fNamespaceSupport);
break;
default:
retValue = attrVal;
@@ -1107,7 +1106,7 @@
attrValues[oneAttr.valueIndex] = retValue;
}
else {
- retValue = validate(attrName, attrVal, oneAttr.dvIndex, nsSupport);
+ retValue = validate(attrName, attrVal, oneAttr.dvIndex, schemaDoc);
//attrValues.put(attrName, retValue);
attrValues[oneAttr.valueIndex] = retValue;
}
@@ -1161,7 +1160,7 @@
}
private Object validate(String attr, String value, int dvIndex,
- SchemaNamespaceSupport nsSupport) throws InvalidDatatypeValueException {
+ XSDocumentInfo schemaDoc) throws InvalidDatatypeValueException {
if (value == null)
return null;
@@ -1312,7 +1311,7 @@
retValue = fExtraDVs[DT_QNAME].validate(token, null);
// REVISIT: should have the datatype validators return
// the object representation of the value.
- retValue = resolveQName(token, nsSupport);
+ retValue = resolveQName(token, schemaDoc.fNamespaceSupport);
memberType.addElement(retValue);
}
retValue = memberType;
@@ -1332,22 +1331,67 @@
break;
case DT_NAMESPACE:
// namespace = ((##any | ##other) | List of (anyURI | (##targetNamespace | ##local)) )
- if (!value.equals(SchemaSymbols.ATTVAL_TWOPOUNDANY) &&
- !value.equals(SchemaSymbols.ATTVAL_TWOPOUNDOTHER)) {
- StringTokenizer t = new StringTokenizer (value, " ");
+ XSWildcardDecl wildcard = null;
+ if (value.equals(SchemaSymbols.ATTVAL_TWOPOUNDANY)) {
+ // ##any
+ wildcard = WC_ANY;
+ } else if (value.equals(SchemaSymbols.ATTVAL_TWOPOUNDOTHER)) {
+ // ##other
+ wildcard = new XSWildcardDecl();
+ wildcard.fType = XSWildcardDecl.WILDCARD_OTHER;
+ wildcard.fNamespaceList = new String[2];
+ wildcard.fNamespaceList[0] = schemaDoc.fTargetNamespace;
+ wildcard.fNamespaceList[1] = fSchemaHandler.EMPTY_STRING;
+ } else {
+ // list
+ wildcard = new XSWildcardDecl();
+ wildcard.fType = XSWildcardDecl.WILDCARD_LIST;
+
+ // tokenize
+ StringTokenizer tokens = new StringTokenizer(value);
+ String[] namespaceList = new String[tokens.countTokens()];
+ int nsNum = 0;
+ String token;
+ String tempNamespace;
try {
- while (t.hasMoreTokens()) {
- String token = t.nextToken ();
- if (!token.equals(SchemaSymbols.ATTVAL_TWOPOUNDTARGETNS) &&
- !token.equals(SchemaSymbols.ATTVAL_TWOPOUNDLOCAL)) {
+ while (tokens.hasMoreTokens()) {
+ token = tokens.nextToken();
+ if (token.equals(SchemaSymbols.ATTVAL_TWOPOUNDLOCAL)) {
+ tempNamespace = fSchemaHandler.EMPTY_STRING;
+ } else if (token.equals(SchemaSymbols.ATTVAL_TWOPOUNDTARGETNS)) {
+ tempNamespace = schemaDoc.fTargetNamespace;
+ } else {
+ // we have found namespace URI here
+ // need to add it to the symbol table
fExtraDVs[DT_ANYURI].validate(token, null);
+ tempNamespace = fSymbolTable.addSymbol(token);
+ }
+
+ //check for duplicate namespaces in the list
+ int j = 0;
+ for (; j < nsNum; j++) {
+ if (tempNamespace == namespaceList[j])
+ break;
}
+ if (j == nsNum) {
+ // this means traversed whole for loop
+ // i.e. not a duplicate namespace
+ namespaceList[nsNum++] = tempNamespace;
+ }
}
- //REVISIT: what to return? a vector?
- }
- catch (InvalidDatatypeValueException ide) {
+ } catch (InvalidDatatypeValueException ide) {
throw new InvalidDatatypeValueException("the value '"+value+"' must match ((##any | ##other) | List of (anyURI | (##targetNamespace | ##local)) )");
}
+
+ // resize the array, so there is no empty entry
+ if (nsNum == namespaceList.length) {
+ wildcard.fNamespaceList = namespaceList;
+ } else {
+ wildcard.fNamespaceList = new String[nsNum];
+ System.arraycopy(namespaceList, 0, wildcard.fNamespaceList, 0, nsNum);
+ }
+
+ retValue = wildcard;
}
break;
case DT_PROCESSCONTENTS:
@@ -1554,9 +1598,9 @@
}
// return an array back to the pool
- public void returnAttrArray(Object[] attrArray, SchemaNamespaceSupport nsSupport) {
+ public void returnAttrArray(Object[] attrArray, XSDocumentInfo schemaDoc) {
// pop the namespace context
- nsSupport.popContext();
+ schemaDoc.fNamespaceSupport.popContext();
// if 1. the pool is full; 2. the array is null;
// 3. the array is of wrong size; 4. the array is already returned
@@ -1585,7 +1629,7 @@
for (int i = 0; i < attrs.length; i++) {
sattr = attrs[i];
rawname = DOMUtil.getName(sattr);
- if (rawname.startsWith("xmlns")) {
+ if (rawname == SchemaSymbols.XMLNS || rawname.startsWith("xmlns:")) {
prefix = null;
if (rawname.length() == 5)
prefix = fSchemaHandler.EMPTY_STRING;
1.3 +7 -7 xml-xerces/java/src/org/apache/xerces/impl/v2/XSDAbstractIDConstraintTraverser.java
Index: XSDAbstractIDConstraintTraverser.java
===================================================================
RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/v2/XSDAbstractIDConstraintTraverser.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- XSDAbstractIDConstraintTraverser.java 2001/09/21 16:22:28 1.2
+++ XSDAbstractIDConstraintTraverser.java 2001/09/24 15:24:54 1.3
@@ -68,7 +68,7 @@
* traversers (the XSDUniqueTraverser, XSDKeyTraverser and
* XSDKeyrefTraverser) rely upon.
*
- * @version $Id: XSDAbstractIDConstraintTraverser.java,v 1.2 2001/09/21 16:22:28 sandygao Exp $
+ * @version $Id: XSDAbstractIDConstraintTraverser.java,v 1.3 2001/09/24 15:24:54 sandygao Exp $
*/
class XSDAbstractIDConstraintTraverser extends XSDAbstractTraverser {
@@ -91,7 +91,7 @@
}
sElem = checkContent( icElem, sElem, false);
// General Attribute Checking on sElem
- Object [] attrValues = fAttrChecker.checkAttributes(sElem, false, schemaDoc.fNamespaceSupport);
+ Object [] attrValues = fAttrChecker.checkAttributes(sElem, false, schemaDoc);
if(!sElem.getLocalName().equals(SchemaSymbols.ELT_SELECTOR)) {
// REVISIT: localize
@@ -112,12 +112,12 @@
// REVISIT: Add error message.
reportGenericSchemaError(e.getMessage());
// put back attr values...
- fAttrChecker.returnAttrArray(attrValues, schemaDoc.fNamespaceSupport);
+ fAttrChecker.returnAttrArray(attrValues, schemaDoc);
return;
}
// put back attr values...
- fAttrChecker.returnAttrArray(attrValues, schemaDoc.fNamespaceSupport);
+ fAttrChecker.returnAttrArray(attrValues, schemaDoc);
// get fields
Element fElem = DOMUtil.getNextSiblingElement(sElem);
@@ -127,7 +127,7 @@
}
while (fElem != null) {
// General Attribute Checking
- attrValues = fAttrChecker.checkAttributes(fElem, false, schemaDoc.fNamespaceSupport);
+ attrValues = fAttrChecker.checkAttributes(fElem, false, schemaDoc);
if(!fElem.getLocalName().equals(SchemaSymbols.ELT_FIELD))
// REVISIT: localize
@@ -145,12 +145,12 @@
// REVISIT: Add error message.
reportGenericSchemaError(e.getMessage());
// put back attr values...
- fAttrChecker.returnAttrArray(attrValues, schemaDoc.fNamespaceSupport);
+ fAttrChecker.returnAttrArray(attrValues, schemaDoc);
return;
}
fElem = DOMUtil.getNextSiblingElement(fElem);
// put back attr values...
- fAttrChecker.returnAttrArray(attrValues, schemaDoc.fNamespaceSupport);
+ fAttrChecker.returnAttrArray(attrValues, schemaDoc);
}
} // traverseIdentityConstraint(IdentityConstraint,Element, XSDocumentInfo)
1.12 +5 -5 xml-xerces/java/src/org/apache/xerces/impl/v2/XSDAbstractParticleTraverser.java
Index: XSDAbstractParticleTraverser.java
===================================================================
RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/v2/XSDAbstractParticleTraverser.java,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- XSDAbstractParticleTraverser.java 2001/09/21 16:22:28 1.11
+++ XSDAbstractParticleTraverser.java 2001/09/24 15:24:54 1.12
@@ -65,7 +65,7 @@
/**
* @author Elena Litani, IBM
* @author Sandy Gao, IBM
- * @version $Id: XSDAbstractParticleTraverser.java,v 1.11 2001/09/21 16:22:28 sandygao Exp $
+ * @version $Id: XSDAbstractParticleTraverser.java,v 1.12 2001/09/24 15:24:54 sandygao Exp $
*/
abstract class XSDAbstractParticleTraverser extends XSDAbstractTraverser {
@@ -93,7 +93,7 @@
// General Attribute Checking
- Object[] attrValues = fAttrChecker.checkAttributes(allDecl, false, schemaDoc.fNamespaceSupport);
+ Object[] attrValues = fAttrChecker.checkAttributes(allDecl, false, schemaDoc);
Element content = DOMUtil.getFirstChildElement(allDecl);
Element child = checkContent(allDecl, content, true);
@@ -155,7 +155,7 @@
allContextFlags,
defaultVals.longValue());
- fAttrChecker.returnAttrArray(attrValues, schemaDoc.fNamespaceSupport);
+ fAttrChecker.returnAttrArray(attrValues, schemaDoc);
return left;
}
@@ -222,7 +222,7 @@
boolean choice) {
// General Attribute Checking
- Object[] attrValues = fAttrChecker.checkAttributes(decl, false, schemaDoc.fNamespaceSupport);
+ Object[] attrValues = fAttrChecker.checkAttributes(decl, false, schemaDoc);
Element content = DOMUtil.getFirstChildElement(decl);
Element child = checkContent(decl,content, true);
@@ -325,7 +325,7 @@
allContextFlags,
defaultVals.longValue());
- fAttrChecker.returnAttrArray(attrValues, schemaDoc.fNamespaceSupport);
+ fAttrChecker.returnAttrArray(attrValues, schemaDoc);
return left;
}
1.18 +5 -5 xml-xerces/java/src/org/apache/xerces/impl/v2/XSDAbstractTraverser.java
Index: XSDAbstractTraverser.java
===================================================================
RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/v2/XSDAbstractTraverser.java,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -r1.17 -r1.18
--- XSDAbstractTraverser.java 2001/09/21 16:22:28 1.17
+++ XSDAbstractTraverser.java 2001/09/24 15:24:54 1.18
@@ -74,7 +74,7 @@
*
* @author Elena Litani, IBM
*
- * @version $Id: XSDAbstractTraverser.java,v 1.17 2001/09/21 16:22:28 sandygao Exp $
+ * @version $Id: XSDAbstractTraverser.java,v 1.18 2001/09/24 15:24:54 sandygao Exp $
*/
abstract class XSDAbstractTraverser {
@@ -130,8 +130,8 @@
void traverseAnnotationDecl(Element annotationDecl, Object[] parentAttrs,
boolean isGlobal, XSDocumentInfo schemaDoc) {
// General Attribute Checking
- Object[] attrValues = fAttrChecker.checkAttributes(annotationDecl, isGlobal, schemaDoc.fNamespaceSupport);
- fAttrChecker.returnAttrArray(attrValues, schemaDoc.fNamespaceSupport);
+ Object[] attrValues = fAttrChecker.checkAttributes(annotationDecl, isGlobal, schemaDoc);
+ fAttrChecker.returnAttrArray(attrValues, schemaDoc);
for(Element child = DOMUtil.getFirstChildElement(annotationDecl);
child != null;
@@ -148,8 +148,8 @@
// General Attribute Checking
// There is no difference between global or local appinfo/documentation,
// so we assume it's always global.
- attrValues = fAttrChecker.checkAttributes(child, true, schemaDoc.fNamespaceSupport);
- fAttrChecker.returnAttrArray(attrValues, schemaDoc.fNamespaceSupport);
+ attrValues = fAttrChecker.checkAttributes(child, true, schemaDoc);
+ fAttrChecker.returnAttrArray(attrValues, schemaDoc);
}
// REVISIT: an annotation decl should be returned when we support PSVI
1.12 +6 -6 xml-xerces/java/src/org/apache/xerces/impl/v2/XSDAttributeGroupTraverser.java
Index: XSDAttributeGroupTraverser.java
===================================================================
RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/v2/XSDAttributeGroupTraverser.java,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- XSDAttributeGroupTraverser.java 2001/09/21 17:57:17 1.11
+++ XSDAttributeGroupTraverser.java 2001/09/24 15:24:54 1.12
@@ -75,7 +75,7 @@
* @author Rahul Srivastava, Sun Microsystems Inc.
* @author Sandy Gao, IBM
*
- * @version $Id: XSDAttributeGroupTraverser.java,v 1.11 2001/09/21 17:57:17 sandygao Exp $
+ * @version $Id: XSDAttributeGroupTraverser.java,v 1.12 2001/09/24 15:24:54 sandygao Exp $
*/
class XSDAttributeGroupTraverser extends XSDAbstractTraverser {
@@ -91,7 +91,7 @@
SchemaGrammar grammar) {
// General Attribute Checking for elmNode declared locally
- Object[] attrValues = fAttrChecker.checkAttributes(elmNode, false, schemaDoc.fNamespaceSupport);
+ Object[] attrValues = fAttrChecker.checkAttributes(elmNode, false, schemaDoc);
// get attribute
QName refAttr = (QName) attrValues[XSAttributeChecker.ATTIDX_REF];
@@ -101,7 +101,7 @@
// ref should be here.
if (refAttr == null) {
reportGenericSchemaError("Local attributeGroup declaration should have ref.");
- fAttrChecker.returnAttrArray(attrValues, schemaDoc.fNamespaceSupport);
+ fAttrChecker.returnAttrArray(attrValues, schemaDoc);
return null;
}
@@ -128,7 +128,7 @@
}
} // if
- fAttrChecker.returnAttrArray(attrValues, schemaDoc.fNamespaceSupport);
+ fAttrChecker.returnAttrArray(attrValues, schemaDoc);
return attrGrp;
} // traverseLocal
@@ -140,7 +140,7 @@
XSAttributeGroupDecl attrGrp = new XSAttributeGroupDecl();
// General Attribute Checking for elmNode declared globally
- Object[] attrValues = fAttrChecker.checkAttributes(elmNode, true, schemaDoc.fNamespaceSupport);
+ Object[] attrValues = fAttrChecker.checkAttributes(elmNode, true, schemaDoc);
String nameAttr = (String) attrValues[XSAttributeChecker.ATTIDX_NAME];
@@ -203,7 +203,7 @@
// make an entry in global declarations.
grammar.addGlobalAttributeGroupDecl(attrGrp);
- fAttrChecker.returnAttrArray(attrValues, schemaDoc.fNamespaceSupport);
+ fAttrChecker.returnAttrArray(attrValues, schemaDoc);
return attrGrp;
} // traverseGlobal
1.12 +5 -5 xml-xerces/java/src/org/apache/xerces/impl/v2/XSDAttributeTraverser.java
Index: XSDAttributeTraverser.java
===================================================================
RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/v2/XSDAttributeTraverser.java,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- XSDAttributeTraverser.java 2001/09/21 16:22:28 1.11
+++ XSDAttributeTraverser.java 2001/09/24 15:24:54 1.12
@@ -82,7 +82,7 @@
*
* @author Sandy Gao, IBM
*
- * @version $Id: XSDAttributeTraverser.java,v 1.11 2001/09/21 16:22:28 sandygao Exp $
+ * @version $Id: XSDAttributeTraverser.java,v 1.12 2001/09/24 15:24:54 sandygao Exp $
*/
class XSDAttributeTraverser extends XSDAbstractTraverser {
@@ -96,7 +96,7 @@
SchemaGrammar grammar) {
// General Attribute Checking
- Object[] attrValues = fAttrChecker.checkAttributes(attrDecl, false, schemaDoc.fNamespaceSupport);
+ Object[] attrValues = fAttrChecker.checkAttributes(attrDecl, false, schemaDoc);
String defaultAtt = (String) attrValues[XSAttributeChecker.ATTIDX_DEFAULT];
String fixedAtt = (String) attrValues[XSAttributeChecker.ATTIDX_FIXED];
@@ -142,7 +142,7 @@
attrUse.fDefault = defaultAtt;
}
- fAttrChecker.returnAttrArray(attrValues, schemaDoc.fNamespaceSupport);
+ fAttrChecker.returnAttrArray(attrValues, schemaDoc);
//src-attribute
@@ -180,9 +180,9 @@
SchemaGrammar grammar) {
// General Attribute Checking
- Object[] attrValues = fAttrChecker.checkAttributes(attrDecl, true, schemaDoc.fNamespaceSupport);
+ Object[] attrValues = fAttrChecker.checkAttributes(attrDecl, true, schemaDoc);
XSAttributeDecl attribute = traverseNamedAttr(attrDecl, attrValues, schemaDoc, grammar, true);
- fAttrChecker.returnAttrArray(attrValues, schemaDoc.fNamespaceSupport);
+ fAttrChecker.returnAttrArray(attrValues, schemaDoc);
return attribute;
}
1.14 +7 -7 xml-xerces/java/src/org/apache/xerces/impl/v2/XSDComplexTypeTraverser.java
Index: XSDComplexTypeTraverser.java
===================================================================
RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/v2/XSDComplexTypeTraverser.java,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -r1.13 -r1.14
--- XSDComplexTypeTraverser.java 2001/09/21 16:22:28 1.13
+++ XSDComplexTypeTraverser.java 2001/09/24 15:24:54 1.14
@@ -78,7 +78,7 @@
* ((group | all | choice | sequence)?,
* ((attribute | attributeGroup)*, anyAttribute?))))
* </complexType>
- * @version $Id: XSDComplexTypeTraverser.java,v 1.13 2001/09/21 16:22:28 sandygao Exp $
+ * @version $Id: XSDComplexTypeTraverser.java,v 1.14 2001/09/24 15:24:54 sandygao Exp $
*/
class XSDComplexTypeTraverser extends XSDAbstractParticleTraverser {
@@ -109,11 +109,11 @@
Object[] attrValues = fAttrChecker.checkAttributes(complexTypeNode, false,
- schemaDoc.fNamespaceSupport);
+ schemaDoc);
String complexTypeName = genAnonTypeName(complexTypeNode);
XSComplexTypeDecl type = traverseComplexTypeDecl (complexTypeNode,
complexTypeName, attrValues, schemaDoc, grammar);
- fAttrChecker.returnAttrArray(attrValues, schemaDoc.fNamespaceSupport);
+ fAttrChecker.returnAttrArray(attrValues, schemaDoc);
return type;
}
@@ -131,12 +131,12 @@
SchemaGrammar grammar){
Object[] attrValues = fAttrChecker.checkAttributes(complexTypeNode, true,
- schemaDoc.fNamespaceSupport);
+ schemaDoc);
String complexTypeName = (String) attrValues[XSAttributeChecker.ATTIDX_NAME];
XSComplexTypeDecl type = traverseComplexTypeDecl (complexTypeNode,
complexTypeName, attrValues, schemaDoc, grammar);
grammar.addGlobalTypeDecl(type);
- fAttrChecker.returnAttrArray(attrValues, schemaDoc.fNamespaceSupport);
+ fAttrChecker.returnAttrArray(attrValues, schemaDoc);
return type;
}
@@ -157,9 +157,9 @@
complexType.fName = complexTypeName;
complexType.fTargetNamespace = schemaDoc.fTargetNamespace;
complexType.fBlock = blockAtt == null ?
- SchemaSymbols.EMPTY_SET : blockAtt.shortValue();
+ schemaDoc.fBlockDefault : blockAtt.shortValue();
complexType.fFinal = finalAtt == null ?
- SchemaSymbols.EMPTY_SET : finalAtt.shortValue();
+ schemaDoc.fFinalDefault : finalAtt.shortValue();
if (abstractAtt.booleanValue())
complexType.setIsAbstractType();
1.15 +7 -7 xml-xerces/java/src/org/apache/xerces/impl/v2/XSDElementTraverser.java
Index: XSDElementTraverser.java
===================================================================
RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/v2/XSDElementTraverser.java,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -r1.14 -r1.15
--- XSDElementTraverser.java 2001/09/21 16:22:28 1.14
+++ XSDElementTraverser.java 2001/09/24 15:24:54 1.15
@@ -88,7 +88,7 @@
*
* @author Sandy Gao, IBM
*
- * @version $Id: XSDElementTraverser.java,v 1.14 2001/09/21 16:22:28 sandygao Exp $
+ * @version $Id: XSDElementTraverser.java,v 1.15 2001/09/24 15:24:54 sandygao Exp $
*/
class XSDElementTraverser extends XSDAbstractTraverser {
@@ -156,7 +156,7 @@
int allContextFlags) {
// General Attribute Checking
- Object[] attrValues = fAttrChecker.checkAttributes(elmDecl, false, schemaDoc.fNamespaceSupport);
+ Object[] attrValues = fAttrChecker.checkAttributes(elmDecl, false, schemaDoc);
QName refAtt = (QName) attrValues[XSAttributeChecker.ATTIDX_REF];
XInt minAtt = (XInt) attrValues[XSAttributeChecker.ATTIDX_MINOCCURS];
@@ -191,7 +191,7 @@
defaultVals.longValue());
}
- fAttrChecker.returnAttrArray(attrValues, schemaDoc.fNamespaceSupport);
+ fAttrChecker.returnAttrArray(attrValues, schemaDoc);
}
/**
@@ -207,9 +207,9 @@
SchemaGrammar grammar) {
// General Attribute Checking
- Object[] attrValues = fAttrChecker.checkAttributes(elmDecl, true, schemaDoc.fNamespaceSupport);
+ Object[] attrValues = fAttrChecker.checkAttributes(elmDecl, true, schemaDoc);
XSElementDecl element = traverseNamedElement(elmDecl, attrValues, schemaDoc, grammar, true);
- fAttrChecker.returnAttrArray(attrValues, schemaDoc.fNamespaceSupport);
+ fAttrChecker.returnAttrArray(attrValues, schemaDoc);
return element;
}
@@ -264,8 +264,8 @@
}
// get 'block', 'final', 'nillable', 'abstract'
- element.fBlock = blockAtt == null ? SchemaSymbols.EMPTY_SET : blockAtt.shortValue();
- element.fFinal = finalAtt == null ? SchemaSymbols.EMPTY_SET : finalAtt.shortValue();
+ element.fBlock = blockAtt == null ? schemaDoc.fBlockDefault : blockAtt.shortValue();
+ element.fFinal = finalAtt == null ? schemaDoc.fFinalDefault : finalAtt.shortValue();
if (nillableAtt.booleanValue())
element.setIsNillable();
if (abstractAtt != null && abstractAtt.booleanValue())
1.13 +5 -5 xml-xerces/java/src/org/apache/xerces/impl/v2/XSDGroupTraverser.java
Index: XSDGroupTraverser.java
===================================================================
RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/v2/XSDGroupTraverser.java,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -r1.12 -r1.13
--- XSDGroupTraverser.java 2001/09/21 16:22:28 1.12
+++ XSDGroupTraverser.java 2001/09/24 15:24:54 1.13
@@ -73,7 +73,7 @@
* @author Rahul Srivastava, Sun Microsystems Inc.
* @author Elena Litani, IBM
* @author Lisa Martin, IBM
- * @version $Id: XSDGroupTraverser.java,v 1.12 2001/09/21 16:22:28 sandygao Exp $
+ * @version $Id: XSDGroupTraverser.java,v 1.13 2001/09/24 15:24:54 sandygao Exp $
*/
class XSDGroupTraverser extends XSDAbstractParticleTraverser {
@@ -89,7 +89,7 @@
// General Attribute Checking for elmNode declared locally
Object[] attrValues = fAttrChecker.checkAttributes(elmNode, false,
- schemaDoc.fNamespaceSupport);
+ schemaDoc);
QName refAttr = (QName) attrValues[XSAttributeChecker.ATTIDX_REF];
XInt minAttr = (XInt) attrValues[XSAttributeChecker.ATTIDX_MINOCCURS];
XInt maxAttr = (XInt) attrValues[XSAttributeChecker.ATTIDX_MAXOCCURS];
@@ -132,7 +132,7 @@
}
}
- fAttrChecker.returnAttrArray(attrValues, schemaDoc.fNamespaceSupport);
+ fAttrChecker.returnAttrArray(attrValues, schemaDoc);
return particle;
@@ -144,7 +144,7 @@
// General Attribute Checking for elmNode declared globally
Object[] attrValues = fAttrChecker.checkAttributes(elmNode, true,
- schemaDoc.fNamespaceSupport);
+ schemaDoc);
String strNameAttr = (String) attrValues[XSAttributeChecker.ATTIDX_NAME];
// must have a name
@@ -200,7 +200,7 @@
}
}
- fAttrChecker.returnAttrArray(attrValues, schemaDoc.fNamespaceSupport);
+ fAttrChecker.returnAttrArray(attrValues, schemaDoc);
return group;
1.28 +5 -5 xml-xerces/java/src/org/apache/xerces/impl/v2/XSDHandler.java
Index: XSDHandler.java
===================================================================
RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/v2/XSDHandler.java,v
retrieving revision 1.27
retrieving revision 1.28
diff -u -r1.27 -r1.28
--- XSDHandler.java 2001/09/21 19:56:32 1.27
+++ XSDHandler.java 2001/09/24 15:24:54 1.28
@@ -95,7 +95,7 @@
* schema, other grammars may be constructed as a side-effect.
*
* @author Neil Graham, IBM
- * @version $Id: XSDHandler.java,v 1.27 2001/09/21 19:56:32 sandygao Exp $
+ * @version $Id: XSDHandler.java,v 1.28 2001/09/24 15:24:54 sandygao Exp $
*/
class XSDHandler {
@@ -323,10 +323,10 @@
else if (localName.equals(SchemaSymbols.ELT_IMPORT)) {
// have to handle some validation here too!
// call XSAttributeChecker to fill in attrs
- Object[] includeAttrs = fAttributeChecker.checkAttributes(child, true, currSchemaInfo.fNamespaceSupport);
+ Object[] includeAttrs = fAttributeChecker.checkAttributes(child, true, currSchemaInfo);
schemaHint = (String)includeAttrs[XSAttributeChecker.ATTIDX_SCHEMALOCATION];
schemaNamespace = (String)includeAttrs[XSAttributeChecker.ATTIDX_NAMESPACE];
- fAttributeChecker.returnAttrArray(includeAttrs, currSchemaInfo.fNamespaceSupport);
+ fAttributeChecker.returnAttrArray(includeAttrs, currSchemaInfo);
newSchemaRoot = getSchema(schemaNamespace, schemaHint);
}
else if ((localName.equals(SchemaSymbols.ELT_INCLUDE)) ||
@@ -334,9 +334,9 @@
// validation for redefine/include will be the same here; just
// make sure TNS is right (don't care about redef contents
// yet).
- Object[] includeAttrs = fAttributeChecker.checkAttributes(child, true, currSchemaInfo.fNamespaceSupport);
+ Object[] includeAttrs = fAttributeChecker.checkAttributes(child, true, currSchemaInfo);
schemaHint = (String)includeAttrs[XSAttributeChecker.ATTIDX_SCHEMALOCATION];
- fAttributeChecker.returnAttrArray(includeAttrs, currSchemaInfo.fNamespaceSupport);
+ fAttributeChecker.returnAttrArray(includeAttrs, currSchemaInfo);
newSchemaRoot = getSchema(EMPTY_STRING, schemaHint);
}
else {
1.5 +4 -4 xml-xerces/java/src/org/apache/xerces/impl/v2/XSDKeyrefTraverser.java
Index: XSDKeyrefTraverser.java
===================================================================
RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/v2/XSDKeyrefTraverser.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- XSDKeyrefTraverser.java 2001/09/21 16:22:28 1.4
+++ XSDKeyrefTraverser.java 2001/09/24 15:24:55 1.5
@@ -68,7 +68,7 @@
* This class contains code that is used to traverse <keyref>s.
*
* @author Neil Graham, IBM
- * @version $Id: XSDKeyrefTraverser.java,v 1.4 2001/09/21 16:22:28 sandygao Exp $
+ * @version $Id: XSDKeyrefTraverser.java,v 1.5 2001/09/24 15:24:55 sandygao Exp $
*/
class XSDKeyrefTraverser extends XSDAbstractIDConstraintTraverser {
@@ -81,7 +81,7 @@
XSDocumentInfo schemaDoc, SchemaGrammar grammar) {
// General Attribute Checking
- Object[] attrValues = fAttrChecker.checkAttributes(krElem, false, schemaDoc.fNamespaceSupport);
+ Object[] attrValues = fAttrChecker.checkAttributes(krElem, false, schemaDoc);
// create identity constraint
QName krName = (QName)attrValues[XSAttributeChecker.ATTIDX_NAME];
@@ -92,7 +92,7 @@
if(key == null) {
// reportSchemaError(SchemaMessageProvider.KeyRefReferNotFound,
// new Object[]{krName,kName});
- fAttrChecker.returnAttrArray(attrValues, schemaDoc.fNamespaceSupport);
+ fAttrChecker.returnAttrArray(attrValues, schemaDoc);
return;
}
@@ -106,7 +106,7 @@
// REVISIT: should we add IDC to element here?
grammar.addIDConstraintDecl(element, keyRef);
// and put back attributes
- fAttrChecker.returnAttrArray(attrValues, schemaDoc.fNamespaceSupport);
+ fAttrChecker.returnAttrArray(attrValues, schemaDoc);
} // traverse(Element,int,XSDocumentInfo, SchemaGrammar)
} // XSDKeyrefTraverser
1.10 +4 -4 xml-xerces/java/src/org/apache/xerces/impl/v2/XSDNotationTraverser.java
Index: XSDNotationTraverser.java
===================================================================
RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/v2/XSDNotationTraverser.java,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- XSDNotationTraverser.java 2001/09/21 16:22:28 1.9
+++ XSDNotationTraverser.java 2001/09/24 15:24:55 1.10
@@ -75,7 +75,7 @@
*
* @author Rahul Srivastava, Sun Microsystems Inc.
* @author Elena Litani, IBM
- * @version $Id: XSDNotationTraverser.java,v 1.9 2001/09/21 16:22:28 sandygao Exp $
+ * @version $Id: XSDNotationTraverser.java,v 1.10 2001/09/24 15:24:55 sandygao Exp $
*/
class XSDNotationTraverser extends XSDAbstractTraverser {
@@ -89,7 +89,7 @@
SchemaGrammar grammar) {
// General Attribute Checking for elmNode
- Object[] attrValues = fAttrChecker.checkAttributes(elmNode, true, schemaDoc.fNamespaceSupport);
+ Object[] attrValues = fAttrChecker.checkAttributes(elmNode, true, schemaDoc);
//get attributes
String nameAttr = (String) attrValues[XSAttributeChecker.ATTIDX_NAME];
@@ -99,7 +99,7 @@
if (nameAttr.length() == 0) {
//REVISIT: update error message
reportGenericSchemaError("<notation> must have a name");
- fAttrChecker.returnAttrArray(attrValues, schemaDoc.fNamespaceSupport);
+ fAttrChecker.returnAttrArray(attrValues, schemaDoc);
return null;
}
@@ -130,7 +130,7 @@
}
}
- fAttrChecker.returnAttrArray(attrValues, schemaDoc.fNamespaceSupport);
+ fAttrChecker.returnAttrArray(attrValues, schemaDoc);
return notation;
}
1.16 +11 -11 xml-xerces/java/src/org/apache/xerces/impl/v2/XSDSimpleTypeTraverser.java
Index: XSDSimpleTypeTraverser.java
===================================================================
RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/v2/XSDSimpleTypeTraverser.java,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -r1.15 -r1.16
--- XSDSimpleTypeTraverser.java 2001/09/21 16:22:28 1.15
+++ XSDSimpleTypeTraverser.java 2001/09/24 15:24:55 1.16
@@ -109,7 +109,7 @@
* </union>
*
* @author Elena Litani, IBM
- * @version $Id: XSDSimpleTypeTraverser.java,v 1.15 2001/09/21 16:22:28 sandygao Exp $
+ * @version $Id: XSDSimpleTypeTraverser.java,v 1.16 2001/09/24 15:24:55 sandygao Exp $
*/
class XSDSimpleTypeTraverser extends XSDAbstractTraverser {
@@ -135,10 +135,10 @@
// General Attribute Checking
fSchemaDoc = schemaDoc;
fGrammar = grammar;
- Object[] attrValues = fAttrChecker.checkAttributes(elmNode, true, schemaDoc.fNamespaceSupport);
+ Object[] attrValues = fAttrChecker.checkAttributes(elmNode, true, schemaDoc);
String nameAtt = (String)attrValues[XSAttributeChecker.ATTIDX_NAME];
DatatypeValidator type = traverseSimpleTypeDecl(elmNode, attrValues, schemaDoc, true);
- fAttrChecker.returnAttrArray(attrValues, schemaDoc.fNamespaceSupport);
+ fAttrChecker.returnAttrArray(attrValues, schemaDoc);
return type;
}
@@ -149,9 +149,9 @@
fSchemaDoc = schemaDoc;
fGrammar = grammar;
- Object[] attrValues = fAttrChecker.checkAttributes(elmNode, false, schemaDoc.fNamespaceSupport);
+ Object[] attrValues = fAttrChecker.checkAttributes(elmNode, false, schemaDoc);
DatatypeValidator type = traverseSimpleTypeDecl (elmNode, attrValues, schemaDoc, false);
- fAttrChecker.returnAttrArray(attrValues, schemaDoc.fNamespaceSupport);
+ fAttrChecker.returnAttrArray(attrValues, schemaDoc);
return type;
}
@@ -188,7 +188,7 @@
// update _final_ registry
//----------------------------------------------------------
XInt finalAttr = (XInt)attrValues[XSAttributeChecker.ATTIDX_FINAL];
- int finalProperty = finalAttr == null ? 0 : finalAttr.intValue();
+ int finalProperty = finalAttr == null ? schemaDoc.fFinalDefault : finalAttr.intValue();
//----------------------------------------------------------------------
//annotation?,(list|restriction|union)
@@ -201,9 +201,9 @@
}
// General Attribute Checking
- Object[] contentAttrs = fAttrChecker.checkAttributes(content, false, schemaDoc.fNamespaceSupport);
+ Object[] contentAttrs = fAttrChecker.checkAttributes(content, false, schemaDoc);
// REVISIT: when to return the array
- fAttrChecker.returnAttrArray(contentAttrs, schemaDoc.fNamespaceSupport);
+ fAttrChecker.returnAttrArray(contentAttrs, schemaDoc);
//----------------------------------------------------------------------
//use content.getLocalName for the cases there "xsd:" is a prefix, ei. "xsd:list"
@@ -404,7 +404,7 @@
String facet;
while (content != null) {
// General Attribute Checking
- Object[] attrs = fAttrChecker.checkAttributes(content, false, schemaDoc.fNamespaceSupport);
+ Object[] attrs = fAttrChecker.checkAttributes(content, false, schemaDoc);
numFacets++;
facet = DOMUtil.getLocalName(content);
if (facet.equals(SchemaSymbols.ELT_ENUMERATION)) {
@@ -412,7 +412,7 @@
String enumVal = DOMUtil.getAttrValue(content, SchemaSymbols.ATT_VALUE);
String localName;
if (baseValidator instanceof NOTATIONDatatypeValidator) {
- fAttrChecker.checkAttributes(content, false, schemaDoc.fNamespaceSupport);
+ fAttrChecker.checkAttributes(content, false, schemaDoc);
String prefix = "";
String localpart = enumVal;
int colonptr = enumVal.indexOf(":");
@@ -505,7 +505,7 @@
checkContent(simpleTypeDecl, DOMUtil.getFirstChildElement( content ), true);
}
// REVISIT: when to return the array
- fAttrChecker.returnAttrArray (attrs, schemaDoc.fNamespaceSupport);
+ fAttrChecker.returnAttrArray (attrs, schemaDoc);
content = DOMUtil.getNextSiblingElement(content);
}
if (numEnumerationLiterals > 0) {
1.5 +3 -3 xml-xerces/java/src/org/apache/xerces/impl/v2/XSDUniqueOrKeyTraverser.java
Index: XSDUniqueOrKeyTraverser.java
===================================================================
RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/v2/XSDUniqueOrKeyTraverser.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- XSDUniqueOrKeyTraverser.java 2001/09/21 16:22:29 1.4
+++ XSDUniqueOrKeyTraverser.java 2001/09/24 15:24:55 1.5
@@ -68,7 +68,7 @@
* <unique>s.
*
* @author Neil Graham, IBM
- * @version $Id: XSDUniqueOrKeyTraverser.java,v 1.4 2001/09/21 16:22:29 sandygao Exp $
+ * @version $Id: XSDUniqueOrKeyTraverser.java,v 1.5 2001/09/24 15:24:55 sandygao Exp $
*/
class XSDUniqueOrKeyTraverser extends XSDAbstractIDConstraintTraverser {
@@ -82,7 +82,7 @@
XSDocumentInfo schemaDoc, SchemaGrammar grammar) {
// General Attribute Checking
- Object[] attrValues = fAttrChecker.checkAttributes(uElem, false, schemaDoc.fNamespaceSupport);
+ Object[] attrValues = fAttrChecker.checkAttributes(uElem, false, schemaDoc);
// create identity constraint
String uName = (String)attrValues[XSAttributeChecker.ATTIDX_NAME];
@@ -103,6 +103,6 @@
grammar.addIDConstraintDecl(element, uniqueOrKey);
// and fix up attributeChecker
- fAttrChecker.returnAttrArray(attrValues, schemaDoc.fNamespaceSupport);
+ fAttrChecker.returnAttrArray(attrValues, schemaDoc);
} // traverse(Element,XSDElementDecl,XSDocumentInfo, SchemaGrammar)
} // XSDUniqueOrKeyTraverser
1.8 +10 -73 xml-xerces/java/src/org/apache/xerces/impl/v2/XSDWildcardTraverser.java
Index: XSDWildcardTraverser.java
===================================================================
RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/v2/XSDWildcardTraverser.java,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- XSDWildcardTraverser.java 2001/09/21 17:57:17 1.7
+++ XSDWildcardTraverser.java 2001/09/24 15:24:55 1.8
@@ -87,7 +87,7 @@
* @author Rahul Srivastava, Sun Microsystems Inc.
* @author Sandy Gao, IBM
*
- * @version $Id: XSDWildcardTraverser.java,v 1.7 2001/09/21 17:57:17 sandygao Exp $
+ * @version $Id: XSDWildcardTraverser.java,v 1.8 2001/09/24 15:24:55 sandygao Exp $
*/
class XSDWildcardTraverser extends XSDAbstractTraverser {
@@ -117,8 +117,10 @@
SchemaGrammar grammar) {
// General Attribute Checking for elmNode
- Object[] attrValues = fAttrChecker.checkAttributes(elmNode, false, schemaDoc.fNamespaceSupport);
+ Object[] attrValues = fAttrChecker.checkAttributes(elmNode, false, schemaDoc);
XSWildcardDecl wildcard = traverseWildcardDecl(elmNode, attrValues, schemaDoc, grammar);
+
+ // for <any>, need to create a new particle to reflect the min/max values
XSParticleDecl particle = null;
if (wildcard != null) {
int min = ((XInt)attrValues[XSAttributeChecker.ATTIDX_MINOCCURS]).intValue();
@@ -132,7 +134,7 @@
}
}
- fAttrChecker.returnAttrArray(attrValues, schemaDoc.fNamespaceSupport);
+ fAttrChecker.returnAttrArray(attrValues, schemaDoc);
return particle;
}
@@ -151,9 +153,9 @@
SchemaGrammar grammar) {
// General Attribute Checking for elmNode
- Object[] attrValues = fAttrChecker.checkAttributes(elmNode, false, schemaDoc.fNamespaceSupport);
+ Object[] attrValues = fAttrChecker.checkAttributes(elmNode, false, schemaDoc);
XSWildcardDecl wildcard = traverseWildcardDecl(elmNode, attrValues, schemaDoc, grammar);
- fAttrChecker.returnAttrArray(attrValues, schemaDoc.fNamespaceSupport);
+ fAttrChecker.returnAttrArray(attrValues, schemaDoc);
return wildcard;
}
@@ -172,77 +174,12 @@
XSDocumentInfo schemaDoc,
SchemaGrammar grammar) {
- XSWildcardDecl wildcard = new XSWildcardDecl();
-
//get all attributes
- String namespaceAttr = (String) attrValues[XSAttributeChecker.ATTIDX_NAMESPACE];
- XInt processContentsAttr = (XInt) attrValues[XSAttributeChecker.ATTIDX_PROCESSCONTENTS];
+ XSWildcardDecl wildcard = (XSWildcardDecl) attrValues[XSAttributeChecker.ATTIDX_NAMESPACE];
+ XInt processContentsAttr = (XInt) attrValues[XSAttributeChecker.ATTIDX_PROCESSCONTENTS];
+ // process contents
wildcard.fProcessContents = processContentsAttr.shortValue();
-
- wildcard.fType = XSWildcardDecl.WILDCARD_ANY;
- if (namespaceAttr.equals(SchemaSymbols.ATTVAL_TWOPOUNDANY)) {
- wildcard.fType = XSWildcardDecl.WILDCARD_ANY;
- }
- else if (namespaceAttr.equals(SchemaSymbols.ATTVAL_TWOPOUNDOTHER)) {
- wildcard.fType = XSWildcardDecl.WILDCARD_OTHER;
- if (schemaDoc.fTargetNamespace.length() == 0) {
- wildcard.fNamespaceList = new String[1];
- wildcard.fNamespaceList[0] = schemaDoc.fTargetNamespace;
- } else {
- wildcard.fNamespaceList = new String[2];
- wildcard.fNamespaceList[0] = schemaDoc.fTargetNamespace;
- wildcard.fNamespaceList[1] = fSchemaHandler.EMPTY_STRING;
- }
- }
- else {
- // REVISIT: namespace should be return in String[] or Vector,
- // then we don't need to tokenize them again
-
- //namespace = "##local" OR
- //namespace = "##targetNamespace" OR
- //namespace = "anyURI" OR
- //namespace = "anyURI ##local" OR
- //namespace = "anyURI ##targetNamespace"
-
- StringTokenizer tokens = new StringTokenizer(namespaceAttr);
- String[] namespaceList = new String[tokens.countTokens()];
- int i = 0;
- String token;
- String tempNamespace;
- while (tokens.hasMoreTokens()) {
- token = tokens.nextToken();
- if (token.equals(SchemaSymbols.ATTVAL_TWOPOUNDLOCAL)) {
- tempNamespace = fSchemaHandler.EMPTY_STRING;
- }
- else if (token.equals(SchemaSymbols.ATTVAL_TWOPOUNDTARGETNS)) {
- tempNamespace = schemaDoc.fTargetNamespace;
- }
- else {
- // we have found namespace URI here
- tempNamespace = token;
- }
-
- //check for duplicate namespaces in the list
- int j=0;
- for (; j<i; j++) {
- if (tempNamespace.equals(namespaceList[j]))
- break;
- }
- if (j == i) {
- // this means traversed whole for loop
- // i.e. not a duplicate namespace
- namespaceList[i] = tempNamespace;
- i++;
- }
- }
- if (i == namespaceList.length) {
- wildcard.fNamespaceList = namespaceList;
- } else {
- wildcard.fNamespaceList = new String[i];
- System.arraycopy(namespaceList, 0, wildcard.fNamespaceList, 0, i);
- }
- }
//check content
Element child = DOMUtil.getFirstChildElement(elmNode);
1.10 +10 -7 xml-xerces/java/src/org/apache/xerces/impl/v2/XSDocumentInfo.java
Index: XSDocumentInfo.java
===================================================================
RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/v2/XSDocumentInfo.java,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- XSDocumentInfo.java 2001/09/21 16:22:29 1.9
+++ XSDocumentInfo.java 2001/09/24 15:24:55 1.10
@@ -72,7 +72,7 @@
* affect the contents of that schema document alone.
*
* @author Neil Graham, IBM
- * @version $Id: XSDocumentInfo.java,v 1.9 2001/09/21 16:22:29 sandygao Exp $
+ * @version $Id: XSDocumentInfo.java,v 1.10 2001/09/24 15:24:55 sandygao Exp $
*/
class XSDocumentInfo {
@@ -89,8 +89,8 @@
protected boolean fAreLocalElementsQualified;
// [block | final]Default
- protected int fBlockDefault;
- protected int fFinalDefault;
+ protected short fBlockDefault;
+ protected short fFinalDefault;
// targetNamespace
protected String fTargetNamespace;
@@ -98,21 +98,24 @@
// the root of the schema Document tree itself
protected Document fSchemaDoc;
+ // to store the ID values appearing in this document
+ protected Hashtable fIdDefs = new Hashtable();
+
XSDocumentInfo (Document schemaDoc, XSAttributeChecker attrChecker) {
fSchemaDoc = schemaDoc;
fNamespaceSupport = new SchemaNamespaceSupport();
if(schemaDoc != null) {
Element root = DOMUtil.getRoot(schemaDoc);
- Object[] schemaAttrs = attrChecker.checkAttributes(root, true, fNamespaceSupport);
+ Object[] schemaAttrs = attrChecker.checkAttributes(root, true, this);
fAreLocalAttributesQualified =
((XInt)schemaAttrs[XSAttributeChecker.ATTIDX_AFORMDEFAULT]).intValue() == SchemaSymbols.FORM_QUALIFIED;
fAreLocalElementsQualified =
((XInt)schemaAttrs[XSAttributeChecker.ATTIDX_EFORMDEFAULT]).intValue() == SchemaSymbols.FORM_QUALIFIED;
fBlockDefault =
- ((XInt)schemaAttrs[XSAttributeChecker.ATTIDX_BLOCKDEFAULT]).intValue();
+ ((XInt)schemaAttrs[XSAttributeChecker.ATTIDX_BLOCKDEFAULT]).shortValue();
fFinalDefault =
- ((XInt)schemaAttrs[XSAttributeChecker.ATTIDX_FINALDEFAULT]).intValue();
+ ((XInt)schemaAttrs[XSAttributeChecker.ATTIDX_FINALDEFAULT]).shortValue();
fTargetNamespace =
(String)schemaAttrs[XSAttributeChecker.ATTIDX_TARGETNAMESPACE];
//if (fTargetNamespace == null)
@@ -121,7 +124,7 @@
fNamespaceSupportRoot = new SchemaNamespaceSupport(fNamespaceSupport);
// REVISIT: we can't return, becaues we can't pop fNamespaceSupport
- //attrChecker.returnAttrArray(schemaAttrs, fNamespaceSupport);
+ //attrChecker.returnAttrArray(schemaAttrs, this);
}
}
1.3 +25 -1 xml-xerces/java/src/org/apache/xerces/impl/v2/XSWildcardDecl.java
Index: XSWildcardDecl.java
===================================================================
RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/v2/XSWildcardDecl.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- XSWildcardDecl.java 2001/09/21 17:57:17 1.2
+++ XSWildcardDecl.java 2001/09/24 15:24:55 1.3
@@ -62,7 +62,7 @@
* schema component is an <any> or <anyAttribute> element information item
*
* @author Sandy Gao, IBM
- * @version $Id: XSWildcardDecl.java,v 1.2 2001/09/21 17:57:17 sandygao Exp $
+ * @version $Id: XSWildcardDecl.java,v 1.3 2001/09/24 15:24:55 sandygao Exp $
*/
public class XSWildcardDecl {
@@ -90,5 +90,29 @@
// for WILDCARD_LIST, it means one of the namespaces in the list
// for WILDCARD_OTHER, it means not any of the namespaces in the list
public String[] fNamespaceList;
+
+ /**
+ * Whether a namespace is allowed by this wildcard
+ */
+ public boolean allowNamespace(String namespace) {
+ // ##any allows any namespace
+ if (fType == WILDCARD_ANY)
+ return true;
+
+ // ##other doesn't allow target namespace and empty namespace
+ if (fType == WILDCARD_OTHER) {
+ return namespace != fNamespaceList[0] &&
+ namespace != fNamespaceList[1];
+ }
+
+ // list allows any one in the list
+ int listNum = fNamespaceList.length;
+ for (int i = 0; i < listNum; i++) {
+ if (namespace == fNamespaceList[i])
+ return true;
+ }
+
+ return false;
+ }
} // class XSWildcardDecl
---------------------------------------------------------------------
To unsubscribe, e-mail: xerces-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: xerces-cvs-help@xml.apache.org