You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xerces.apache.org by er...@locus.apache.org on 2000/07/07 23:23:29 UTC
cvs commit: xml-xerces/java/src/org/apache/xerces/framework XMLDTDScanner.java
ericye 00/07/07 14:23:29
Modified: java/src/org/apache/xerces/validators/common
XMLValidator.java Grammar.java
java/src/org/apache/xerces/utils Hash2intTable.java
java/src/org/apache/xerces/framework XMLDTDScanner.java
Log:
Change element form attribute behavior to be 100% consistent with Schema spec
Revision Changes Path
1.41 +11 -9 xml-xerces/java/src/org/apache/xerces/validators/common/XMLValidator.java
Index: XMLValidator.java
===================================================================
RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/validators/common/XMLValidator.java,v
retrieving revision 1.40
retrieving revision 1.41
diff -u -r1.40 -r1.41
--- XMLValidator.java 2000/07/05 18:17:56 1.40
+++ XMLValidator.java 2000/07/07 21:23:27 1.41
@@ -105,7 +105,7 @@
/**
* This class is the super all-in-one validator used by the parser.
*
- * @version $Id: XMLValidator.java,v 1.40 2000/07/05 18:17:56 ericye Exp $
+ * @version $Id: XMLValidator.java,v 1.41 2000/07/07 21:23:27 ericye Exp $
*/
public final class XMLValidator
implements DefaultEntityHandler.EventHandler,
@@ -1698,13 +1698,14 @@
}
/** Returns an attribute definition for an element type. */
+ // this is only used by DTD validation.
private int getAttDef(QName element, QName attribute) {
if (fGrammar != null) {
int scope = fCurrentScope;
if (element.uri > -1) {
scope = TOP_LEVEL_SCOPE;
}
- int elementIndex = fGrammar.getElementDeclIndex(element.localpart,scope);
+ int elementIndex = fGrammar.getElementDeclIndex(element,scope);
if (elementIndex == -1) {
return -1;
}
@@ -2273,20 +2274,21 @@
+"' and scope : " + fCurrentScope);
}
- if (element.uri == -1) {
- elementIndex = fGrammar.getElementDeclIndex(element.localpart,fCurrentScope);
- }
- else {
- elementIndex = fGrammar.getElementDeclIndex(element.localpart, TOP_LEVEL_SCOPE);
+ elementIndex = fGrammar.getElementDeclIndex(element,fCurrentScope);
+
+ if (elementIndex == -1 ) {
+ elementIndex = fGrammar.getElementDeclIndex(element, TOP_LEVEL_SCOPE);
}
if (elementIndex == -1) {
// if validating based on a Schema, try to resolve the element again by look it up in its ancestor types
- if (element.uri == -1 && fGrammarIsSchemaGrammar && fCurrentElementIndex != -1) {
+ if (fGrammarIsSchemaGrammar && fCurrentElementIndex != -1) {
TraverseSchema.ComplexTypeInfo baseTypeInfo = null;
baseTypeInfo = ((SchemaGrammar)fGrammar).getElementComplexTypeInfo(fCurrentElementIndex);
+ //TO DO:
+ // should check if baseTypeInfo is from the same Schema.
while (baseTypeInfo != null) {
- elementIndex = fGrammar.getElementDeclIndex(element.localpart, baseTypeInfo.scopeDefined);
+ elementIndex = fGrammar.getElementDeclIndex(element, baseTypeInfo.scopeDefined);
if (elementIndex > -1 ) {
break;
}
1.8 +14 -5 xml-xerces/java/src/org/apache/xerces/validators/common/Grammar.java
Index: Grammar.java
===================================================================
RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/validators/common/Grammar.java,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- Grammar.java 2000/06/30 01:10:59 1.7
+++ Grammar.java 2000/07/07 21:23:27 1.8
@@ -69,7 +69,7 @@
/**
- * @version $Id: Grammar.java,v 1.7 2000/06/30 01:10:59 ericye Exp $
+ * @version $Id: Grammar.java,v 1.8 2000/07/07 21:23:27 ericye Exp $
*/
public class Grammar
implements XMLContentSpec.Provider {
@@ -142,12 +142,19 @@
return fGrammarDocument;
}
- public int getElementDeclIndex(int nameIndex, int scopeIndex) {//TODO
- if (nameIndex > -1 && scopeIndex >-2 ) {
- return fElementNameAndScopeToElementDeclIndexMapping.get(nameIndex, scopeIndex);
+ public int getElementDeclIndex(int uriIndex, int localpartIndex, int scopeIndex) {
+ if ( localpartIndex > -1 && scopeIndex >-2 ) {
+ return fElementNameAndScopeToElementDeclIndexMapping.get(uriIndex, localpartIndex, scopeIndex);
}
return -1;
}
+
+ public int getElementDeclIndex(QName element, int scopeIndex) {
+ if ( element.localpart > -1 && scopeIndex >-2 ) {
+ return fElementNameAndScopeToElementDeclIndexMapping.get(element.uri, element.localpart, scopeIndex);
+ }
+ return -1;
+ }
public boolean getElementDecl(int elementDeclIndex, XMLElementDecl elementDecl) {
if (elementDeclIndex < 0 || elementDeclIndex >= fElementDeclCount) {
@@ -349,7 +356,9 @@
fElementDeclContentSpecIndex[chunk][index] = elementDecl.contentSpecIndex;
// add the mapping information to the
- fElementNameAndScopeToElementDeclIndexMapping.put(elementDecl.name.localpart, elementDecl.enclosingScope,
+ fElementNameAndScopeToElementDeclIndexMapping.put(elementDecl.name.uri,
+ elementDecl.name.localpart,
+ elementDecl.enclosingScope,
elementDeclIndex);
}
1.3 +19 -20 xml-xerces/java/src/org/apache/xerces/utils/Hash2intTable.java
Index: Hash2intTable.java
===================================================================
RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/utils/Hash2intTable.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- Hash2intTable.java 2000/05/17 18:32:51 1.2
+++ Hash2intTable.java 2000/07/07 21:23:28 1.3
@@ -66,27 +66,28 @@
private static final int INITIAL_BUCKET_SIZE = 4;
- private static final int HASHTABLE_SIZE = 128;
+ private static final int HASHTABLE_SIZE = 256;
private int[][] fHashTable = new int[HASHTABLE_SIZE][];
- public void put(int key1, int key2, int value) {
- int hash = (key1+key2+1) % HASHTABLE_SIZE;
+ public void put(int key1, int key2, int key3, int value) {
+ int hash = (key1+key2+key3+2) % HASHTABLE_SIZE;
int[] bucket = fHashTable[hash];
if (bucket == null) {
- bucket = new int[1 + 3*INITIAL_BUCKET_SIZE];
+ bucket = new int[1 + 4*INITIAL_BUCKET_SIZE];
bucket[0] = 1;
bucket[1] = key1;
bucket[2] = key2;
- bucket[3] = value;
+ bucket[3] = key3;
+ bucket[4] = value;
fHashTable[hash] = bucket;
} else {
int count = bucket[0];
- int offset = 1 + 3*count;
+ int offset = 1 + 4*count;
if (offset == bucket.length) {
int newSize = count + INITIAL_BUCKET_SIZE;
- int[] newBucket = new int[1 + 3*newSize];
+ int[] newBucket = new int[1 + 4*newSize];
System.arraycopy(bucket, 0, newBucket, 0, offset);
bucket = newBucket;
fHashTable[hash] = bucket;
@@ -94,16 +95,18 @@
boolean found = false;
int j=1;
for (int i=0; i<count; i++){
- if ( bucket[j] == key1 && bucket[j+1] == key2) {
- bucket[j+2] = value;
+ if ( bucket[j] == key1 && bucket[j+1] == key2
+ && bucket[j+2] == key3 ) {
+ bucket[j+3] = value;
found = true;
break;
}
- j += 3;
+ j += 4;
}
if (! found) {
bucket[offset++] = key1;
bucket[offset++] = key2;
+ bucket[offset++] = key3;
bucket[offset]= value;
bucket[0] = ++count;
}
@@ -111,8 +114,8 @@
}
}
- public int get(int key1, int key2) {
- int hash = (key1+key2+1) % HASHTABLE_SIZE;
+ public int get(int key1, int key2, int key3) {
+ int hash = (key1+key2+key3+2) % HASHTABLE_SIZE;
int[] bucket = fHashTable[hash];
if (bucket == null) {
@@ -120,17 +123,13 @@
}
int count = bucket[0];
- boolean found = false;
int j=1;
for (int i=0; i<count; i++){
- if ( bucket[j] == key1 && bucket[j+1] == key2) {
- found = true;
- return bucket[j+2];
+ if ( bucket[j] == key1 && bucket[j+1] == key2
+ && bucket[j+2] == key3) {
+ return bucket[j+3];
}
- j += 3;
- }
- if (! found) {
- return -1;
+ j += 4;
}
return -1;
}
1.12 +4 -4 xml-xerces/java/src/org/apache/xerces/framework/XMLDTDScanner.java
Index: XMLDTDScanner.java
===================================================================
RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/framework/XMLDTDScanner.java,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- XMLDTDScanner.java 2000/06/30 21:46:51 1.11
+++ XMLDTDScanner.java 2000/07/07 21:23:29 1.12
@@ -90,7 +90,7 @@
* </ol>
*
* @see XMLDTDScanner.EventHandler
- * @version $Id: XMLDTDScanner.java,v 1.11 2000/06/30 21:46:51 jeffreyr Exp $
+ * @version $Id: XMLDTDScanner.java,v 1.12 2000/07/07 21:23:29 ericye Exp $
*/
public final class XMLDTDScanner {
//
@@ -1785,7 +1785,7 @@
return;
}
decreaseMarkupDepth();
- int elementIndex = fDTDGrammar.getElementDeclIndex(fElementQName.localpart, -1);
+ int elementIndex = fDTDGrammar.getElementDeclIndex(fElementQName, -1);
boolean elementDeclIsExternal = getReadingExternalEntity();
if (elementIndex == -1) {
elementIndex = fDTDGrammar.addElementDecl(fElementQName, contentSpecType, contentSpec, elementDeclIsExternal);
@@ -2016,7 +2016,7 @@
XMLMessages.P52_ELEMENT_TYPE_REQUIRED);
return;
}
- int elementIndex = fDTDGrammar.getElementDeclIndex(fElementQName.localpart, -1);
+ int elementIndex = fDTDGrammar.getElementDeclIndex(fElementQName, -1);
if (elementIndex == -1) {
elementIndex = fDTDGrammar.addElementDecl(fElementQName);
//System.out.println("XMLDTDScanner#scanAttListDecl->DTDGrammar#addElementDecl: "+elementIndex+" ("+fElementQName.localpart+","+fStringPool.toString(fElementQName.localpart)+')');
@@ -2256,7 +2256,7 @@
enumString,
attDefDefaultType, attDefDefaultValue);
}
- int elementIndex = fDTDGrammar.getElementDeclIndex(element.localpart, -1);
+ int elementIndex = fDTDGrammar.getElementDeclIndex(element, -1);
if (elementIndex == -1) {
// REPORT Internal error here
}