KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > enhydra > apache > xerces > validators > schema > GeneralAttrCheck


1 /*
2  * The Apache Software License, Version 1.1
3  *
4  *
5  * Copyright (c) 2000,2001 The Apache Software Foundation.
6  * All rights reserved.
7  *
8  * Redistribution and use in source and binary forms, with or without
9  * modification, are permitted provided that the following conditions
10  * are met:
11  *
12  * 1. Redistributions of source code must retain the above copyright
13  * notice, this list of conditions and the following disclaimer.
14  *
15  * 2. Redistributions in binary form must reproduce the above copyright
16  * notice, this list of conditions and the following disclaimer in
17  * the documentation and/or other materials provided with the
18  * distribution.
19  *
20  * 3. The end-user documentation included with the redistribution,
21  * if any, must include the following acknowledgment:
22  * "This product includes software developed by the
23  * Apache Software Foundation (http://www.apache.org/)."
24  * Alternately, this acknowledgment may appear in the software itself,
25  * if and wherever such third-party acknowledgments normally appear.
26  *
27  * 4. The names "Xerces" and "Apache Software Foundation" must
28  * not be used to endorse or promote products derived from this
29  * software without prior written permission. For written
30  * permission, please contact apache@apache.org.
31  *
32  * 5. Products derived from this software may not be called "Apache",
33  * nor may "Apache" appear in their name, without prior written
34  * permission of the Apache Software Foundation.
35  *
36  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
37  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
38  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
39  * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
40  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
41  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
42  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
43  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
44  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
45  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
46  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
47  * SUCH DAMAGE.
48  * ====================================================================
49  *
50  * This software consists of voluntary contributions made by many
51  * individuals on behalf of the Apache Software Foundation and was
52  * originally based on software copyright (c) 1999, International
53  * Business Machines, Inc., http://www.apache.org. For more
54  * information on the Apache Software Foundation, please see
55  * <http://www.apache.org/>.
56  */

57
58 package org.enhydra.apache.xerces.validators.schema;
59
60 import java.util.Enumeration JavaDoc;
61 import java.util.Hashtable JavaDoc;
62 import java.util.StringTokenizer JavaDoc;
63 import java.util.Vector JavaDoc;
64
65 import org.enhydra.apache.xerces.framework.XMLErrorReporter;
66 import org.enhydra.apache.xerces.validators.common.Grammar;
67 import org.enhydra.apache.xerces.validators.common.GrammarResolver;
68 import org.enhydra.apache.xerces.validators.common.XMLAttributeDecl;
69 import org.enhydra.apache.xerces.validators.datatype.DatatypeValidator;
70 import org.enhydra.apache.xerces.validators.datatype.DatatypeValidatorFactoryImpl;
71 import org.enhydra.apache.xerces.validators.datatype.IDDatatypeValidator;
72 import org.enhydra.apache.xerces.validators.datatype.InvalidDatatypeValueException;
73 import org.w3c.dom.Attr JavaDoc;
74 import org.w3c.dom.Element JavaDoc;
75 import org.w3c.dom.NamedNodeMap JavaDoc;
76
77 /**
78  * Title:
79  * Description:
80  * Copyright: Copyright (c) 2001
81  * @author: Sandy Gao, IBM
82  * @version 1.0
83  */

84
85 public class GeneralAttrCheck {
86
87     // used to specify in which context the element appears: global or local
88
public static int ELE_CONTEXT_GLOBAL = 0;
89     public static int ELE_CONTEXT_LOCAL = 1;
90
91     // used to specify whether the attribute is optional,
92
// and whether it has a default value
93
public static int ATT_REQUIRED = 0;
94     public static int ATT_OPT_DFLT = 1;
95     public static int ATT_OPT_NODFLT = 2;
96
97     // the prefix to distinguish gloval vs. local; name vs. ref
98
protected static String JavaDoc PRE_GLOBAL = "G_";
99     protected static String JavaDoc PRE_LOC_NAME = "LN_";
100     protected static String JavaDoc PRE_LOC_REF = "LR_";
101
102     // used to store the map from element name to attribute list
103
protected static Hashtable JavaDoc fEleAttrsMap = new Hashtable JavaDoc();
104
105     // used to store extra datatype validators
106
protected static DatatypeValidator[] fExtraDVs = null;
107
108     // used to initialize fEleAttrsMap
109
// step 1: all possible data types
110
// DT_??? >= 0 : validate using a validator, which is initialized staticly
111
// DT_??? < 0 : validate directly, which is done in "validate()"
112
protected static int dtCount = 0;
113
114     protected static final int DT_ANYURI = dtCount++;
115     protected static final int DT_BOOLEAN = dtCount++;
116     protected static final int DT_ID = dtCount++;
117     protected static final int DT_NONNEGINT = dtCount++;
118     protected static final int DT_QNAME = dtCount++;
119     protected static final int DT_STRING = dtCount++;
120     protected static final int DT_TOKEN = dtCount++;
121     protected static final int DT_NCNAME = dtCount++;
122     protected static final int DT_XPATH = dtCount++;
123     protected static final int DT_XPATH1 = dtCount++;
124
125     protected static final int DT_BLOCK = -1;
126     protected static final int DT_BLOCK1 = DT_BLOCK-1;
127     protected static final int DT_FINAL = DT_BLOCK1-1;
128     protected static final int DT_FINAL1 = DT_FINAL-1;
129     protected static final int DT_FORM = DT_FINAL1-1;
130     protected static final int DT_MAXOCCURS = DT_FORM-1;
131     protected static final int DT_MAXOCCURS1 = DT_MAXOCCURS-1;
132     protected static final int DT_MEMBERTYPES = DT_MAXOCCURS1-1;
133     protected static final int DT_MINOCCURS1 = DT_MEMBERTYPES-1;
134     protected static final int DT_NAMESPACE = DT_MINOCCURS1-1;
135     protected static final int DT_PROCESSCONTENTS = DT_NAMESPACE-1;
136     protected static final int DT_PUBLIC = DT_PROCESSCONTENTS-1;
137     protected static final int DT_USE = DT_PUBLIC-1;
138     protected static final int DT_WHITESPACE = DT_USE-1;
139
140     static {
141         fExtraDVs = new DatatypeValidator[dtCount];
142
143         // step 2: all possible attributes for all elements
144
int attCount = 0;
145         int ATT_ABSTRACT_D = attCount++;
146         int ATT_ATTRIBUTE_FD_D = attCount++;
147         int ATT_BASE_R = attCount++;
148         int ATT_BASE_N = attCount++;
149         int ATT_BLOCK_N = attCount++;
150         int ATT_BLOCK1_N = attCount++;
151         int ATT_BLOCK_D_D = attCount++;
152         int ATT_DEFAULT_N = attCount++;
153         int ATT_ELEMENT_FD_D = attCount++;
154         int ATT_FINAL_N = attCount++;
155         int ATT_FINAL1_N = attCount++;
156         int ATT_FINAL_D_D = attCount++;
157         int ATT_FIXED_N = attCount++;
158         int ATT_FIXED_D = attCount++;
159         int ATT_FORM_N = attCount++;
160         int ATT_ID_N = attCount++;
161         int ATT_ITEMTYPE_N = attCount++;
162         int ATT_MAXOCCURS_D = attCount++;
163         int ATT_MAXOCCURS1_D = attCount++;
164         int ATT_MEMBER_T_N = attCount++;
165         int ATT_MINOCCURS_D = attCount++;
166         int ATT_MINOCCURS1_D = attCount++;
167         int ATT_MIXED_D = attCount++;
168         int ATT_MIXED_N = attCount++;
169         int ATT_NAME_R = attCount++;
170         int ATT_NAMESPACE_D = attCount++;
171         int ATT_NAMESPACE_N = attCount++;
172         int ATT_NILLABLE_D = attCount++;
173         int ATT_PROCESS_C_D = attCount++;
174         int ATT_PUBLIC_R = attCount++;
175         int ATT_REF_R = attCount++;
176         int ATT_REFER_R = attCount++;
177         int ATT_SCHEMA_L_R = attCount++;
178         int ATT_SCHEMA_L_N = attCount++;
179         int ATT_SOURCE_N = attCount++;
180         int ATT_SUBSTITUTION_G_N = attCount++;
181         int ATT_SYSTEM_N = attCount++;
182         int ATT_TARGET_N_N = attCount++;
183         int ATT_TYPE_N = attCount++;
184         int ATT_USE_D = attCount++;
185         int ATT_VALUE_NNI_N = attCount++;
186         int ATT_VALUE_STR_N = attCount++;
187         int ATT_VALUE_WS_N = attCount++;
188         int ATT_VERSION_N = attCount++;
189         int ATT_XPATH_R = attCount++;
190         int ATT_XPATH1_R = attCount++;
191
192         // step 3: store all these attributes in an array
193
OneAttr[] allAttrs = new OneAttr[attCount];
194         allAttrs[ATT_ABSTRACT_D] = new OneAttr(SchemaSymbols.ATT_ABSTRACT,
195                                                         DT_BOOLEAN,
196                                                         ATT_OPT_DFLT,
197                                                         SchemaSymbols.ATTVAL_FALSE);
198         allAttrs[ATT_ATTRIBUTE_FD_D] = new OneAttr(SchemaSymbols.ATT_ATTRIBUTEFORMDEFAULT,
199                                                         DT_FORM,
200                                                         ATT_OPT_DFLT,
201                                                         SchemaSymbols.ATTVAL_UNQUALIFIED);
202         allAttrs[ATT_BASE_R] = new OneAttr(SchemaSymbols.ATT_BASE,
203                                                         DT_QNAME,
204                                                         ATT_REQUIRED,
205                                                         null);
206         allAttrs[ATT_BASE_N] = new OneAttr(SchemaSymbols.ATT_BASE,
207                                                         DT_QNAME,
208                                                         ATT_OPT_NODFLT,
209                                                         null);
210         allAttrs[ATT_BLOCK_N] = new OneAttr(SchemaSymbols.ATT_BLOCK,
211                                                         DT_BLOCK,
212                                                         ATT_OPT_NODFLT,
213                                                         null);
214         allAttrs[ATT_BLOCK1_N] = new OneAttr(SchemaSymbols.ATT_BLOCK,
215                                                         DT_BLOCK1,
216                                                         ATT_OPT_NODFLT,
217                                                         null);
218         allAttrs[ATT_BLOCK_D_D] = new OneAttr(SchemaSymbols.ATT_BLOCKDEFAULT,
219                                                         DT_BLOCK,
220                                                         ATT_OPT_DFLT,
221                                                         "");
222         allAttrs[ATT_DEFAULT_N] = new OneAttr(SchemaSymbols.ATT_DEFAULT,
223                                                         DT_STRING,
224                                                         ATT_OPT_NODFLT,
225                                                         null);
226         allAttrs[ATT_ELEMENT_FD_D] = new OneAttr(SchemaSymbols.ATT_ELEMENTFORMDEFAULT,
227                                                         DT_FORM,
228                                                         ATT_OPT_DFLT,
229                                                         SchemaSymbols.ATTVAL_UNQUALIFIED);
230         allAttrs[ATT_FINAL_N] = new OneAttr(SchemaSymbols.ATT_FINAL,
231                                                         DT_FINAL,
232                                                         ATT_OPT_NODFLT,
233                                                         null);
234         allAttrs[ATT_FINAL1_N] = new OneAttr(SchemaSymbols.ATT_FINAL,
235                                                         DT_FINAL1,
236                                                         ATT_OPT_NODFLT,
237                                                         null);
238         allAttrs[ATT_FINAL_D_D] = new OneAttr(SchemaSymbols.ATT_FINALDEFAULT,
239                                                         DT_FINAL,
240                                                         ATT_OPT_DFLT,
241                                                         "");
242         allAttrs[ATT_FIXED_N] = new OneAttr(SchemaSymbols.ATT_FIXED,
243                                                         DT_STRING,
244                                                         ATT_OPT_NODFLT,
245                                                         null);
246         allAttrs[ATT_FIXED_D] = new OneAttr(SchemaSymbols.ATT_FIXED,
247                                                         DT_BOOLEAN,
248                                                         ATT_OPT_DFLT,
249                                                         SchemaSymbols.ATTVAL_FALSE);
250         allAttrs[ATT_FORM_N] = new OneAttr(SchemaSymbols.ATT_FORM,
251                                                         DT_FORM,
252                                                         ATT_OPT_NODFLT,
253                                                         null);
254         allAttrs[ATT_ID_N] = new OneAttr(SchemaSymbols.ATT_ID,
255                                                         DT_ID,
256                                                         ATT_OPT_NODFLT,
257                                                         null);
258         allAttrs[ATT_ITEMTYPE_N] = new OneAttr(SchemaSymbols.ATT_ITEMTYPE,
259                                                         DT_QNAME,
260                                                         ATT_OPT_NODFLT,
261                                                         null);
262         allAttrs[ATT_MAXOCCURS_D] = new OneAttr(SchemaSymbols.ATT_MAXOCCURS,
263                                                         DT_MAXOCCURS,
264                                                         ATT_OPT_DFLT,
265                                                         "1");
266         allAttrs[ATT_MAXOCCURS1_D] = new OneAttr(SchemaSymbols.ATT_MAXOCCURS,
267                                                         DT_MAXOCCURS1,
268                                                         ATT_OPT_DFLT,
269                                                         "1");
270         allAttrs[ATT_MEMBER_T_N] = new OneAttr(SchemaSymbols.ATT_MEMBERTYPES,
271                                                         DT_MEMBERTYPES,
272                                                         ATT_OPT_NODFLT,
273                                                         null);
274         allAttrs[ATT_MINOCCURS_D] = new OneAttr(SchemaSymbols.ATT_MINOCCURS,
275                                                         DT_NONNEGINT,
276                                                         ATT_OPT_DFLT,
277                                                         "1");
278         allAttrs[ATT_MINOCCURS1_D] = new OneAttr(SchemaSymbols.ATT_MINOCCURS,
279                                                         DT_MINOCCURS1,
280                                                         ATT_OPT_DFLT,
281                                                         "1");
282         allAttrs[ATT_MIXED_D] = new OneAttr(SchemaSymbols.ATT_MIXED,
283                                                         DT_BOOLEAN,
284                                                         ATT_OPT_DFLT,
285                                                         SchemaSymbols.ATTVAL_FALSE);
286         allAttrs[ATT_MIXED_N] = new OneAttr(SchemaSymbols.ATT_MIXED,
287                                                         DT_BOOLEAN,
288                                                         ATT_OPT_NODFLT,
289                                                         null);
290         allAttrs[ATT_NAME_R] = new OneAttr(SchemaSymbols.ATT_NAME,
291                                                         DT_NCNAME,
292                                                         ATT_REQUIRED,
293                                                         null);
294         allAttrs[ATT_NAMESPACE_D] = new OneAttr(SchemaSymbols.ATT_NAMESPACE,
295                                                         DT_NAMESPACE,
296                                                         ATT_OPT_DFLT,
297                                                         SchemaSymbols.ATTVAL_TWOPOUNDANY);
298         allAttrs[ATT_NAMESPACE_N] = new OneAttr(SchemaSymbols.ATT_NAMESPACE,
299                                                         DT_ANYURI,
300                                                         ATT_OPT_NODFLT,
301                                                         null);
302         allAttrs[ATT_NILLABLE_D] = new OneAttr(SchemaSymbols.ATT_NILLABLE,
303                                                         DT_BOOLEAN,
304                                                         ATT_OPT_DFLT,
305                                                         SchemaSymbols.ATTVAL_FALSE);
306         allAttrs[ATT_PROCESS_C_D] = new OneAttr(SchemaSymbols.ATT_PROCESSCONTENTS,
307                                                         DT_PROCESSCONTENTS,
308                                                         ATT_OPT_DFLT,
309                                                         SchemaSymbols.ATTVAL_STRICT);
310         allAttrs[ATT_PUBLIC_R] = new OneAttr(SchemaSymbols.ATT_PUBLIC,
311                                                         DT_PUBLIC,
312                                                         ATT_REQUIRED,
313                                                         null);
314         allAttrs[ATT_REF_R] = new OneAttr(SchemaSymbols.ATT_REF,
315                                                         DT_QNAME,
316                                                         ATT_REQUIRED,
317                                                         null);
318         allAttrs[ATT_REFER_R] = new OneAttr(SchemaSymbols.ATT_REFER,
319                                                         DT_QNAME,
320                                                         ATT_REQUIRED,
321                                                         null);
322         allAttrs[ATT_SCHEMA_L_R] = new OneAttr(SchemaSymbols.ATT_SCHEMALOCATION,
323                                                         DT_ANYURI,
324                                                         ATT_REQUIRED,
325                                                         null);
326         allAttrs[ATT_SCHEMA_L_N] = new OneAttr(SchemaSymbols.ATT_SCHEMALOCATION,
327                                                         DT_ANYURI,
328                                                         ATT_OPT_NODFLT,
329                                                         null);
330         allAttrs[ATT_SOURCE_N] = new OneAttr(SchemaSymbols.ATT_SOURCE,
331                                                         DT_ANYURI,
332                                                         ATT_OPT_NODFLT,
333                                                         null);
334         allAttrs[ATT_SUBSTITUTION_G_N] = new OneAttr(SchemaSymbols.ATT_SUBSTITUTIONGROUP,
335                                                         DT_QNAME,
336                                                         ATT_OPT_NODFLT,
337                                                         null);
338         allAttrs[ATT_SYSTEM_N] = new OneAttr(SchemaSymbols.ATT_SYSTEM,
339                                                         DT_ANYURI,
340                                                         ATT_OPT_NODFLT,
341                                                         null);
342         allAttrs[ATT_TARGET_N_N] = new OneAttr(SchemaSymbols.ATT_TARGETNAMESPACE,
343                                                         DT_ANYURI,
344                                                         ATT_OPT_NODFLT,
345                                                         null);
346         allAttrs[ATT_TYPE_N] = new OneAttr(SchemaSymbols.ATT_TYPE,
347                                                         DT_QNAME,
348                                                         ATT_OPT_NODFLT,
349                                                         null);
350         allAttrs[ATT_USE_D] = new OneAttr(SchemaSymbols.ATT_USE,
351                                                         DT_USE,
352                                                         ATT_OPT_DFLT,
353                                                         SchemaSymbols.ATTVAL_OPTIONAL);
354         allAttrs[ATT_VALUE_NNI_N] = new OneAttr(SchemaSymbols.ATT_VALUE,
355                                                         DT_NONNEGINT,
356                                                         ATT_OPT_NODFLT,
357                                                         null);
358         allAttrs[ATT_VALUE_STR_N] = new OneAttr(SchemaSymbols.ATT_VALUE,
359                                                         DT_STRING,
360                                                         ATT_OPT_NODFLT,
361                                                         null);
362         allAttrs[ATT_VALUE_WS_N] = new OneAttr(SchemaSymbols.ATT_VALUE,
363                                                         DT_WHITESPACE,
364                                                         ATT_OPT_NODFLT,
365                                                         null);
366         allAttrs[ATT_VERSION_N] = new OneAttr(SchemaSymbols.ATT_VERSION,
367                                                         DT_TOKEN,
368                                                         ATT_OPT_NODFLT,
369                                                         null);
370         allAttrs[ATT_XPATH_R] = new OneAttr(SchemaSymbols.ATT_XPATH,
371                                                         DT_XPATH,
372                                                         ATT_REQUIRED,
373                                                         null);
374         allAttrs[ATT_XPATH1_R] = new OneAttr(SchemaSymbols.ATT_XPATH,
375                                                         DT_XPATH1,
376                                                         ATT_REQUIRED,
377                                                         null);
378
379         // step 4: for each element, make a list of possible attributes
380
Hashtable JavaDoc attrList;
381         Object JavaDoc[] attrArray;
382         OneElement oneEle;
383
384         // for element "attribute" - global
385
attrList = new Hashtable JavaDoc();
386         // default = string
387
attrList.put(SchemaSymbols.ATT_DEFAULT, allAttrs[ATT_DEFAULT_N]);
388         // fixed = string
389
attrList.put(SchemaSymbols.ATT_FIXED, allAttrs[ATT_FIXED_N]);
390         // id = ID
391
attrList.put(SchemaSymbols.ATT_ID, allAttrs[ATT_ID_N]);
392         // name = NCName
393
attrList.put(SchemaSymbols.ATT_NAME, allAttrs[ATT_NAME_R]);
394         // type = QName
395
attrList.put(SchemaSymbols.ATT_TYPE, allAttrs[ATT_TYPE_N]);
396         oneEle = new OneElement (attrList);
397         fEleAttrsMap.put(PRE_GLOBAL+SchemaSymbols.ELT_ATTRIBUTE, oneEle);
398
399         // for element "attribute" - local name
400
attrList = new Hashtable JavaDoc();
401         // default = string
402
attrList.put(SchemaSymbols.ATT_DEFAULT, allAttrs[ATT_DEFAULT_N]);
403         // fixed = string
404
attrList.put(SchemaSymbols.ATT_FIXED, allAttrs[ATT_FIXED_N]);
405         // form = (qualified | unqualified)
406
attrList.put(SchemaSymbols.ATT_FORM, allAttrs[ATT_FORM_N]);
407         // id = ID
408
attrList.put(SchemaSymbols.ATT_ID, allAttrs[ATT_ID_N]);
409         // name = NCName
410
attrList.put(SchemaSymbols.ATT_NAME, allAttrs[ATT_NAME_R]);
411         // type = QName
412
attrList.put(SchemaSymbols.ATT_TYPE, allAttrs[ATT_TYPE_N]);
413         // use = (optional | prohibited | required) : optional
414
attrList.put(SchemaSymbols.ATT_USE, allAttrs[ATT_USE_D]);
415         oneEle = new OneElement (attrList);
416         fEleAttrsMap.put(PRE_LOC_NAME+SchemaSymbols.ELT_ATTRIBUTE, oneEle);
417
418         // for element "attribute" - local ref
419
attrList = new Hashtable JavaDoc();
420         // default = string
421
attrList.put(SchemaSymbols.ATT_DEFAULT, allAttrs[ATT_DEFAULT_N]);
422         // fixed = string
423
attrList.put(SchemaSymbols.ATT_FIXED, allAttrs[ATT_FIXED_N]);
424         // id = ID
425
attrList.put(SchemaSymbols.ATT_ID, allAttrs[ATT_ID_N]);
426         // ref = QName
427
attrList.put(SchemaSymbols.ATT_REF, allAttrs[ATT_REF_R]);
428         // use = (optional | prohibited | required) : optional
429
attrList.put(SchemaSymbols.ATT_USE, allAttrs[ATT_USE_D]);
430         oneEle = new OneElement (attrList);
431         fEleAttrsMap.put(PRE_LOC_REF+SchemaSymbols.ELT_ATTRIBUTE, oneEle);
432
433         // for element "element" - global
434
attrList = new Hashtable JavaDoc();
435         // abstract = boolean : false
436
attrList.put(SchemaSymbols.ATT_ABSTRACT, allAttrs[ATT_ABSTRACT_D]);
437         // block = (#all | List of (substitution | extension | restriction | list | union))
438
attrList.put(SchemaSymbols.ATT_BLOCK, allAttrs[ATT_BLOCK_N]);
439         // default = string
440
attrList.put(SchemaSymbols.ATT_DEFAULT, allAttrs[ATT_DEFAULT_N]);
441         // final = (#all | List of (extension | restriction))
442
attrList.put(SchemaSymbols.ATT_FINAL, allAttrs[ATT_FINAL_N]);
443         // fixed = string
444
attrList.put(SchemaSymbols.ATT_FIXED, allAttrs[ATT_FIXED_N]);
445         // id = ID
446
attrList.put(SchemaSymbols.ATT_ID, allAttrs[ATT_ID_N]);
447         // name = NCName
448
attrList.put(SchemaSymbols.ATT_NAME, allAttrs[ATT_NAME_R]);
449         // nillable = boolean : false
450
attrList.put(SchemaSymbols.ATT_NILLABLE, allAttrs[ATT_NILLABLE_D]);
451         // substitutionGroup = QName
452
attrList.put(SchemaSymbols.ATT_SUBSTITUTIONGROUP, allAttrs[ATT_SUBSTITUTION_G_N]);
453         // type = QName
454
attrList.put(SchemaSymbols.ATT_TYPE, allAttrs[ATT_TYPE_N]);
455         oneEle = new OneElement (attrList);
456         fEleAttrsMap.put(PRE_GLOBAL+SchemaSymbols.ELT_ELEMENT, oneEle);
457
458         // for element "element" - local name
459
attrList = new Hashtable JavaDoc();
460         // block = (#all | List of (substitution | extension | restriction | list | union))
461
attrList.put(SchemaSymbols.ATT_BLOCK, allAttrs[ATT_BLOCK_N]);
462         // default = string
463
attrList.put(SchemaSymbols.ATT_DEFAULT, allAttrs[ATT_DEFAULT_N]);
464         // fixed = string
465
attrList.put(SchemaSymbols.ATT_FIXED, allAttrs[ATT_FIXED_N]);
466         // form = (qualified | unqualified)
467
attrList.put(SchemaSymbols.ATT_FORM, allAttrs[ATT_FORM_N]);
468         // id = ID
469
attrList.put(SchemaSymbols.ATT_ID, allAttrs[ATT_ID_N]);
470         // maxOccurs = (nonNegativeInteger | unbounded) : 1
471
attrList.put(SchemaSymbols.ATT_MAXOCCURS, allAttrs[ATT_MAXOCCURS_D]);
472         // minOccurs = nonNegativeInteger : 1
473
attrList.put(SchemaSymbols.ATT_MINOCCURS, allAttrs[ATT_MINOCCURS_D]);
474         // name = NCName
475
attrList.put(SchemaSymbols.ATT_NAME, allAttrs[ATT_NAME_R]);
476         // nillable = boolean : false
477
attrList.put(SchemaSymbols.ATT_NILLABLE, allAttrs[ATT_NILLABLE_D]);
478         // type = QName
479
attrList.put(SchemaSymbols.ATT_TYPE, allAttrs[ATT_TYPE_N]);
480         oneEle = new OneElement (attrList);
481         fEleAttrsMap.put(PRE_LOC_NAME+SchemaSymbols.ELT_ELEMENT, oneEle);
482
483         // for element "element" - local ref
484
attrList = new Hashtable JavaDoc();
485         // id = ID
486
attrList.put(SchemaSymbols.ATT_ID, allAttrs[ATT_ID_N]);
487         // maxOccurs = (nonNegativeInteger | unbounded) : 1
488
attrList.put(SchemaSymbols.ATT_MAXOCCURS, allAttrs[ATT_MAXOCCURS_D]);
489         // minOccurs = nonNegativeInteger : 1
490
attrList.put(SchemaSymbols.ATT_MINOCCURS, allAttrs[ATT_MINOCCURS_D]);
491         // ref = QName
492
attrList.put(SchemaSymbols.ATT_REF, allAttrs[ATT_REF_R]);
493         oneEle = new OneElement (attrList);
494         fEleAttrsMap.put(PRE_LOC_REF+SchemaSymbols.ELT_ELEMENT, oneEle);
495
496         // for element "complexType" - global
497
attrList = new Hashtable JavaDoc();
498         // abstract = boolean : false
499
attrList.put(SchemaSymbols.ATT_ABSTRACT, allAttrs[ATT_ABSTRACT_D]);
500         // block = (#all | List of (extension | restriction))
501
attrList.put(SchemaSymbols.ATT_BLOCK, allAttrs[ATT_BLOCK1_N]);
502         // final = (#all | List of (extension | restriction))
503
attrList.put(SchemaSymbols.ATT_FINAL, allAttrs[ATT_FINAL_N]);
504         // id = ID
505
attrList.put(SchemaSymbols.ATT_ID, allAttrs[ATT_ID_N]);
506         // mixed = boolean : false
507
attrList.put(SchemaSymbols.ATT_MIXED, allAttrs[ATT_MIXED_D]);
508         // name = NCName
509
attrList.put(SchemaSymbols.ATT_NAME, allAttrs[ATT_NAME_R]);
510         oneEle = new OneElement (attrList);
511         fEleAttrsMap.put(PRE_GLOBAL+SchemaSymbols.ELT_COMPLEXTYPE, oneEle);
512
513         // for element "complexType" - local name
514
attrList = new Hashtable JavaDoc();
515         // id = ID
516
attrList.put(SchemaSymbols.ATT_ID, allAttrs[ATT_ID_N]);
517         // mixed = boolean : false
518
attrList.put(SchemaSymbols.ATT_MIXED, allAttrs[ATT_MIXED_D]);
519         oneEle = new OneElement (attrList);
520         fEleAttrsMap.put(PRE_LOC_NAME+SchemaSymbols.ELT_COMPLEXTYPE, oneEle);
521
522         // for element "simpleContent" - local name
523
attrList = new Hashtable JavaDoc();
524         // id = ID
525
attrList.put(SchemaSymbols.ATT_ID, allAttrs[ATT_ID_N]);
526         oneEle = new OneElement (attrList);
527         fEleAttrsMap.put(PRE_LOC_NAME+SchemaSymbols.ELT_SIMPLECONTENT, oneEle);
528
529         // for element "restriction" - local name
530
attrList = new Hashtable JavaDoc();
531         // base = QName
532
attrList.put(SchemaSymbols.ATT_BASE, allAttrs[ATT_BASE_N]);
533         // id = ID
534
attrList.put(SchemaSymbols.ATT_ID, allAttrs[ATT_ID_N]);
535         oneEle = new OneElement (attrList);
536         fEleAttrsMap.put(PRE_LOC_NAME+SchemaSymbols.ELT_RESTRICTION, oneEle);
537
538         // for element "extension" - local name
539
attrList = new Hashtable JavaDoc();
540         // base = QName
541
attrList.put(SchemaSymbols.ATT_BASE, allAttrs[ATT_BASE_R]);
542         // id = ID
543
attrList.put(SchemaSymbols.ATT_ID, allAttrs[ATT_ID_N]);
544         oneEle = new OneElement (attrList);
545         fEleAttrsMap.put(PRE_LOC_NAME+SchemaSymbols.ELT_EXTENSION, oneEle);
546
547         // for element "attributeGroup" - local ref
548
attrList = new Hashtable JavaDoc();
549         // id = ID
550
attrList.put(SchemaSymbols.ATT_ID, allAttrs[ATT_ID_N]);
551         // ref = QName
552
attrList.put(SchemaSymbols.ATT_REF, allAttrs[ATT_REF_R]);
553         oneEle = new OneElement (attrList);
554         fEleAttrsMap.put(PRE_LOC_REF+SchemaSymbols.ELT_ATTRIBUTEGROUP, oneEle);
555
556         // for element "anyAttribute" - local name
557
attrList = new Hashtable JavaDoc();
558         // id = ID
559
attrList.put(SchemaSymbols.ATT_ID, allAttrs[ATT_ID_N]);
560         // namespace = ((##any | ##other) | List of (anyURI | (##targetNamespace | ##local)) ) : ##any
561
attrList.put(SchemaSymbols.ATT_NAMESPACE, allAttrs[ATT_NAMESPACE_D]);
562         // processContents = (lax | skip | strict) : strict
563
attrList.put(SchemaSymbols.ATT_PROCESSCONTENTS, allAttrs[ATT_PROCESS_C_D]);
564         oneEle = new OneElement (attrList);
565         fEleAttrsMap.put(PRE_LOC_NAME+SchemaSymbols.ELT_ANYATTRIBUTE, oneEle);
566
567         // for element "complexContent" - local name
568
attrList = new Hashtable JavaDoc();
569         // id = ID
570
attrList.put(SchemaSymbols.ATT_ID, allAttrs[ATT_ID_N]);
571         // mixed = boolean
572
attrList.put(SchemaSymbols.ATT_MIXED, allAttrs[ATT_MIXED_N]);
573         oneEle = new OneElement (attrList);
574         fEleAttrsMap.put(PRE_LOC_NAME+SchemaSymbols.ELT_COMPLEXCONTENT, oneEle);
575
576         // for element "attributeGroup" - global
577
attrList = new Hashtable JavaDoc();
578         // id = ID
579
attrList.put(SchemaSymbols.ATT_ID, allAttrs[ATT_ID_N]);
580         // name = NCName
581
attrList.put(SchemaSymbols.ATT_NAME, allAttrs[ATT_NAME_R]);
582         oneEle = new OneElement (attrList);
583         fEleAttrsMap.put(PRE_GLOBAL+SchemaSymbols.ELT_ATTRIBUTEGROUP, oneEle);
584
585         // for element "group" - global
586
attrList = new Hashtable JavaDoc();
587         // id = ID
588
attrList.put(SchemaSymbols.ATT_ID, allAttrs[ATT_ID_N]);
589         // name = NCName
590
attrList.put(SchemaSymbols.ATT_NAME, allAttrs[ATT_NAME_R]);
591         oneEle = new OneElement (attrList);
592         fEleAttrsMap.put(PRE_GLOBAL+SchemaSymbols.ELT_GROUP, oneEle);
593
594         // for element "group" - local ref
595
attrList = new Hashtable JavaDoc();
596         // id = ID
597
attrList.put(SchemaSymbols.ATT_ID, allAttrs[ATT_ID_N]);
598         // maxOccurs = (nonNegativeInteger | unbounded) : 1
599
attrList.put(SchemaSymbols.ATT_MAXOCCURS, allAttrs[ATT_MAXOC