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/05 23:16:03 UTC
cvs commit: xml-xerces/java/src/org/apache/xerces/impl/v2/datatypes AbstractDatatypeValidator.java AbstractStringValidator.java IDDatatypeValidator.java IDREFDatatypeValidator.java QNameDatatypeValidator.java
sandygao 01/09/05 14:16:03
Modified: java/src/org/apache/xerces/impl/v2 SchemaGrammar.java
SchemaSymbols.java SchemaValidator.java
XSAttributeChecker.java XSDAbstractTraverser.java
XSDElementTraverser.java XSDHandler.java
XSDSimpleTypeTraverser.java XSType.java
java/src/org/apache/xerces/impl/v2/datatypes
AbstractDatatypeValidator.java
AbstractStringValidator.java
IDDatatypeValidator.java
IDREFDatatypeValidator.java
QNameDatatypeValidator.java
Log:
Again lots of changes. Now we can validate a simple element against a simple simpleType. Cheers.
Revision Changes Path
1.6 +80 -35 xml-xerces/java/src/org/apache/xerces/impl/v2/SchemaGrammar.java
Index: SchemaGrammar.java
===================================================================
RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/v2/SchemaGrammar.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- SchemaGrammar.java 2001/09/05 18:06:31 1.5
+++ SchemaGrammar.java 2001/09/05 21:16:02 1.6
@@ -66,7 +66,7 @@
import java.util.Hashtable;
import java.util.Vector;
/**
- * @version $Id: SchemaGrammar.java,v 1.5 2001/09/05 18:06:31 neilg Exp $
+ * @version $Id: SchemaGrammar.java,v 1.6 2001/09/05 21:16:02 sandygao Exp $
*/
public class SchemaGrammar {
@@ -101,10 +101,10 @@
private String fElementDeclTypeNS[][];
private int fElementDeclTypeDecl[][];
private short fElementDeclMiscFlags[][];
- private int fElementDeclBlockSet[][];
- private int fElementDeclFinalSet[][];
+ private short fElementDeclBlockSet[][];
+ private short fElementDeclFinalSet[][];
private String fElementDeclDefault[][];
- private int fElementDeclSubGroupNS[][];
+ private String fElementDeclSubGroupNS[][];
private int fElementDeclSubGroupIdx[][];
private Vector fElementDeclUnique[][];
private Vector fElementDeclKey[][];
@@ -161,18 +161,18 @@
fSymbolTable = symbolTable;
// element decl
- fElementDeclName = new QName[INITIAL_CHUNK_COUNT][];
- fElementDeclTypeNS = new String[INITIAL_CHUNK_COUNT][];
- fElementDeclTypeDecl = new int[INITIAL_CHUNK_COUNT][];
- fElementDeclMiscFlags = new short[INITIAL_CHUNK_COUNT][];
- fElementDeclBlockSet = new int[INITIAL_CHUNK_COUNT][];
- fElementDeclFinalSet = new int[INITIAL_CHUNK_COUNT][];
- fElementDeclDefault = new String[INITIAL_CHUNK_COUNT][];
- fElementDeclSubGroupNS = new int[INITIAL_CHUNK_COUNT][];
- fElementDeclSubGroupIdx = new int[INITIAL_CHUNK_COUNT][];
- fElementDeclUnique = new Vector[INITIAL_CHUNK_COUNT][];
- fElementDeclKey = new Vector[INITIAL_CHUNK_COUNT][];
- fElementDeclKeyRef = new Vector[INITIAL_CHUNK_COUNT][];
+ fElementDeclName = new QName[INITIAL_CHUNK_COUNT][CHUNK_SIZE];
+ fElementDeclTypeNS = new String[INITIAL_CHUNK_COUNT][CHUNK_SIZE];
+ fElementDeclTypeDecl = new int[INITIAL_CHUNK_COUNT][CHUNK_SIZE];
+ fElementDeclMiscFlags = new short[INITIAL_CHUNK_COUNT][CHUNK_SIZE];
+ fElementDeclBlockSet = new short[INITIAL_CHUNK_COUNT][CHUNK_SIZE];
+ fElementDeclFinalSet = new short[INITIAL_CHUNK_COUNT][CHUNK_SIZE];
+ fElementDeclDefault = new String[INITIAL_CHUNK_COUNT][CHUNK_SIZE];
+ fElementDeclSubGroupNS = new String[INITIAL_CHUNK_COUNT][CHUNK_SIZE];
+ fElementDeclSubGroupIdx = new int[INITIAL_CHUNK_COUNT][CHUNK_SIZE];
+ fElementDeclUnique = new Vector[INITIAL_CHUNK_COUNT][CHUNK_SIZE];
+ fElementDeclKey = new Vector[INITIAL_CHUNK_COUNT][CHUNK_SIZE];
+ fElementDeclKeyRef = new Vector[INITIAL_CHUNK_COUNT][CHUNK_SIZE];
// attribute declarations
fAttributeDeclName = new QName[INITIAL_CHUNK_COUNT][];
@@ -197,8 +197,8 @@
//REVISIT: as temporary solution store complexTypes/simpleTypes as objects
// Add XML Schema datatypes
- fTypeDeclQName = new QName[INITIAL_CHUNK_COUNT][];
- fTypeDeclType = new XSType[INITIAL_CHUNK_COUNT][];
+ fTypeDeclQName = new QName[INITIAL_CHUNK_COUNT][CHUNK_SIZE];
+ fTypeDeclType = new XSType[INITIAL_CHUNK_COUNT][CHUNK_SIZE];
} // <init>(SymbolTable)
@@ -331,8 +331,6 @@
topLevelTypeDecls.put(SchemaSymbols.ATTVAL_HEXBINARY, new Integer(typeIndex++));
fTypeDeclType[0][typeIndex] = new NOTATIONDatatypeValidator(anySimpleType, null, false);
topLevelTypeDecls.put(SchemaSymbols.ATTVAL_NOTATION, new Integer(typeIndex++));
- fTypeDeclType[0][typeIndex] = new QNameDatatypeValidator(anySimpleType, null, false);
- topLevelTypeDecls.put(SchemaSymbols.ATTVAL_QNAME, new Integer(typeIndex++));
facets.clear();
facets.put(SchemaSymbols.ELT_WHITESPACE, SchemaSymbols.ATTVAL_REPLACE);
@@ -346,7 +344,8 @@
topLevelTypeDecls.put(SchemaSymbols.ATTVAL_TOKEN, new Integer(typeIndex++));
facets.clear();
facets.put(SchemaSymbols.ELT_WHITESPACE, SchemaSymbols.ATTVAL_COLLAPSE);
- facets.put(SchemaSymbols.ELT_PATTERN , "([a-zA-Z]{2}|[iI]-[a-zA-Z]+|[xX]-[a-zA-Z]+)(-[a-zA-Z]+)*" );
+ //REVISIT: won't run: regexparser, locale, resource bundle
+ //facets.put(SchemaSymbols.ELT_PATTERN , "([a-zA-Z]{2}|[iI]-[a-zA-Z]+|[xX]-[a-zA-Z]+)(-[a-zA-Z]+)*");
fTypeDeclType[0][typeIndex] = new StringDatatypeValidator(tokenDV, facets, false);
topLevelTypeDecls.put(SchemaSymbols.ATTVAL_LANGUAGE, new Integer(typeIndex++));
facets.clear();
@@ -361,6 +360,10 @@
DatatypeValidator ncnameDV = new StringDatatypeValidator(nameDV, facets, false);
fTypeDeclType[0][typeIndex] = ncnameDV;
topLevelTypeDecls.put(SchemaSymbols.ATTVAL_NCNAME, new Integer(typeIndex++));
+ DatatypeValidator qnameDV = new QNameDatatypeValidator(anySimpleType, null, false);
+ ((QNameDatatypeValidator)qnameDV).setNCNameValidator(ncnameDV);
+ fTypeDeclType[0][typeIndex] = qnameDV;
+ topLevelTypeDecls.put(SchemaSymbols.ATTVAL_QNAME, new Integer(typeIndex++));
fTypeDeclType[0][typeIndex] = new IDDatatypeValidator(ncnameDV, null, false);
topLevelTypeDecls.put(SchemaSymbols.ATTVAL_ID, new Integer(typeIndex++));
DatatypeValidator idrefDV = new IDREFDatatypeValidator(ncnameDV, null, false);
@@ -402,19 +405,6 @@
/**
- * getElementIndex
- *
- * @param elementName
- *
- * @return REVISIT: previously if failed returned false
- */
- public int getElementIndex(String elementName) {
- Integer elementIndex = (Integer)topLevelElemDecls.get(elementName);
- return elementIndex == null ? -1 : elementIndex.intValue();
- } // getElementDecl(int,XSElementDecl):XSElementDecl
-
-
- /**
* addElementDecl
*
* @param name
@@ -428,7 +418,15 @@
int elementIndex = fElementDeclCount++;
int chunk = elementIndex >> CHUNK_SHIFT;
int index = elementIndex & CHUNK_MASK;
- fElementDeclName[chunk][index].setValues(element.fQName);
+ fElementDeclName[chunk][index] = new QName(element.fQName);
+ fElementDeclTypeNS[chunk][index] = element.fTypeNS;
+ fElementDeclTypeDecl[chunk][index] = element.fTypeIdx;
+ fElementDeclMiscFlags[chunk][index] = element.fElementMiscFlags;
+ fElementDeclBlockSet[chunk][index] = element.fBlock;
+ fElementDeclFinalSet[chunk][index] = element.fFinal;
+ fElementDeclDefault[chunk][index] = element.fDefault;
+ fElementDeclSubGroupNS[chunk][index] = element.fSubGroupNS;
+ fElementDeclSubGroupIdx[chunk][index] = element.fSubGroupIdx;
//REVISIT: other fields
topLevelElemDecls.put(element.fQName.localpart, new Integer(elementIndex));
@@ -437,6 +435,19 @@
}
/**
+ * getElementIndex
+ *
+ * @param elementName
+ *
+ * @return REVISIT: previously if failed returned false
+ */
+ public int getElementIndex(String elementName) {
+ Integer elementIndex = (Integer)topLevelElemDecls.get(elementName);
+ return elementIndex == null ? -1 : elementIndex.intValue();
+ } // getElementDecl(int,XSElementDecl):XSElementDecl
+
+
+ /**
* getElementDecl
*
* @param elementDeclIndex
@@ -455,6 +466,14 @@
int index = elementDeclIndex & CHUNK_MASK;
elementDecl.fQName.setValues(fElementDeclName[chunk][index]);
+ elementDecl.fTypeNS = fElementDeclTypeNS[chunk][index];
+ elementDecl.fTypeIdx = fElementDeclTypeDecl[chunk][index];
+ elementDecl.fElementMiscFlags = fElementDeclMiscFlags[chunk][index];
+ elementDecl.fBlock = fElementDeclBlockSet[chunk][index];
+ elementDecl.fFinal = fElementDeclFinalSet[chunk][index];
+ elementDecl.fDefault = fElementDeclDefault[chunk][index];
+ elementDecl.fSubGroupNS = fElementDeclSubGroupNS[chunk][index];
+ elementDecl.fSubGroupIdx = fElementDeclSubGroupIdx[chunk][index];
// REVISIT:
// add code
@@ -480,6 +499,19 @@
/**
+ * getAttributeIndex
+ *
+ * @param attributeName
+ *
+ * @return REVISIT: previously if failed returned false
+ */
+ public int getAttributeIndex(String attributeName) {
+ Integer attributeIndex = (Integer)topLevelAttrDecls.get(attributeName);
+ return attributeIndex == null ? -1 : attributeIndex.intValue();
+ } // getAttributeIndex(String):int
+
+
+ /**
* getAttributeDecl
*
* @param attributeDeclIndex
@@ -499,6 +531,19 @@
//REVISIT: add code
return attributeDecl;
+ } // getAttributeDecl
+
+ /**
+ * getAttributeDecl
+ *
+ * @param attributeName
+ * @param attributeDecl The values of this structure are set by this call.
+ *
+ * @return REVISIT: previously if failed returned false
+ */
+ public XSAttributeDecl getAttributeDecl(String attributeName, XSAttributeDecl attributeDecl) {
+ int attributeDeclIndex = getAttributeIndex(attributeName);
+ return getAttributeDecl(attributeDeclIndex, attributeDecl);
} // getAttributeDecl
/**
1.6 +1 -9 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.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- SchemaSymbols.java 2001/09/05 18:06:31 1.5
+++ SchemaSymbols.java 2001/09/05 21:16:02 1.6
@@ -62,7 +62,7 @@
* Collection of symbols used to parse a Schema Grammar.
*
* @author jeffrey rodriguez
- * @version $Id: SchemaSymbols.java,v 1.5 2001/09/05 18:06:31 neilg Exp $
+ * @version $Id: SchemaSymbols.java,v 1.6 2001/09/05 21:16:02 sandygao Exp $
*/
public final class SchemaSymbols {
// schema namespaces
@@ -228,14 +228,6 @@
public static final String ATTVAL_UNSIGNEDSHORT = "unsignedShort";
public static final String ATTVAL_YEAR = "year";
public static final String ATTVAL_YEARMONTH = "yearMonth";
-
- // from default value
- public static final int FROM_DEFAULT = 0x40000000;
- public static final int REAL_VALUE = 0x3fffffff;
-
- // boolean true/false
- public static final int BOOLEAN_FALSE = 0;
- public static final int BOOLEAN_TRUE = 1;
// block/final values
public static final int EMPTY_SET = 0;
1.4 +36 -11 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.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- SchemaValidator.java 2001/09/04 22:43:17 1.3
+++ SchemaValidator.java 2001/09/05 21:16:02 1.4
@@ -62,7 +62,10 @@
import org.apache.xerces.impl.Constants;
import org.apache.xerces.impl.XMLErrorReporter;
import org.apache.xerces.impl.msg.XMLMessageFormatter;
+import org.apache.xerces.xni.parser.XMLEntityResolver;
+import org.apache.xerces.xni.parser.XMLInputSource;
+import java.io.IOException;
import org.apache.xerces.util.SymbolTable;
import org.apache.xerces.util.XMLChar;
@@ -107,7 +110,7 @@
* @author Andy Clark, IBM
* @author Jeffrey Rodriguez IBM
*
- * @version $Id: SchemaValidator.java,v 1.3 2001/09/04 22:43:17 sandygao Exp $
+ * @version $Id: SchemaValidator.java,v 1.4 2001/09/05 21:16:02 sandygao Exp $
*/
public class SchemaValidator
implements XMLComponent, XMLDocumentHandler {
@@ -180,7 +183,10 @@
/** Error reporter. */
protected XMLErrorReporter fErrorReporter;
-
+
+ /** Entity resolver */
+ protected XMLEntityResolver fEntityResolver;
+
// handlers
/** Document handler. */
@@ -391,10 +397,21 @@
// get needed components
fErrorReporter = (XMLErrorReporter)componentManager.getProperty(Constants.XERCES_PROPERTY_PREFIX+Constants.ERROR_REPORTER_PROPERTY);
fSymbolTable = (SymbolTable)componentManager.getProperty(Constants.XERCES_PROPERTY_PREFIX+Constants.SYMBOL_TABLE_PROPERTY);
+ fEntityResolver = (XMLEntityResolver)componentManager.getProperty(Constants.XERCES_PROPERTY_PREFIX+Constants.ENTITY_RESOLVER_PROPERTY);
+ if (fEntityResolver == null)
+ fEntityResolver = new XMLEntityResolver() {
+ public XMLInputSource resolveEntity(String publicId, String systemId,
+ String baseSystemId)
+ throws XNIException, IOException {
+ return new XMLInputSource(null, systemId, baseSystemId);
+ }
+ };
+
fGrammarResolver = new XSGrammarResolver();
+ fGrammarResolver.putGrammar(SchemaSymbols.URI_SCHEMAFORSCHEMA, SchemaGrammar.SG_SchemaNS);
fSchemaHandler = new XSDHandler(fGrammarResolver, fErrorReporter,
- null,//fEntityResolver,
+ fEntityResolver,
fSymbolTable);
fElementDepth = -1;
@@ -693,14 +710,21 @@
//???handleEndElement(element, false);
System.out.println("endElement: " + element.rawname);
- SchemaGrammar grammar = fGrammarResolver.getGrammar(fTempElementDecl.fTypeNS);
- XSType elemType = grammar.getTypeDecl(fTempElementDecl.fTypeIdx);
- if (elemType.getXSType() == XSType.SIMPLE_TYPE)
- try {
- ((DatatypeValidator)elemType).validate(fBuffer.toString(), null);
- } catch (InvalidDatatypeValueException e) {
- System.out.println("error: " + e.toString());
+ SchemaGrammar grammar = null;
+ if (fTempElementDecl.fTypeNS != null)
+ grammar = fGrammarResolver.getGrammar(fTempElementDecl.fTypeNS);
+ if (grammar != null) {
+ XSType elemType = grammar.getTypeDecl(fTempElementDecl.fTypeIdx);
+ if (elemType.getXSType() == XSType.SIMPLE_TYPE) {
+ try {
+ DatatypeValidator dv = (DatatypeValidator)elemType;
+ String content = XSAttributeChecker.normalize(fBuffer.toString(), dv.getWSFacet());
+ dv.validate(content, null);
+ } catch (InvalidDatatypeValueException e) {
+ System.out.println("error: " + e.toString());
+ }
}
+ }
if (fDocumentHandler != null) {
fDocumentHandler.endElement(element);
@@ -1222,7 +1246,8 @@
}
fSchemaGrammar = fGrammarResolver.getGrammar(element.uri);
- fTempElementDecl = fSchemaGrammar.getElementDecl(element.localpart, fTempElementDecl);
+ if (fSchemaGrammar != null)
+ fTempElementDecl = fSchemaGrammar.getElementDecl(element.localpart, fTempElementDecl);
fBuffer.setLength(0);
}
1.10 +105 -53 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.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- XSAttributeChecker.java 2001/09/04 22:43:17 1.9
+++ XSAttributeChecker.java 2001/09/05 21:16:02 1.10
@@ -82,13 +82,13 @@
* is present.
*
* Things need revisiting:
- * - Checking on non-schema namespace attributes
+ * - Whether to return non-schema attributes/values
* - We need NamespaceScope to generate QName
* - Do we need to update NamespaceScope and ErrorReporter when reset()?
* - Should have the datatype validators return compiled value
* - Should return compiled form for wildcard namespace
*
- * @version $Id: XSAttributeChecker.java,v 1.9 2001/09/04 22:43:17 sandygao Exp $
+ * @version $Id: XSAttributeChecker.java,v 1.10 2001/09/05 21:16:02 sandygao Exp $
*/
public class XSAttributeChecker {
@@ -129,29 +129,15 @@
public static final int ATTIDX_VERSION = ATTIDX_COUNT++;
public static final int ATTIDX_XPATH = ATTIDX_COUNT++;
public static final int ATTIDX_FROMDEFAULT = ATTIDX_COUNT++;
- public static final int ATTIDX_OTHERVALUES = ATTIDX_COUNT++;
+ //public static final int ATTIDX_OTHERVALUES = ATTIDX_COUNT++;
+ public static final int ATTIDX_ISRETURNED = ATTIDX_COUNT++;
// constants to return
- private static Integer[] INTD_CONSTANTS = {new Integer(0 | SchemaSymbols.FROM_DEFAULT),
- new Integer(1 | SchemaSymbols.FROM_DEFAULT),
- new Integer(2 | SchemaSymbols.FROM_DEFAULT)};
- private static Integer INTD_ONE = INTD_CONSTANTS[1];
- private static Integer INTD_TRUE = INTD_CONSTANTS[SchemaSymbols.BOOLEAN_TRUE];
- private static Integer INTD_FALSE = INTD_CONSTANTS[SchemaSymbols.BOOLEAN_FALSE];
- private static Integer INTD_QUALIFIED = INTD_CONSTANTS[SchemaSymbols.FORM_QUALIFIED];
- private static Integer INTD_UNQUALIFIED = INTD_CONSTANTS[SchemaSymbols.FORM_UNQUALIFIED];
- private static Integer INTD_EMPTY_SET = INTD_CONSTANTS[SchemaSymbols.EMPTY_SET];
- private static Integer INTD_ANY_STRICT = INTD_CONSTANTS[SchemaSymbols.ANY_STRICT];
- private static Integer INTD_USE_OPTIONAL = INTD_CONSTANTS[SchemaSymbols.USE_OPTIONAL];
-
- // integer values
private static Integer[] INT_CONSTANTS = {new Integer(0),
new Integer(1),
new Integer(2)};
- private static Integer INT_ZERO = INT_CONSTANTS[1];
+ private static Integer INT_ZERO = INT_CONSTANTS[0];
private static Integer INT_ONE = INT_CONSTANTS[1];
- private static Integer INT_TRUE = INT_CONSTANTS[SchemaSymbols.BOOLEAN_TRUE];
- private static Integer INT_FALSE = INT_CONSTANTS[SchemaSymbols.BOOLEAN_FALSE];
private static Integer INT_QUALIFIED = INT_CONSTANTS[SchemaSymbols.FORM_QUALIFIED];
private static Integer INT_UNQUALIFIED = INT_CONSTANTS[SchemaSymbols.FORM_UNQUALIFIED];
private static Integer INT_EMPTY_SET = INT_CONSTANTS[SchemaSymbols.EMPTY_SET];
@@ -164,7 +150,7 @@
private static Integer INT_WS_PRESERVE = INT_CONSTANTS[SchemaSymbols.WS_PRESERVE];
private static Integer INT_WS_REPLACE = INT_CONSTANTS[SchemaSymbols.WS_REPLACE];
private static Integer INT_WS_COLLAPSE = INT_CONSTANTS[SchemaSymbols.WS_COLLAPSE];
- private static Integer INT_UNBOUNDED = INT_CONSTANTS[SchemaSymbols.OCCURRENCE_UNBOUNDED];
+ private static Integer INT_UNBOUNDED = new Integer(SchemaSymbols.OCCURRENCE_UNBOUNDED);
// the prefix to distinguish gloval vs. local; name vs. ref
protected static String PRE_GLOBAL = "G_";
@@ -288,11 +274,11 @@
allAttrs[ATT_ABSTRACT_D] = new OneAttr(SchemaSymbols.ATT_ABSTRACT,
DT_BOOLEAN,
ATTIDX_ABSTRACT,
- INTD_FALSE);
+ Boolean.FALSE);
allAttrs[ATT_ATTRIBUTE_FD_D] = new OneAttr(SchemaSymbols.ATT_ATTRIBUTEFORMDEFAULT,
DT_FORM,
ATTIDX_AFORMDEFAULT,
- INTD_UNQUALIFIED);
+ INT_UNQUALIFIED);
allAttrs[ATT_BASE_R] = new OneAttr(SchemaSymbols.ATT_BASE,
DT_QNAME,
ATTIDX_BASE,
@@ -312,7 +298,7 @@
allAttrs[ATT_BLOCK_D_D] = new OneAttr(SchemaSymbols.ATT_BLOCKDEFAULT,
DT_BLOCK,
ATTIDX_BLOCKDEFAULT,
- INTD_EMPTY_SET);
+ INT_EMPTY_SET);
allAttrs[ATT_DEFAULT_N] = new OneAttr(SchemaSymbols.ATT_DEFAULT,
DT_STRING,
ATTIDX_DEFAULT,
@@ -320,7 +306,7 @@
allAttrs[ATT_ELEMENT_FD_D] = new OneAttr(SchemaSymbols.ATT_ELEMENTFORMDEFAULT,
DT_FORM,
ATTIDX_EFORMDEFAULT,
- INTD_UNQUALIFIED);
+ INT_UNQUALIFIED);
allAttrs[ATT_FINAL_N] = new OneAttr(SchemaSymbols.ATT_FINAL,
DT_FINAL,
ATTIDX_FINAL,
@@ -332,7 +318,7 @@
allAttrs[ATT_FINAL_D_D] = new OneAttr(SchemaSymbols.ATT_FINALDEFAULT,
DT_FINAL,
ATTIDX_FINALDEFAULT,
- INTD_EMPTY_SET);
+ INT_EMPTY_SET);
allAttrs[ATT_FIXED_N] = new OneAttr(SchemaSymbols.ATT_FIXED,
DT_STRING,
ATTIDX_FIXED,
@@ -340,7 +326,7 @@
allAttrs[ATT_FIXED_D] = new OneAttr(SchemaSymbols.ATT_FIXED,
DT_BOOLEAN,
ATTIDX_FIXED,
- INTD_FALSE);
+ Boolean.FALSE);
allAttrs[ATT_FORM_N] = new OneAttr(SchemaSymbols.ATT_FORM,
DT_FORM,
ATTIDX_FORM,
@@ -356,11 +342,11 @@
allAttrs[ATT_MAXOCCURS_D] = new OneAttr(SchemaSymbols.ATT_MAXOCCURS,
DT_MAXOCCURS,
ATTIDX_MAXOCCURS,
- INTD_ONE);
+ INT_ONE);
allAttrs[ATT_MAXOCCURS1_D] = new OneAttr(SchemaSymbols.ATT_MAXOCCURS,
DT_MAXOCCURS1,
ATTIDX_MAXOCCURS,
- INTD_ONE);
+ INT_ONE);
allAttrs[ATT_MEMBER_T_N] = new OneAttr(SchemaSymbols.ATT_MEMBERTYPES,
DT_MEMBERTYPES,
ATTIDX_MEMBERTYPES,
@@ -368,15 +354,15 @@
allAttrs[ATT_MINOCCURS_D] = new OneAttr(SchemaSymbols.ATT_MINOCCURS,
DT_NONNEGINT,
ATTIDX_MINOCCURS,
- INTD_ONE);
+ INT_ONE);
allAttrs[ATT_MINOCCURS1_D] = new OneAttr(SchemaSymbols.ATT_MINOCCURS,
DT_MINOCCURS1,
ATTIDX_MINOCCURS,
- INTD_ONE);
+ INT_ONE);
allAttrs[ATT_MIXED_D] = new OneAttr(SchemaSymbols.ATT_MIXED,
DT_BOOLEAN,
ATTIDX_MIXED,
- INTD_FALSE);
+ Boolean.FALSE);
allAttrs[ATT_MIXED_N] = new OneAttr(SchemaSymbols.ATT_MIXED,
DT_BOOLEAN,
ATTIDX_MIXED,
@@ -396,11 +382,11 @@
allAttrs[ATT_NILLABLE_D] = new OneAttr(SchemaSymbols.ATT_NILLABLE,
DT_BOOLEAN,
ATTIDX_NILLABLE,
- INTD_FALSE);
+ Boolean.FALSE);
allAttrs[ATT_PROCESS_C_D] = new OneAttr(SchemaSymbols.ATT_PROCESSCONTENTS,
DT_PROCESSCONTENTS,
ATTIDX_PROCESSCONTENTS,
- INTD_ANY_STRICT);
+ INT_ANY_STRICT);
allAttrs[ATT_PUBLIC_R] = new OneAttr(SchemaSymbols.ATT_PUBLIC,
DT_PUBLIC,
ATTIDX_PUBLIC,
@@ -444,7 +430,7 @@
allAttrs[ATT_USE_D] = new OneAttr(SchemaSymbols.ATT_USE,
DT_USE,
ATTIDX_USE,
- INTD_USE_OPTIONAL);
+ INT_USE_OPTIONAL);
allAttrs[ATT_VALUE_NNI_N] = new OneAttr(SchemaSymbols.ATT_VALUE,
DT_NONNEGINT,
ATTIDX_VALUE,
@@ -988,11 +974,15 @@
fNonSchemaAttrs.clear();
}
- // check whether the specified element conforms to the attributes restriction
- // @param: element - which element to check
- // @param: isGlobal - whether a child of <schema> or <redefine>
- // @return: Hashtable - list of attributes and values
- //public Hashtable checkAttributes(Element element, boolean isGlobal) {
+ /**
+ * check whether the specified element conforms to the attributes restriction
+ * an array of attribute values is returned. the caller must call
+ * <code>returnAttrArray</code> to return that array.
+ *
+ * @param: element - which element to check
+ * @param: isGlobal - whether a child of <schema> or <redefine>
+ * @return: Hashtable - list of attributes and values
+ */
public Object[] checkAttributes(Element element, boolean isGlobal) {
if (element == null)
return null;
@@ -1027,8 +1017,8 @@
}
//Hashtable attrValues = new Hashtable();
- Object[] attrValues = new Object[ATTIDX_COUNT];
- Hashtable otherValues = new Hashtable();
+ Object[] attrValues = getAvailableArray();
+ //Hashtable otherValues = new Hashtable();
long fromDefault = 0;
Hashtable attrList = oneEle.attrList;
@@ -1038,14 +1028,15 @@
for (int i = 0; i < attrs.length; i++) {
sattr = attrs[i++];
// get the attribute name/value
- String attrName = DOMUtil.getLocalName(sattr);
+ //String attrName = DOMUtil.getLocalName(sattr);
+ String attrName = sattr.getName();
String attrVal = DOMUtil.getValue(sattr);
// skip anything starts with x/X m/M l/L
// simply put their values in the return hashtable
if (attrName.toLowerCase().startsWith("xml")) {
//attrValues.put(attrName, attrVal);
- otherValues.put(attrName, attrVal);
+ //otherValues.put(attrName, attrVal);
continue;
}
@@ -1064,7 +1055,7 @@
// for attributes from other namespace
// store them in a list, and TRY to validate them after
// schema traversal (because it's "lax")
- otherValues.put(attrName, attrVal);
+ //otherValues.put(attrName, attrVal);
String attrRName = attrURI + "," + attrName;
Vector values = (Vector)fNonSchemaAttrs.get(attrRName);
if (values == null) {
@@ -1115,7 +1106,7 @@
case DT_BOOLEAN:
retValue = attrVal.equals(SchemaSymbols.ATTVAL_TRUE) ||
attrVal.equals(SchemaSymbols.ATTVAL_TRUE_1) ?
- INT_TRUE : INT_FALSE;
+ Boolean.TRUE : Boolean.FALSE;
break;
case DT_NONNEGINT:
retValue = new Integer(attrVal);
@@ -1154,7 +1145,7 @@
// if the attribute didn't apprear, and
// if the attribute is optional with default value, apply it
if (oneAttr.dfltValue != null &&
- DOMUtil.getAttr(element, oneAttr.name) != null) {
+ DOMUtil.getAttr(element, oneAttr.name) == null) {
//attrValues.put(oneAttr.name, oneAttr.dfltValue);
attrValues[oneAttr.valueIndex] = oneAttr.dfltValue;
fromDefault |= (1<<oneAttr.valueIndex);
@@ -1162,7 +1153,7 @@
}
attrValues[ATTIDX_FROMDEFAULT] = new Long(fromDefault);
- attrValues[ATTIDX_OTHERVALUES] = otherValues;
+ //attrValues[ATTIDX_OTHERVALUES] = otherValues;
return attrValues;
}
@@ -1397,11 +1388,11 @@
}
}
- // REVISIT: enable it later.
// validate attriubtes from non-schema namespaces
- /*public void checkNonSchemaAttributes(XSGrammarResolver grammarResolver) throws Exception {
+ public void checkNonSchemaAttributes(XSGrammarResolver grammarResolver) throws Exception {
// for all attributes
Enumeration enum = fNonSchemaAttrs.keys();
+ XSAttributeDecl tempAttrDecl = new XSAttributeDecl();
while (enum.hasMoreElements()) {
// get name, uri, localpart
String attrRName = (String)enum.nextElement();
@@ -1412,10 +1403,13 @@
if (sGrammar == null)
continue;
// and get the datatype validator, if there is one
- XSAttributeDecl tempAttrDecl = sGrammar.getGlobalAttrDecl(attrLocal);
+ tempAttrDecl = sGrammar.getAttributeDecl(attrLocal, tempAttrDecl);
if (tempAttrDecl == null)
+ continue;
+ sGrammar = grammarResolver.getGrammar(tempAttrDecl.fTypeNS);
+ if (sGrammar == null)
continue;
- DatatypeValidator dv = tempAttrDecl.datatypeValidator;
+ DatatypeValidator dv = (DatatypeValidator)sGrammar.getTypeDecl(tempAttrDecl.fType);
if (dv == null)
continue;
@@ -1438,10 +1432,11 @@
}
}
}
- }*/
+ }
// normalize the string according to the whiteSpace facet
- private String normalize(String content, short ws) {
+ // REVISIT: should move this to a util class/method
+ public static String normalize(String content, short ws) {
int len = content == null ? 0 : content.length();
if (len == 0 || ws == DatatypeValidator.PRESERVE)
return content;
@@ -1497,7 +1492,64 @@
localpart = attrVal.substring(colonptr+1);
}
String uri = fSchemaHandler.resolvePrefixToURI(prefix);
+ //REVISIT: how to resolve prefix to uri
+ uri = SchemaSymbols.URI_SCHEMAFORSCHEMA;
return new QName(prefix, localpart, attrVal, uri);
+ }
+
+ // the following part implements an attribute-value-array pool.
+ // when checkAttribute is called, it calls getAvailableArray to get
+ // an array from the pool; when the caller is done with the array,
+ // it calls returnAttrArray to return that array to the pool.
+
+ // initial size of the array pool. 10 is big enough
+ static final int INIT_POOL_SIZE = 10;
+ // the incremental size of the array pool
+ static final int INC_POOL_SIZE = 10;
+ // the array pool
+ Object[][] fArrayPool = new Object[INIT_POOL_SIZE][ATTIDX_COUNT];
+ // current position of the array pool (# of arrays not returned)
+ int fPoolPos = 0;
+
+ // get the next available array
+ protected Object[] getAvailableArray() {
+ // if no array left in the pool, increase the pool size
+ if (fArrayPool.length == fPoolPos) {
+ // increase size
+ fArrayPool = new Object[fPoolPos+INC_POOL_SIZE][];
+ // initialize each *new* array
+ for (int i = fPoolPos; i < fArrayPool.length; i++)
+ fArrayPool[i] = new Object[ATTIDX_COUNT];
+ }
+ // get the next available one
+ Object[] retArray = fArrayPool[fPoolPos];
+ // clear it from the pool. this is for GC: if a caller forget to
+ // return the array, we want that array to be GCed.
+ fArrayPool[fPoolPos++] = null;
+ // to make sure that one array is not returned twice, we use
+ // the last entry to indicate whether an array is already returned
+ // now set it to false.
+ retArray[ATTIDX_ISRETURNED] = Boolean.FALSE;
+
+ return retArray;
+ }
+
+ // return an array back to the pool
+ public void returnAttrArray (Object[] attrArray) {
+ // if 1. the pool is full; 2. the array is null;
+ // 3. the array is of wrong size; 4. the array is already returned
+ // then we can't accept this array to be returned
+ if (fPoolPos == 0 ||
+ attrArray == null ||
+ attrArray.length != ATTIDX_COUNT ||
+ ((Boolean)attrArray[ATTIDX_ISRETURNED]).booleanValue()) {
+ return;
+ }
+
+ // mark this array as returned
+ attrArray[ATTIDX_ISRETURNED] = Boolean.TRUE;
+ // and put it into the pool
+ fArrayPool[--fPoolPos] = attrArray;
}
}
1.10 +6 -8 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.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- XSDAbstractTraverser.java 2001/09/04 22:43:17 1.9
+++ XSDAbstractTraverser.java 2001/09/05 21:16:02 1.10
@@ -68,7 +68,7 @@
* other <code>XSD???Traverser</code>s. It holds the common data and provide
* a unified way to initialize these data.
*
- * @version $Id: XSDAbstractTraverser.java,v 1.9 2001/09/04 22:43:17 sandygao Exp $
+ * @version $Id: XSDAbstractTraverser.java,v 1.10 2001/09/05 21:16:02 sandygao Exp $
*/
abstract class XSDAbstractTraverser {
@@ -78,8 +78,6 @@
protected XSAttributeChecker fAttrChecker = null;
protected XMLErrorReporter fErrorReporter = null;
- //REVISIT: should we add global fSchemaGrammar field
-
XSDAbstractTraverser (XSDHandler handler,
XMLErrorReporter errorReporter,
XSAttributeChecker attrChecker) {
@@ -100,11 +98,10 @@
// traver the annotation declaration
// REVISIT: store annotation information for PSVI
- int traverseAnnotationDecl(Element annotationDecl, Object[] parentAttrs) {
+ int traverseAnnotationDecl(Element annotationDecl, Object[] parentAttrs, boolean isGlobal) {
// General Attribute Checking
- // There is no difference between global or local annotation,
- // so we assume it's always global.
- Object[] attrValues = fAttrChecker.checkAttributes(annotationDecl, true);
+ Object[] attrValues = fAttrChecker.checkAttributes(annotationDecl, isGlobal);
+ fAttrChecker.returnAttrArray(attrValues);
for(Element child = DOMUtil.getFirstChildElement(annotationDecl);
child != null;
@@ -122,6 +119,7 @@
// There is no difference between global or local appinfo/documentation,
// so we assume it's always global.
attrValues = fAttrChecker.checkAttributes(child, true);
+ fAttrChecker.returnAttrArray(attrValues);
}
// REVISIT: an annotation index should be returned when we support PSVI
@@ -147,6 +145,6 @@
// should call traverseAnnotationDecl() directly, and store the
// returned value.
Element checkContent( Element elm, Element content, boolean isEmpty ) {
- return null;
+ return content;
}
}
1.6 +10 -8 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.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- XSDElementTraverser.java 2001/09/04 22:43:17 1.5
+++ XSDElementTraverser.java 2001/09/05 21:16:02 1.6
@@ -84,7 +84,7 @@
* Content: (annotation?, ((simpleType | complexType)?, (unique | key | keyref)*))
* </element>
*
- * @version $Id: XSDElementTraverser.java,v 1.5 2001/09/04 22:43:17 sandygao Exp $
+ * @version $Id: XSDElementTraverser.java,v 1.6 2001/09/05 21:16:02 sandygao Exp $
*/
class XSDElementTraverser extends XSDAbstractTraverser{
@@ -159,8 +159,10 @@
// General Attribute Checking
Object[] attrValues = fAttrChecker.checkAttributes(elmDecl, true);
+ int elemIdx = traverseNamedElement(elmDecl, attrValues, schemaDoc, grammar, true);
+ fAttrChecker.returnAttrArray(attrValues);
- return traverseNamedElement(elmDecl, attrValues, schemaDoc, grammar, true);
+ return elemIdx;
}
/**
@@ -179,14 +181,14 @@
SchemaGrammar grammar,
boolean isGlobal) {
- Integer abstractAtt = (Integer) attrValues[XSAttributeChecker.ATTIDX_ABSTRACT];
+ Boolean abstractAtt = (Boolean) attrValues[XSAttributeChecker.ATTIDX_ABSTRACT];
Integer blockAtt = (Integer) attrValues[XSAttributeChecker.ATTIDX_BLOCK];
String defaultAtt = (String) attrValues[XSAttributeChecker.ATTIDX_DEFAULT];
Integer finalAtt = (Integer) attrValues[XSAttributeChecker.ATTIDX_FINAL];
String fixedAtt = (String) attrValues[XSAttributeChecker.ATTIDX_FIXED];
Integer formAtt = (Integer) attrValues[XSAttributeChecker.ATTIDX_FORM];
String nameAtt = (String) attrValues[XSAttributeChecker.ATTIDX_NAME];
- Integer nillableAtt = (Integer) attrValues[XSAttributeChecker.ATTIDX_NILLABLE];
+ Boolean nillableAtt = (Boolean) attrValues[XSAttributeChecker.ATTIDX_NILLABLE];
QName refAtt = (QName) attrValues[XSAttributeChecker.ATTIDX_REF];
QName subGroupAtt = (QName) attrValues[XSAttributeChecker.ATTIDX_SUBSGROUP];
QName typeAtt = (QName) attrValues[XSAttributeChecker.ATTIDX_TYPE];
@@ -211,9 +213,9 @@
short blockSet = blockAtt == null ? SchemaSymbols.EMPTY_SET : blockAtt.shortValue();
short finalSet = finalAtt == null ? SchemaSymbols.EMPTY_SET : finalAtt.shortValue();
short elementMiscFlags = 0;
- if ((nillableAtt.intValue() & SchemaSymbols.REAL_VALUE) == SchemaSymbols.BOOLEAN_TRUE)
+ if (nillableAtt.booleanValue())
elementMiscFlags |= XSElementDecl.NILLABLE;
- if ((abstractAtt.intValue() & SchemaSymbols.REAL_VALUE) == SchemaSymbols.BOOLEAN_TRUE)
+ if (abstractAtt.booleanValue())
elementMiscFlags |= XSElementDecl.ABSTRACT;
// make the property of the element's value being fixed also appear in elementMiscFlags
if (fixedAtt != null)
@@ -223,7 +225,7 @@
Element child = DOMUtil.getFirstChildElement(elmDecl);
if(child != null && DOMUtil.getLocalName(child).equals(SchemaSymbols.ELT_ANNOTATION)) {
- traverseAnnotationDecl(child, attrValues);
+ traverseAnnotationDecl(child, attrValues, false);
child = DOMUtil.getNextSiblingElement(child);
}
if(child != null && DOMUtil.getLocalName(child).equals(SchemaSymbols.ELT_ANNOTATION))
@@ -462,7 +464,7 @@
namespace = schemaDoc.fTargetNamespace;
}
else if (formAtt != null) {
- if ((formAtt.intValue() & SchemaSymbols.REAL_VALUE) == SchemaSymbols.FORM_QUALIFIED)
+ if (formAtt.intValue() == SchemaSymbols.FORM_QUALIFIED)
namespace = schemaDoc.fTargetNamespace;
} else if (schemaDoc.fAreLocalElementsQualified) {
namespace = schemaDoc.fTargetNamespace;
1.15 +57 -14 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.14
retrieving revision 1.15
diff -u -r1.14 -r1.15
--- XSDHandler.java 2001/09/05 18:06:31 1.14
+++ XSDHandler.java 2001/09/05 21:16:02 1.15
@@ -89,7 +89,7 @@
* schema, other grammars may be constructed as a side-effect.
*
* @author Neil Graham, IBM
- * @version $Id: XSDHandler.java,v 1.14 2001/09/05 18:06:31 neilg Exp $
+ * @version $Id: XSDHandler.java,v 1.15 2001/09/05 21:16:02 sandygao Exp $
*/
class XSDHandler {
@@ -185,9 +185,6 @@
// the GrammarResolver
private XSGrammarResolver fGrammarResolver;
- // REVISIT: old kind of DatatypeValidator...
- private DatatypeValidatorFactoryImpl fDatatypeRegistry = null;
-
//************ Traversers **********
XSDAttributeGroupTraverser fAttributeGroupTraverser;
XSDAttributeTraverser fAttributeTraverser;
@@ -211,10 +208,6 @@
fErrorReporter = errorReporter;
fGrammarResolver = gResolver;
fSymbolTable = symbolTable;
- //REVISIT: get schema grammar instead of validator factory
- //SchemaGrammar fGrammar4Schema = fGrammarResolver.getGrammar(SchemaSymbols.URI_SCHEMAFORSCHEMA);
- fDatatypeRegistry = new DatatypeValidatorFactoryImpl();
- fDatatypeRegistry.expandRegistryToFullSchemaSet();
createTraversers();
} // end constructor
@@ -227,6 +220,9 @@
SchemaGrammar parseSchema(String schemaNamespace,
String schemaHint) {
+ // reset all traversers and SchemaHandler
+ reset();
+
// first phase: construct trees.
Document schemaRoot = getSchema(schemaNamespace, schemaHint);
fRoot = constructTrees(schemaRoot);
@@ -248,8 +244,12 @@
// fifth phase: handle derivation constraint checking
// and UPA
- // reset all traversers and SchemaHandler
- reset();
+ //revisit: just for testing
+ SchemaGrammar sg = new SchemaGrammar(fSymbolTable);
+ fGrammarResolver.putGrammar("http://www.ara.com/base", sg);
+ Element root = (Element)DOMUtil.getRoot(schemaRoot);
+ Element child = DOMUtil.getFirstChildElement(root);
+ fElementTraverser.traverseGlobal(child, fRoot, sg);
// and return.
return fGrammarResolver.getGrammar(fRoot.fTargetNamespace);
@@ -272,6 +272,21 @@
XSDocumentInfo(schemaRoot);
Vector dependencies = new Vector();
Element rootNode = DOMUtil.getRoot(schemaRoot);
+
+ Object[] schemaAttrs = fAttributeChecker.checkAttributes(rootNode, true);
+ currSchemaInfo.fAreLocalAttributesQualified =
+ ((Integer)schemaAttrs[XSAttributeChecker.ATTIDX_AFORMDEFAULT]).intValue() == SchemaSymbols.FORM_QUALIFIED;
+ currSchemaInfo.fAreLocalElementsQualified =
+ ((Integer)schemaAttrs[XSAttributeChecker.ATTIDX_EFORMDEFAULT]).intValue() == SchemaSymbols.FORM_QUALIFIED;
+ currSchemaInfo.fBlockDefault =
+ ((Integer)schemaAttrs[XSAttributeChecker.ATTIDX_BLOCKDEFAULT]).intValue();
+ currSchemaInfo.fFinalDefault =
+ ((Integer)schemaAttrs[XSAttributeChecker.ATTIDX_FINALDEFAULT]).intValue();
+ currSchemaInfo.fTargetNamespace =
+ (String)schemaAttrs[XSAttributeChecker.ATTIDX_TARGETNAMESPACE];
+ if (currSchemaInfo.fTargetNamespace == null)
+ currSchemaInfo.fTargetNamespace = EMPTY_STRING;
+
String schemaNamespace=EMPTY_STRING;
String schemaHint=null;
Document newSchemaRoot = null;
@@ -474,6 +489,10 @@
protected int getComponentDecl(XSDocumentInfo currSchema,
int declType,
QName declToTraverse) {
+ if (declToTraverse.uri == SchemaSymbols.URI_SCHEMAFORSCHEMA) {
+ return SchemaGrammar.SG_SchemaNS.getTypeIndex(declToTraverse.localpart);
+ }
+
String declKey = null;
if (declToTraverse.uri != null) {
declKey = declToTraverse.uri+","+declToTraverse.localpart;
@@ -537,6 +556,25 @@
} // getComponentDecl(XSDocumentInfo, int, QName): int
protected Object getDecl(String namespace, int declType, int declIndex) {
+ SchemaGrammar sGrammar = fGrammarResolver.getGrammar(namespace);
+ if (sGrammar == null)
+ return null;
+ switch (declType) {
+ case ATTRIBUTE_TYPE :
+ return null;
+ case ATTRIBUTEGROUP_TYPE :
+ return null;
+ case ELEMENT_TYPE :
+ return null;
+ case GROUP_TYPE :
+ return null;
+ case IDENTITYCONSTRAINT_TYPE :
+ return null;
+ case NOTATION_TYPE :
+ return null;
+ case TYPEDECL_TYPE :
+ return sGrammar.getTypeDecl(declIndex);
+ }
return null;
} // end getDecl
@@ -557,13 +595,18 @@
// contents of this method will depend on the system we adopt for entity resolution--i.e., XMLEntityHandler, EntityHandler, etc.
XMLInputSource schemaSource=null;
try {
- schemaSource = fEntityResolver.resolveEntity(schemaNamespace, schemaHint, null);
+ schemaSource = fEntityResolver.resolveEntity("", schemaHint, null);
if (schemaSource != null) {
DOMParser schemaParser = new DOMParser(fSymbolTable);
// set ErrorHandler and EntityResolver (doesn't seem that
// XMLErrorHandler or XMLEntityResolver will work with
// standard DOMParser...
-
+ //REVISIT: shouldn't we reuse the same domparser, instead of
+ //create a new one for each document?
+ //REVISIT: disable deferred dom expansion. there are bugs.
+ try {
+ schemaParser.setFeature("http://apache.org/xml/features/dom/defer-node-expansion", false);
+ } catch (Exception e) {}
// set appropriate features
schemaParser.parse(schemaSource);
return schemaParser.getDocument();
@@ -572,6 +615,7 @@
}
catch (IOException ex) {
// REVISIT: report an error!
+ ex.printStackTrace();
}
return null;
@@ -580,6 +624,7 @@
// initialize all the traversers.
// this should only need to be called once during the construction
// of this object; it creates the traversers that will be used to
+
// construct schemaGrammars.
private void createTraversers() {
fAttributeChecker = new XSAttributeChecker(this, fErrorReporter);
@@ -616,8 +661,6 @@
fDependencyMap.clear();
fTraversed.removeAllElements();
fRoot = null;
-
- fDatatypeRegistry = null;
// reset traversers
fAttributeChecker.reset();
1.9 +15 -6 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.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- XSDSimpleTypeTraverser.java 2001/09/04 22:43:17 1.8
+++ XSDSimpleTypeTraverser.java 2001/09/05 21:16:02 1.9
@@ -107,7 +107,7 @@
*
* @author Elena Litani
* @author IBM
- * @version $Id: XSDSimpleTypeTraverser.java,v 1.8 2001/09/04 22:43:17 sandygao Exp $
+ * @version $Id: XSDSimpleTypeTraverser.java,v 1.9 2001/09/05 21:16:02 sandygao Exp $
*/
class XSDSimpleTypeTraverser extends XSDAbstractTraverser {
@@ -141,6 +141,8 @@
int typeIndex = traverseSimpleTypeDecl (elmNode, attrValues);
if (nameAtt != null)
fSimpleTypeNameStack.pop();
+ fAttrChecker.returnAttrArray(attrValues);
+
return typeIndex;
}
@@ -149,9 +151,12 @@
SchemaGrammar grammar) {
fSchemaDoc = schemaDoc;
fGrammar = grammar;
- Object[] attrValues = fAttrChecker.checkAttributes(elmNode, true);
+
+ Object[] attrValues = fAttrChecker.checkAttributes(elmNode, false);
+ int typeIndex = traverseSimpleTypeDecl (elmNode, attrValues);
+ fAttrChecker.returnAttrArray(attrValues);
- return traverseSimpleTypeDecl (elmNode, attrValues);
+ return typeIndex;
}
private int traverseSimpleTypeDecl(Element simpleTypeDecl, Object[] attrValues) {
@@ -214,6 +219,8 @@
// General Attribute Checking
Object[] contentAttrs = fAttrChecker.checkAttributes(content, false);
+ // REVISIT: when to return the array
+ fAttrChecker.returnAttrArray(contentAttrs);
//----------------------------------------------------------------------
//use content.getLocalName for the cases there "xsd:" is a prefix, ei. "xsd:list"
@@ -248,7 +255,7 @@
union = true;
memberTypes = (Vector)contentAttrs[XSAttributeChecker.ATTIDX_MEMBERTYPES];
//content.getAttribute( SchemaSymbols.ATT_MEMBERTYPES);
- if (memberTypes != null && memberTypes.size() > 0) {
+ if (memberTypes != null) {
size = memberTypes.size();
}
else {
@@ -269,7 +276,7 @@
DatatypeValidator baseValidator = null;
int simpleTypeIndex = -1;
- if (memberTypes == null || memberTypes.size() == 0) {
+ if (baseTypeQNameProperty == null && memberTypes == null) {
//---------------------------
//must 'see' <simpleType>
//---------------------------
@@ -424,6 +431,8 @@
if (content.getNodeType() == Node.ELEMENT_NODE) {
// General Attribute Checking
Object[] attrs = fAttrChecker.checkAttributes(content, false);
+ // REVISIT: when to return the array
+ fAttrChecker.returnAttrArray(attrs);
numFacets++;
facet = DOMUtil.getLocalName(content);
if (facet.equals(SchemaSymbols.ELT_ENUMERATION)) {
@@ -537,7 +546,7 @@
if (flags != 0) {
fFacetData.put(DatatypeValidator.FACET_FIXED, new Short(flags));
}
- fPattern.setLength(0);
+ fPattern = null;
}
else if (list && content!=null) {
// report error - must not have any children!
1.2 +6 -6 xml-xerces/java/src/org/apache/xerces/impl/v2/XSType.java
Index: XSType.java
===================================================================
RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/v2/XSType.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- XSType.java 2001/08/24 23:10:57 1.1
+++ XSType.java 2001/09/05 21:16:02 1.2
@@ -60,15 +60,15 @@
/**
* The base type interface for XML Schema types.
- * @version $Id: XSType.java,v 1.1 2001/08/24 23:10:57 elena Exp $
+ * @version $Id: XSType.java,v 1.2 2001/09/05 21:16:02 sandygao Exp $
*/
public interface XSType {
- public static final short COMPLEX_TYPE = 0;
- public static final short SIMPLE_TYPE = 1;
- public static final short ANY_TYPE = 2;
- public static final short ANYSIMPLE_TYPE = 3;
- public static final short DATATYPE_TYPE = 4;
+ public static final short COMPLEX_TYPE = 1;
+ public static final short SIMPLE_TYPE = 2;
+ public static final short UR_TYPE = 4;
+ public static final short ANY_TYPE = UR_TYPE | COMPLEX_TYPE;
+ public static final short ANYSIMPLE_TYPE = UR_TYPE | SIMPLE_TYPE;
public short getXSType();
1.4 +2 -2 xml-xerces/java/src/org/apache/xerces/impl/v2/datatypes/AbstractDatatypeValidator.java
Index: AbstractDatatypeValidator.java
===================================================================
RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/v2/datatypes/AbstractDatatypeValidator.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- AbstractDatatypeValidator.java 2001/09/04 22:43:18 1.3
+++ AbstractDatatypeValidator.java 2001/09/05 21:16:03 1.4
@@ -57,7 +57,7 @@
/**
- * @version $Id: AbstractDatatypeValidator.java,v 1.3 2001/09/04 22:43:18 sandygao Exp $
+ * @version $Id: AbstractDatatypeValidator.java,v 1.4 2001/09/05 21:16:03 sandygao Exp $
* @author Elena Litani
* @author Jeffrey Rodriguez
*/
@@ -132,7 +132,7 @@
fLocale = locale;
}
public short getXSType (){
- return XSType.DATATYPE_TYPE;
+ return XSType.SIMPLE_TYPE;
}
protected int fFinalSet = 0;
1.4 +2 -2 xml-xerces/java/src/org/apache/xerces/impl/v2/datatypes/AbstractStringValidator.java
Index: AbstractStringValidator.java
===================================================================
RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/v2/datatypes/AbstractStringValidator.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- AbstractStringValidator.java 2001/08/24 23:10:58 1.3
+++ AbstractStringValidator.java 2001/09/05 21:16:03 1.4
@@ -71,7 +71,7 @@
* hexBinary, base64Binary, QName and Notation datatypes.
*
* @author Elena Litani
- * @version $Id: AbstractStringValidator.java,v 1.3 2001/08/24 23:10:58 elena Exp $
+ * @version $Id: AbstractStringValidator.java,v 1.4 2001/09/05 21:16:03 sandygao Exp $
*/
public abstract class AbstractStringValidator extends AbstractDatatypeValidator {
@@ -373,7 +373,7 @@
private void checkContent( String content, Object state, boolean asBase )
throws InvalidDatatypeValueException {
// validate against parent type if any
- if ( this.fBaseValidator != null ) {
+ if ( fBaseValidator instanceof AbstractStringValidator ) {
// validate content as a base type
((AbstractStringValidator)fBaseValidator).checkContent(content, state, true);
}
1.3 +4 -4 xml-xerces/java/src/org/apache/xerces/impl/v2/datatypes/IDDatatypeValidator.java
Index: IDDatatypeValidator.java
===================================================================
RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/v2/datatypes/IDDatatypeValidator.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- IDDatatypeValidator.java 2001/09/05 18:06:31 1.2
+++ IDDatatypeValidator.java 2001/09/05 21:16:03 1.3
@@ -70,7 +70,7 @@
* standalone code as well as plugins to the validator architecture.
* @author Jeffrey Rodriguez
* @author Mark Swinkles - List Validation refactoring
- * @version $Id: IDDatatypeValidator.java,v 1.2 2001/09/05 18:06:31 neilg Exp $
+ * @version $Id: IDDatatypeValidator.java,v 1.3 2001/09/05 21:16:03 sandygao Exp $
*/
public class IDDatatypeValidator extends StringDatatypeValidator {
private static Object fNullValue = new Object();
@@ -90,9 +90,9 @@
return;
// the type is NAME by default
- // REVISIT: should have special handling when base is a genuine IDDatatypeValidator
- if (base != null && base instanceof AbstractStringValidator)
- setTokenType(((AbstractStringValidator)base).fTokenType);
+ // REVISIT: how to set token type for id/idref derived types
+ if (base instanceof IDDatatypeValidator)
+ setTokenType(((IDDatatypeValidator)base).fTokenType);
else
setTokenType(SPECIAL_TOKEN_IDNAME);
}
1.3 +4 -4 xml-xerces/java/src/org/apache/xerces/impl/v2/datatypes/IDREFDatatypeValidator.java
Index: IDREFDatatypeValidator.java
===================================================================
RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/v2/datatypes/IDREFDatatypeValidator.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- IDREFDatatypeValidator.java 2001/09/05 18:06:31 1.2
+++ IDREFDatatypeValidator.java 2001/09/05 21:16:03 1.3
@@ -71,7 +71,7 @@
*
* @author Jeffrey Rodriguez-
* @author Mark Swinkles - List Validation refactoring
- * @version $Id: IDREFDatatypeValidator.java,v 1.2 2001/09/05 18:06:31 neilg Exp $
+ * @version $Id: IDREFDatatypeValidator.java,v 1.3 2001/09/05 21:16:03 sandygao Exp $
*/
public class IDREFDatatypeValidator extends StringDatatypeValidator {
private static Object fNullValue = new Object();
@@ -94,9 +94,9 @@
return;
// the type is NAME by default
- // REVISIT: as in IDDatatypeValidator, handle other types of AbstractStringValidator differently.
- if (base != null && base instanceof AbstractStringValidator)
- setTokenType(((AbstractStringValidator)base).fTokenType);
+ // REVISIT: how to set token type for id/idref derived types
+ if (base instanceof IDREFDatatypeValidator)
+ setTokenType(((IDREFDatatypeValidator)base).fTokenType);
else
setTokenType(SPECIAL_TOKEN_IDREFNAME);
}
1.2 +2 -2 xml-xerces/java/src/org/apache/xerces/impl/v2/datatypes/QNameDatatypeValidator.java
Index: QNameDatatypeValidator.java
===================================================================
RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/v2/datatypes/QNameDatatypeValidator.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- QNameDatatypeValidator.java 2001/08/24 22:26:29 1.1
+++ QNameDatatypeValidator.java 2001/09/05 21:16:03 1.2
@@ -74,7 +74,7 @@
*
* @author Jeffrey Rodriguez
* @author Mark Swinkles - List Validation refactoring
- * @version $Id: QNameDatatypeValidator.java,v 1.1 2001/08/24 22:26:29 elena Exp $
+ * @version $Id: QNameDatatypeValidator.java,v 1.2 2001/09/05 21:16:03 sandygao Exp $
*/
public class QNameDatatypeValidator extends AbstractStringValidator {
@@ -120,7 +120,7 @@
return collator.compare( content, facetValue );
}
- protected static void setNCNameValidator (DatatypeValidator dv) {
+ public static void setNCNameValidator (DatatypeValidator dv) {
// make a string validator for NCName
if ( fgStrValidator == null) {
fgStrValidator = dv;
---------------------------------------------------------------------
To unsubscribe, e-mail: xerces-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: xerces-cvs-help@xml.apache.org