GME  13
GeneralAttributeCheck.cpp
Go to the documentation of this file.
00001 /*
00002  * Licensed to the Apache Software Foundation (ASF) under one or more
00003  * contributor license agreements.  See the NOTICE file distributed with
00004  * this work for additional information regarding copyright ownership.
00005  * The ASF licenses this file to You under the Apache License, Version 2.0
00006  * (the "License"); you may not use this file except in compliance with
00007  * the License.  You may obtain a copy of the License at
00008  *
00009  *      http://www.apache.org/licenses/LICENSE-2.0
00010  *
00011  * Unless required by applicable law or agreed to in writing, software
00012  * distributed under the License is distributed on an "AS IS" BASIS,
00013  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
00014  * See the License for the specific language governing permissions and
00015  * limitations under the License.
00016  */
00017 
00018 // ---------------------------------------------------------------------------
00019 //  Includes
00020 // ---------------------------------------------------------------------------
00021 #include <xercesc/validators/schema/GeneralAttributeCheck.hpp>
00022 #include <xercesc/validators/schema/SchemaSymbols.hpp>
00023 #include <xercesc/validators/schema/TraverseSchema.hpp>
00024 #include <xercesc/validators/datatype/DatatypeValidatorFactory.hpp>
00025 #include <xercesc/dom/DOMNamedNodeMap.hpp>
00026 #include <xercesc/framework/XMLErrorCodes.hpp>
00027 #include <xercesc/framework/psvi/XSAnnotation.hpp>
00028 #include <xercesc/util/XMLString.hpp>
00029 #include <xercesc/util/XMLUniDefs.hpp>
00030 #include <xercesc/util/Janitor.hpp>
00031 #include <xercesc/util/PlatformUtils.hpp>
00032 #include <xercesc/util/XMLInitializer.hpp>
00033 #include <xercesc/util/OutOfMemoryException.hpp>
00034 
00035 XERCES_CPP_NAMESPACE_BEGIN
00036 
00037 // ---------------------------------------------------------------------------
00038 //  Local const data
00039 // ---------------------------------------------------------------------------
00040 static const XMLCh fgValueZero[] =
00041 {
00042     chDigit_0, chNull
00043 };
00044 
00045 static const XMLCh fgValueOne[] =
00046 {
00047     chDigit_1, chNull
00048 };
00049 
00050 static const XMLCh fgUnbounded[] =
00051 {
00052     chLatin_u, chLatin_n, chLatin_b, chLatin_o, chLatin_u, chLatin_n, chLatin_d,
00053     chLatin_e, chLatin_d, chNull
00054 };
00055 
00056 // ---------------------------------------------------------------------------
00057 //  Static member data initialization
00058 // ---------------------------------------------------------------------------
00059 ValueHashTableOf<unsigned short>* GeneralAttributeCheck::fAttMap = 0;
00060 ValueHashTableOf<unsigned short>* GeneralAttributeCheck::fFacetsMap = 0;
00061 DatatypeValidator*                GeneralAttributeCheck::fNonNegIntDV = 0;
00062 DatatypeValidator*                GeneralAttributeCheck::fBooleanDV = 0;
00063 DatatypeValidator*                GeneralAttributeCheck::fAnyURIDV = 0;
00064 
00065 void XMLInitializer::initializeGeneralAttributeCheck()
00066 {
00067     GeneralAttributeCheck::initialize ();
00068 }
00069 
00070 void XMLInitializer::terminateGeneralAttributeCheck()
00071 {
00072     delete GeneralAttributeCheck::fFacetsMap;
00073     delete GeneralAttributeCheck::fAttMap;
00074 
00075     GeneralAttributeCheck::fAttMap = 0;
00076     GeneralAttributeCheck::fFacetsMap = 0;
00077 
00078     GeneralAttributeCheck::fNonNegIntDV = 0;
00079     GeneralAttributeCheck::fBooleanDV = 0;
00080     GeneralAttributeCheck::fAnyURIDV = 0;
00081 }
00082 
00083 void GeneralAttributeCheck::initialize()
00084 {
00085     // Set up validators.
00086     //
00087     DatatypeValidatorFactory dvFactory;
00088 
00089     fNonNegIntDV = dvFactory.getDatatypeValidator(SchemaSymbols::fgDT_NONNEGATIVEINTEGER);
00090     fBooleanDV = dvFactory.getDatatypeValidator(SchemaSymbols::fgDT_BOOLEAN);
00091     fAnyURIDV = dvFactory.getDatatypeValidator(SchemaSymbols::fgDT_ANYURI);
00092 
00093     // TODO - add remaining valdiators
00094 
00095     // Map attributes.
00096     //
00097     fAttMap = new ValueHashTableOf<unsigned short>(A_Count);
00098 
00099     fAttMap->put((void*)SchemaSymbols::fgATT_ABSTRACT, A_Abstract);
00100     fAttMap->put((void*)SchemaSymbols::fgATT_ATTRIBUTEFORMDEFAULT, A_AttributeFormDefault);
00101     fAttMap->put((void*)SchemaSymbols::fgATT_BASE, A_Base);
00102     fAttMap->put((void*)SchemaSymbols::fgATT_BLOCK, A_Block);
00103     fAttMap->put((void*)SchemaSymbols::fgATT_BLOCKDEFAULT, A_BlockDefault);
00104     fAttMap->put((void*)SchemaSymbols::fgATT_DEFAULT, A_Default);
00105     fAttMap->put((void*)SchemaSymbols::fgATT_ELEMENTFORMDEFAULT, A_ElementFormDefault);
00106     fAttMap->put((void*)SchemaSymbols::fgATT_FINAL, A_Final);
00107     fAttMap->put((void*)SchemaSymbols::fgATT_FINALDEFAULT, A_FinalDefault);
00108     fAttMap->put((void*)SchemaSymbols::fgATT_FIXED, A_Fixed);
00109     fAttMap->put((void*)SchemaSymbols::fgATT_FORM, A_Form);
00110     fAttMap->put((void*)SchemaSymbols::fgATT_ID, A_ID);
00111     fAttMap->put((void*)SchemaSymbols::fgATT_ITEMTYPE, A_ItemType);
00112     fAttMap->put((void*)SchemaSymbols::fgATT_MAXOCCURS, A_MaxOccurs);
00113     fAttMap->put((void*)SchemaSymbols::fgATT_MEMBERTYPES, A_MemberTypes);
00114     fAttMap->put((void*)SchemaSymbols::fgATT_MINOCCURS, A_MinOccurs);
00115     fAttMap->put((void*)SchemaSymbols::fgATT_MIXED, A_Mixed);
00116     fAttMap->put((void*)SchemaSymbols::fgATT_NAME, A_Name);
00117     fAttMap->put((void*)SchemaSymbols::fgATT_NAMESPACE, A_Namespace);
00118     fAttMap->put((void*)SchemaSymbols::fgATT_NILLABLE, A_Nillable);
00119     fAttMap->put((void*)SchemaSymbols::fgATT_PROCESSCONTENTS, A_ProcessContents);
00120     fAttMap->put((void*)SchemaSymbols::fgATT_PUBLIC, A_Public);
00121     fAttMap->put((void*)SchemaSymbols::fgATT_REF, A_Ref);
00122     fAttMap->put((void*)SchemaSymbols::fgATT_REFER, A_Refer);
00123     fAttMap->put((void*)SchemaSymbols::fgATT_SCHEMALOCATION, A_SchemaLocation);
00124     fAttMap->put((void*)SchemaSymbols::fgATT_SOURCE, A_Source);
00125     fAttMap->put((void*)SchemaSymbols::fgATT_SUBSTITUTIONGROUP, A_SubstitutionGroup);
00126     fAttMap->put((void*)SchemaSymbols::fgATT_SYSTEM, A_System);
00127     fAttMap->put((void*)SchemaSymbols::fgATT_TARGETNAMESPACE, A_TargetNamespace);
00128     fAttMap->put((void*)SchemaSymbols::fgATT_TYPE, A_Type);
00129     fAttMap->put((void*)SchemaSymbols::fgATT_USE, A_Use);
00130     fAttMap->put((void*)SchemaSymbols::fgATT_VALUE, A_Value);
00131     fAttMap->put((void*)SchemaSymbols::fgATT_VERSION, A_Version);
00132     fAttMap->put((void*)SchemaSymbols::fgATT_XPATH, A_XPath);
00133 
00134     fFacetsMap = new ValueHashTableOf<unsigned short>(13);
00135 
00136     fFacetsMap->put((void*) SchemaSymbols::fgELT_MINEXCLUSIVE, E_MinExclusive);
00137     fFacetsMap->put((void*) SchemaSymbols::fgELT_MININCLUSIVE, E_MinInclusive);
00138     fFacetsMap->put((void*) SchemaSymbols::fgELT_MAXEXCLUSIVE, E_MaxExclusive);
00139     fFacetsMap->put((void*) SchemaSymbols::fgELT_MAXINCLUSIVE, E_MaxInclusive);
00140     fFacetsMap->put((void*) SchemaSymbols::fgELT_TOTALDIGITS, E_TotalDigits);
00141     fFacetsMap->put((void*) SchemaSymbols::fgELT_FRACTIONDIGITS, E_FractionDigits);
00142     fFacetsMap->put((void*) SchemaSymbols::fgELT_LENGTH, E_Length);
00143     fFacetsMap->put((void*) SchemaSymbols::fgELT_MINLENGTH, E_MinLength);
00144     fFacetsMap->put((void*) SchemaSymbols::fgELT_MAXLENGTH, E_MaxLength);
00145     fFacetsMap->put((void*) SchemaSymbols::fgELT_ENUMERATION, E_Enumeration);
00146     fFacetsMap->put((void*) SchemaSymbols::fgELT_WHITESPACE, E_WhiteSpace);
00147     fFacetsMap->put((void*) SchemaSymbols::fgELT_PATTERN, E_Pattern);
00148 }
00149 
00150 // ---------------------------------------------------------------------------
00151 //  GeneralAttributeCheck: Constructors and Destructor
00152 // ---------------------------------------------------------------------------
00153 GeneralAttributeCheck::GeneralAttributeCheck(MemoryManager* const manager)
00154     : fMemoryManager(manager)
00155     , fIDValidator(manager)
00156 {
00157 }
00158 
00159 GeneralAttributeCheck::~GeneralAttributeCheck()
00160 {
00161 }
00162 
00163 // ---------------------------------------------------------------------------
00164 //  GeneralAttributeCheck: Validation methods
00165 // ---------------------------------------------------------------------------
00166 void
00167 GeneralAttributeCheck::checkAttributes(const DOMElement* const elem,
00168                                        const unsigned short elemContext,
00169                                        TraverseSchema* const schema,
00170                                        const bool isTopLevel,
00171                                        ValueVectorOf<DOMNode*>* const nonXSAttList)
00172 {
00173     if (nonXSAttList)
00174         nonXSAttList->removeAllElements();
00175 
00176     if (elem == 0 || !fAttMap || elemContext>=E_Count)
00177         return;
00178 
00179     const XMLCh* elemName = elem->getLocalName();
00180     if (!XMLString::equals(SchemaSymbols::fgURI_SCHEMAFORSCHEMA, elem->getNamespaceURI())) {
00181         schema->reportSchemaError
00182         (
00183             elem
00184             , XMLUni::fgXMLErrDomain
00185             , XMLErrs::ELTSchemaNS
00186             , elemName
00187         );
00188     }
00189 
00190     DOMNamedNodeMap* eltAttrs = elem->getAttributes();
00191     const XMLSize_t  attrCount = eltAttrs->getLength();
00192     XMLByte          attList[A_Count];
00193 
00194     memset(attList, 0, sizeof(attList));
00195 
00196     for (XMLSize_t i = 0; i < attrCount; i++) {
00197 
00198         DOMNode*     attribute = eltAttrs->item(i);
00199         const XMLCh* attName = attribute->getNodeName();
00200 
00201         // skip namespace declarations
00202         if (XMLString::equals(attName, XMLUni::fgXMLNSString)
00203             || XMLString::startsWith(attName, XMLUni::fgXMLNSColonString))
00204             continue;
00205 
00206         // Bypass attributes that start with xml
00207         // add this to the list of "non-schema" attributes
00208         if ((*attName == chLatin_X || *attName == chLatin_x)
00209            && (*(attName+1) == chLatin_M || *(attName+1) == chLatin_m)
00210            && (*(attName+2) == chLatin_L || *(attName+2) == chLatin_l)) {
00211 
00212            if (nonXSAttList)
00213                 nonXSAttList->addElement(attribute);
00214 
00215             continue;
00216         }
00217 
00218         // for attributes with namespace prefix
00219         const XMLCh* attrURI = attribute->getNamespaceURI();
00220 
00221         if (attrURI != 0 && *attrURI) {
00222 
00223             // attributes with schema namespace are not allowed
00224             // and not allowed on "documentation" and "appInfo"
00225             if (XMLString::equals(attrURI, SchemaSymbols::fgURI_SCHEMAFORSCHEMA) ||
00226                 XMLString::equals(elemName, SchemaSymbols::fgELT_APPINFO) ||
00227                 XMLString::equals(elemName, SchemaSymbols::fgELT_DOCUMENTATION)) {
00228 
00229                 schema->reportSchemaError(elem, XMLUni::fgXMLErrDomain,
00230                                           isTopLevel?XMLErrs::AttributeDisallowedGlobal:XMLErrs::AttributeDisallowedLocal, 
00231                                           attName, elemName);
00232             }
00233             else if (nonXSAttList)
00234             {
00235                 nonXSAttList->addElement(attribute);
00236             }
00237 
00238             continue;
00239         }
00240 
00241         int attNameId = A_Invalid;
00242         attName = attribute->getLocalName();
00243 
00244         bool bContinue=false;   // workaround for Borland bug with 'continue' in 'catch'
00245         try {
00246             attNameId= fAttMap->get(attName, fMemoryManager);
00247         }
00248         catch(const OutOfMemoryException&)
00249         {
00250             throw;
00251         }
00252         catch(...) {
00253 
00254             schema->reportSchemaError(elem, XMLUni::fgXMLErrDomain,
00255                                       isTopLevel?XMLErrs::AttributeDisallowedGlobal:XMLErrs::AttributeDisallowedLocal, 
00256                                       attName, elemName);
00257             bContinue=true;
00258         }
00259         if(bContinue)
00260             continue;
00261 
00262         if (fgElemAttTable[elemContext][attNameId] & Att_Mask) {
00263 
00264             attList[attNameId] = 1;
00265             validate
00266             (
00267                 elem
00268                 , attName
00269                 , attribute->getNodeValue()
00270                 , fgElemAttTable[elemContext][attNameId] & DV_Mask
00271                 , schema
00272             );
00273         }
00274         else {
00275             schema->reportSchemaError(elem, XMLUni::fgXMLErrDomain,
00276                                       isTopLevel?XMLErrs::AttributeDisallowedGlobal:XMLErrs::AttributeDisallowedLocal, 
00277                                       attName, elemName);
00278         }
00279     }
00280 
00281     // ------------------------------------------------------------------
00282     // Check for required attributes
00283     // ------------------------------------------------------------------
00284     for (unsigned int j=0; j < A_Count; j++) {
00285 
00286         if ((fgElemAttTable[elemContext][j] & Att_Required) && attList[j] == 0) {
00287             schema->reportSchemaError(elem, XMLUni::fgXMLErrDomain, 
00288                                       isTopLevel?XMLErrs::AttributeRequiredGlobal:XMLErrs::AttributeRequiredLocal, 
00289                                       fAttNames[j], elemName);
00290         }
00291     }
00292 }
00293 
00294 
00295 void GeneralAttributeCheck::validate(const DOMElement* const elem,
00296                                      const XMLCh* const attName,
00297                                      const XMLCh* const attValue,
00298                                      const short dvIndex,
00299                                      TraverseSchema* const schema)
00300 {
00301     bool isInvalid = false;
00302     DatatypeValidator* dv = 0;
00303 
00304     ValidationContext* fValidationContext = schema->fSchemaInfo->getValidationContext();
00305     switch (dvIndex) {
00306     case DV_Form:
00307         if (!XMLString::equals(attValue, SchemaSymbols::fgATTVAL_QUALIFIED)
00308             && !XMLString::equals(attValue, SchemaSymbols::fgATTVAL_UNQUALIFIED)) {
00309             isInvalid = true;
00310         }
00311         break;
00312     case DV_MaxOccurs:
00313             // maxOccurs = (nonNegativeInteger | unbounded)
00314         if (!XMLString::equals(attValue, fgUnbounded)) {
00315             dv = fNonNegIntDV;
00316         }
00317         break;
00318     case DV_MaxOccurs1:
00319         if (!XMLString::equals(attValue, fgValueOne)) {
00320             isInvalid = true;
00321         }
00322         break;
00323     case DV_MinOccurs1:
00324         if (!XMLString::equals(attValue, fgValueZero)
00325             && !XMLString::equals(attValue, fgValueOne)) {
00326             isInvalid = true;
00327         }
00328         break;
00329     case DV_ProcessContents:
00330         if (!XMLString::equals(attValue, SchemaSymbols::fgATTVAL_SKIP)
00331             && !XMLString::equals(attValue, SchemaSymbols::fgATTVAL_LAX)
00332             && !XMLString::equals(attValue, SchemaSymbols::fgATTVAL_STRICT)) {
00333             isInvalid = true;
00334         }
00335         break;
00336     case DV_Use:
00337         if (!XMLString::equals(attValue, SchemaSymbols::fgATTVAL_OPTIONAL)
00338             && !XMLString::equals(attValue, SchemaSymbols::fgATTVAL_PROHIBITED)
00339             && !XMLString::equals(attValue, SchemaSymbols::fgATTVAL_REQUIRED)) {
00340             isInvalid = true;
00341         }
00342         break;
00343     case DV_WhiteSpace:
00344         if (!XMLString::equals(attValue, SchemaSymbols::fgWS_PRESERVE)
00345             && !XMLString::equals(attValue, SchemaSymbols::fgWS_REPLACE)
00346             && !XMLString::equals(attValue, SchemaSymbols::fgWS_COLLAPSE)) {
00347             isInvalid = true;
00348         }
00349         break;
00350     case DV_Boolean:
00351         dv = fBooleanDV;
00352         break;
00353     case DV_NonNegInt:
00354         dv = fNonNegIntDV;
00355         break;
00356     case DV_AnyURI:
00357         dv = fAnyURIDV;
00358         break;
00359     case DV_ID:
00360         if (fValidationContext)
00361         {
00362             dv = &fIDValidator;
00363         }
00364         break;
00365     }
00366 
00367     if (dv) {
00368         try {
00369             dv->validate(attValue, fValidationContext, fMemoryManager);
00370         }
00371         catch(const XMLException& excep) {
00372             schema->reportSchemaError(elem, excep);
00373         }
00374         catch(const OutOfMemoryException&)
00375         {
00376             throw;
00377         }
00378         catch(...) {
00379             isInvalid = true;
00380         }
00381     }
00382 
00383     if (isInvalid) {
00384         schema->reportSchemaError(elem, XMLUni::fgXMLErrDomain, XMLErrs::InvalidAttValue,
00385                                   attValue, attName);
00386     }
00387 }
00388 
00389 
00390 // ---------------------------------------------------------------------------
00391 //  Conditional methods for building the table
00392 // ---------------------------------------------------------------------------
00393 
00394 //
00395 //  This code will set up the character flags table. Its defined out since
00396 //  this table is now written out and hard coded (at the bottom of this
00397 //  file) into the code itself. This code is retained in case there is
00398 //  any need to recreate it later.
00399 //
00400 
00401 #if defined(NEED_TO_GEN_ELEM_ATT_MAP_TABLE)
00402 
00403 #include <stdio.h>
00404 
00405 void GeneralAttributeCheck::initCharFlagTable()
00406 {
00407     unsigned short attList[E_Count][A_Count];
00408 
00409     for (unsigned int i=0; i < E_Count; i++) {
00410         for (unsigned int j=0; j < A_Count; j++) {
00411             attList[i][j] = 0;
00412         }
00413     }
00414 
00415     //
00416     //  Write it out to a temp file to be read back into this source later.
00417     //
00418     FILE* outFl = fopen("ea_table.out", "wt+");
00419     fprintf(outFl, "unsigned short GeneralAttributeCheck::fgElemAttTable[GeneralAttributeCheck::E_Count][GeneralAttributeCheck::A_Count] =\n{\n    {");
00420 
00421     //"all"
00422     attList[E_All][A_ID] = Att_Optional | DV_ID;
00423     attList[E_All][A_MaxOccurs] = Att_Optional | DV_MaxOccurs1;
00424     attList[E_All][A_MinOccurs] = Att_Optional | DV_MinOccurs1;
00425 
00426     // "annotation"
00427     attList[E_Annotation][A_ID] = Att_Optional | DV_ID;
00428 
00429     // "any"
00430     attList[E_Any][A_ID] = Att_Optional | DV_ID;
00431     attList[E_Any][A_MaxOccurs] = Att_Optional | DV_MaxOccurs;
00432     attList[E_Any][A_MinOccurs] = Att_Optional | DV_NonNegInt;
00433     attList[E_Any][A_Namespace] = Att_Optional;
00434     attList[E_Any][A_ProcessContents] = Att_Optional | DV_ProcessContents;
00435 
00436     // "anyAttribute"
00437     attList[E_AnyAttribute][A_ID] = Att_Optional | DV_ID;
00438     attList[E_AnyAttribute][A_Namespace] = Att_Optional;
00439     attList[E_AnyAttribute][A_ProcessContents] = Att_Optional | DV_ProcessContents;
00440 
00441     // "appinfo"
00442     attList[E_Appinfo][A_Source]= Att_Optional | DV_AnyURI;
00443 
00444     // attribute - global"
00445     attList[E_AttributeGlobal][A_Default] = Att_Optional;
00446     attList[E_AttributeGlobal][A_Fixed] = Att_Optional;
00447     attList[E_AttributeGlobal][A_ID] = Att_Optional | DV_ID;
00448     attList[E_AttributeGlobal][A_Name] = Att_Required;
00449     attList[E_AttributeGlobal][A_Type] = Att_Optional;
00450 
00451     // "attribute - local"
00452     attList[E_AttributeLocal][A_Default] = Att_Optional;
00453     attList[E_AttributeLocal][A_Fixed] = Att_Optional;
00454     attList[E_AttributeLocal][A_Form]= Att_Optional | DV_Form;
00455     attList[E_AttributeLocal][A_ID] = Att_Optional | DV_ID;
00456     attList[E_AttributeLocal][A_Name] = Att_Required;
00457     attList[E_AttributeLocal][A_Type] = Att_Optional;
00458     attList[E_AttributeLocal][A_Use] = Att_Optional | DV_Use;
00459 
00460     // "attribute - ref"
00461     attList[E_AttributeRef][A_Default] = Att_Optional;
00462     attList[E_AttributeRef][A_Fixed] = Att_Optional;
00463     attList[E_AttributeRef][A_ID] = Att_Optional | DV_ID;
00464     attList[E_AttributeRef][A_Ref]= Att_Required;
00465     attList[E_AttributeRef][A_Use] = Att_Optional | DV_Use;
00466 
00467     // "attributeGroup - global"
00468     attList[E_AttributeGroupGlobal][A_ID] = Att_Optional | DV_ID;
00469     attList[E_AttributeGroupGlobal][A_Name] = Att_Required;
00470 
00471     // "attributeGroup - ref"
00472     attList[E_AttributeGroupRef][A_ID] = Att_Optional | DV_ID;
00473     attList[E_AttributeGroupRef][A_Ref]= Att_Required;
00474 
00475     // "choice"
00476     attList[E_Choice][A_ID] = Att_Optional | DV_ID;
00477     attList[E_Choice][A_MaxOccurs] = Att_Optional | DV_MaxOccurs;
00478     attList[E_Choice][A_MinOccurs] = Att_Optional | DV_NonNegInt;
00479 
00480     // "complexContent"
00481     attList[E_ComplexContent][A_ID] = Att_Optional | DV_ID;
00482     attList[E_ComplexContent][A_Mixed] = Att_Optional | DV_Boolean;
00483 
00484     // "complexType - global"
00485     attList[E_ComplexTypeGlobal][A_Abstract] = Att_Optional | DV_Boolean;
00486     attList[E_ComplexTypeGlobal][A_Block] = Att_Optional;
00487     attList[E_ComplexTypeGlobal][A_Final] = Att_Optional;
00488     attList[E_ComplexTypeGlobal][A_ID] = Att_Optional | DV_ID;
00489     attList[E_ComplexTypeGlobal][A_Mixed] = Att_Optional | DV_Boolean;
00490     attList[E_ComplexTypeGlobal][A_Name] = Att_Required;
00491 
00492     // "complexType - local"
00493     attList[E_ComplexTypeLocal][A_ID] = Att_Optional | DV_ID;
00494     attList[E_ComplexTypeLocal][A_Mixed] = Att_Optional | DV_Boolean;
00495 
00496     // "documentation"
00497     attList[E_Documentation][A_Source] = Att_Optional | DV_AnyURI;
00498 
00499     // "element - global"
00500     attList[E_ElementGlobal][A_Abstract] = Att_Optional | DV_Boolean;
00501     attList[E_ElementGlobal][A_Block] = Att_Optional;
00502     attList[E_ElementGlobal][A_Default] = Att_Optional;
00503     attList[E_ElementGlobal][A_Final] = Att_Optional;
00504     attList[E_ElementGlobal][A_Fixed] = Att_Optional;
00505     attList[E_ElementGlobal][A_ID] = Att_Optional | DV_ID;
00506     attList[E_ElementGlobal][A_Name] = Att_Required;
00507     attList[E_ElementGlobal][A_Nillable] = Att_Optional | DV_Boolean;
00508     attList[E_ElementGlobal][A_SubstitutionGroup] = Att_Optional;
00509     attList[E_ElementGlobal][A_Type] = Att_Optional;
00510 
00511     // "element - local"
00512     attList[E_ElementLocal][A_Block]= Att_Optional;
00513     attList[E_ElementLocal][A_Default] = Att_Optional;
00514     attList[E_ElementLocal][A_Fixed] = Att_Optional;
00515     attList[E_ElementLocal][A_Form] = Att_Optional | DV_Form;
00516     attList[E_ElementLocal][A_ID] = Att_Optional | DV_ID;
00517     attList[E_ElementLocal][A_MaxOccurs] = Att_Optional | DV_MaxOccurs;
00518     attList[E_ElementLocal][A_MinOccurs] = Att_Optional | DV_NonNegInt;
00519     attList[E_ElementLocal][A_Name] = Att_Required;
00520     attList[E_ElementLocal][A_Nillable] = Att_Optional | DV_Boolean;
00521     attList[E_ElementLocal][A_Type] = Att_Optional;
00522 
00523     //"element - ref"
00524     attList[E_ElementRef][A_ID] = Att_Optional | DV_ID;
00525     attList[E_ElementRef][A_MaxOccurs] = Att_Optional | DV_MaxOccurs;
00526     attList[E_ElementRef][A_MinOccurs] = Att_Optional | DV_NonNegInt;
00527     attList[E_ElementRef][A_Ref] = Att_Required;
00528 
00529     // "enumeration"
00530     attList[E_Enumeration][A_ID] = Att_Optional | DV_ID;
00531     attList[E_Enumeration][A_Value] = Att_Optional;
00532 
00533     // "extension"
00534     attList[E_Extension][A_Base] = Att_Required;
00535     attList[E_Extension][A_ID] = Att_Optional | DV_ID;
00536 
00537     //"field"
00538     attList[E_Field][A_ID] = Att_Optional | DV_ID;
00539     attList[E_Field][A_XPath] = Att_Required;
00540 
00541     // "fractionDigits"
00542     attList[E_FractionDigits][A_ID] = Att_Optional | DV_ID;
00543     attList[E_FractionDigits][A_Value] = Att_Optional | DV_NonNegInt;
00544     attList[E_FractionDigits][A_Fixed] = Att_Optional | DV_Boolean;
00545 
00546     // "group - global"
00547     attList[E_GroupGlobal][A_ID] = Att_Optional | DV_ID;
00548     attList[E_GroupGlobal][A_Name] = Att_Required;
00549 
00550     // "group - ref"
00551     attList[E_GroupRef][A_ID] = Att_Optional | DV_ID;
00552     attList[E_GroupRef][A_MaxOccurs] = Att_Optional | DV_MaxOccurs;
00553     attList[E_GroupRef][A_MinOccurs] = Att_Optional | DV_NonNegInt;
00554     attList[E_GroupRef][A_Ref] = Att_Required;
00555 
00556     // "import"
00557     attList[E_Import][A_ID] = Att_Optional | DV_ID;
00558     attList[E_Import][A_Namespace] = Att_Optional;
00559     attList[E_Import][A_SchemaLocation] = Att_Optional;
00560 
00561     // "include"
00562     attList[E_Include][A_ID] = Att_Optional | DV_ID;
00563     attList[E_Include][A_SchemaLocation] = Att_Required;
00564 
00565     // "key"
00566     attList[E_Key][A_ID] = Att_Optional | DV_ID;
00567     attList[E_Key][A_Name] = Att_Required;
00568 
00569     // "keyref"
00570     attList[E_KeyRef][A_ID] = Att_Optional | DV_ID;
00571     attList[E_KeyRef][A_Name] = Att_Required;
00572     attList[E_KeyRef][A_Refer] = Att_Required;
00573 
00574     // "length"
00575     attList[E_Length][A_ID] = Att_Optional | DV_ID;
00576     attList[E_Length][A_Value] = Att_Optional | DV_NonNegInt;
00577     attList[E_Length][A_Fixed] = Att_Optional | DV_Boolean;
00578 
00579     // "list"
00580     attList[E_List][A_ID] = Att_Optional | DV_ID;
00581     attList[E_List][A_ItemType] = Att_Optional;
00582 
00583     // "maxExclusive"
00584     attList[E_MaxExclusive][A_ID] = Att_Optional | DV_ID;
00585     attList[E_MaxExclusive][A_Value] = Att_Optional;
00586     attList[E_MaxExclusive][A_Fixed] = Att_Optional | DV_Boolean;
00587 
00588     // "maxInclusive"
00589     attList[E_MaxInclusive][A_ID] = Att_Optional | DV_ID;
00590     attList[E_MaxInclusive][A_Value] = Att_Optional;
00591     attList[E_MaxInclusive][A_Fixed] = Att_Optional | DV_Boolean;
00592 
00593     // "maxLength"
00594     attList[E_MaxLength][A_ID] = Att_Optional | DV_ID;
00595     attList[E_MaxLength][A_Value] = Att_Optional | DV_NonNegInt;
00596     attList[E_MaxLength][A_Fixed] = Att_Optional | DV_Boolean;
00597 
00598     // "minExclusive"
00599     attList[E_MinExclusive][A_ID] = Att_Optional | DV_ID;
00600     attList[E_MinExclusive][A_Value] = Att_Optional;
00601     attList[E_MinExclusive][A_Fixed] = Att_Optional | DV_Boolean;
00602 
00603     // "minInclusive"
00604     attList[E_MinInclusive][A_ID] = Att_Optional | DV_ID;
00605     attList[E_MinInclusive][A_Value] = Att_Optional;
00606     attList[E_MinInclusive][A_Fixed] = Att_Optional | DV_Boolean;
00607 
00608     // "minLength"
00609     attList[E_MinLength][A_ID] = Att_Optional | DV_ID;
00610     attList[E_MinLength][A_Value] = Att_Optional | DV_NonNegInt;
00611     attList[E_MinLength][A_Fixed] = Att_Optional | DV_Boolean;
00612 
00613     // "notation"
00614     attList[E_Notation][A_ID] = Att_Optional | DV_ID;
00615     attList[E_Notation][A_Name] = Att_Required;
00616     attList[E_Notation][A_Public] = Att_Optional;
00617     attList[E_Notation][A_System] = Att_Optional | DV_AnyURI;
00618 
00619     // "pattern"
00620     attList[E_Pattern][A_ID] = Att_Optional;
00621     attList[E_Pattern][A_Value] = Att_Optional;
00622 
00623     // "redefine"
00624     attList[E_Redefine][A_ID] = Att_Optional | DV_ID;
00625     attList[E_Redefine][A_SchemaLocation] = Att_Required;
00626 
00627     // "restriction"
00628     attList[E_Restriction][A_Base] = Att_Optional;
00629     attList[E_Restriction][A_ID] = Att_Optional | DV_ID;
00630 
00631     // "schema"
00632     attList[E_Schema][A_AttributeFormDefault] = Att_Optional | DV_Form;
00633     attList[E_Schema][A_BlockDefault] = Att_Optional;
00634     attList[E_Schema][A_ElementFormDefault] = Att_Optional | DV_Form;
00635     attList[E_Schema][A_FinalDefault] = Att_Optional;
00636     attList[E_Schema][A_ID] = Att_Optional | DV_ID;
00637     attList[E_Schema][A_TargetNamespace] = Att_Optional;
00638     attList[E_Schema][A_Version] = Att_Optional;
00639 
00640     // "selector"
00641     attList[E_Selector][A_ID] = Att_Optional | DV_ID;
00642     attList[E_Selector][A_XPath] = Att_Required;
00643 
00644     // "sequence"
00645     attList[E_Sequence][A_ID] = Att_Optional | DV_ID;
00646     attList[E_Sequence][A_MaxOccurs] = Att_Optional | DV_MaxOccurs;
00647     attList[E_Sequence][A_MinOccurs] = Att_Optional | DV_NonNegInt;
00648 
00649     // "simpleContent"
00650     attList[E_SimpleContent][A_ID] = Att_Optional | DV_ID;
00651 
00652     // "simpleType - global"
00653     attList[E_SimpleTypeGlobal][A_Final] = Att_Optional;
00654     attList[E_SimpleTypeGlobal][A_ID] = Att_Optional | DV_ID;
00655     attList[E_SimpleTypeGlobal][A_Name] = Att_Required;
00656 
00657     // "simpleType - local"
00658     attList[E_SimpleTypeLocal][A_Final] = Att_Optional;
00659     attList[E_SimpleTypeLocal][A_ID] = Att_Optional | DV_ID;
00660 
00661     // "totalDigits"
00662     attList[E_TotalDigits][A_ID] = Att_Optional | DV_ID;
00663     attList[E_TotalDigits][A_Value] = Att_Optional | DV_NonNegInt;
00664     attList[E_TotalDigits][A_Fixed] = Att_Optional | DV_Boolean;
00665 
00666     // "union"
00667     attList[E_Union][A_ID] = Att_Optional | DV_ID;
00668     attList[E_Union][A_MemberTypes] = Att_Optional;
00669 
00670     // "unique"
00671     attList[E_Unique][A_ID] = Att_Optional | DV_ID;
00672     attList[E_Unique][A_Name] = Att_Required;
00673 
00674     // "whitespace"
00675     attList[E_WhiteSpace][A_ID] = Att_Optional | DV_ID;
00676     attList[E_WhiteSpace][A_Value] = Att_Optional | DV_WhiteSpace;
00677     attList[E_WhiteSpace][A_Fixed] = Att_Optional | DV_Boolean;
00678 
00679     for (unsigned int j=0; j < E_Count; j++) {
00680 
00681         for (unsigned int index = 0; index < A_Count-1; index++)
00682         {
00683             fprintf(outFl, " %d,", attList[j][index]);
00684         }
00685 
00686         fprintf(outFl, " %d", attList[j][A_Count - 1]);
00687 
00688         if (j + 1 == E_Count)
00689             fprintf(outFl, "}\n};");
00690         else
00691             fprintf(outFl, "},\n    {");
00692     }
00693 
00694     fclose(outFl);
00695 }
00696 
00697 #endif
00698 
00699 
00700 unsigned short GeneralAttributeCheck::fgElemAttTable[GeneralAttributeCheck::E_Count][GeneralAttributeCheck::A_Count] =
00701 {
00702   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 258, 0, 514, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
00703   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
00704   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 130, 0, 10, 0, 0, 2, 0, 1026, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
00705   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 2, 0, 1026, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
00706   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0},
00707   { 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 34, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0},
00708   { 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 66, 34, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2050, 0, 0, 0},
00709   { 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2050, 0, 0, 0},
00710   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
00711   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
00712   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 130, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
00713   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
00714   { 18, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 34, 0, 0, 0, 0, 18, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
00715   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
00716   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0},
00717   { 18, 0, 0, 2, 0, 2, 0, 2, 0, 2, 0, 34, 0, 0, 0, 0, 0, 1, 0, 18, 0, 0, 0, 0, 0, 0, 2, 0, 0, 2, 0, 0, 0, 0},
00718   { 0, 0, 0, 2, 0, 2, 0, 0, 0, 2, 66, 34, 0, 130, 0, 10, 0, 1, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0},
00719   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 130, 0, 10, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
00720   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0},
00721   { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
00722   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
00723   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0},
00724   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
00725   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 130, 0, 10, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
00726   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0},
00727   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
00728   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
00729   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
00730   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0},
00731   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
00732   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0},
00733   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0},
00734   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0},
00735   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0},
00736   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0},
00737   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0},
00738   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0},
00739   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0},
00740   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
00741   { 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
00742   { 0, 66, 0, 0, 2, 0, 66, 0, 2, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0},
00743   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
00744   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 130, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
00745   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
00746   { 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 34, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
00747   { 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
00748   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0},
00749   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
00750   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
00751   { 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4098, 0, 0}
00752 };
00753 
00754 const XMLCh* GeneralAttributeCheck::fAttNames[GeneralAttributeCheck::A_Count] =
00755 {
00756     SchemaSymbols::fgATT_ABSTRACT,
00757     SchemaSymbols::fgATT_ATTRIBUTEFORMDEFAULT,
00758     SchemaSymbols::fgATT_BASE,
00759     SchemaSymbols::fgATT_BLOCK,
00760     SchemaSymbols::fgATT_BLOCKDEFAULT,
00761     SchemaSymbols::fgATT_DEFAULT,
00762     SchemaSymbols::fgATT_ELEMENTFORMDEFAULT,
00763     SchemaSymbols::fgATT_FINAL,
00764     SchemaSymbols::fgATT_FINALDEFAULT,
00765     SchemaSymbols::fgATT_FIXED,
00766     SchemaSymbols::fgATT_FORM,
00767     SchemaSymbols::fgATT_ID,
00768     SchemaSymbols::fgATT_ITEMTYPE,
00769     SchemaSymbols::fgATT_MAXOCCURS,
00770     SchemaSymbols::fgATT_MEMBERTYPES,
00771     SchemaSymbols::fgATT_MINOCCURS,
00772     SchemaSymbols::fgATT_MIXED,
00773     SchemaSymbols::fgATT_NAME,
00774     SchemaSymbols::fgATT_NAMESPACE,
00775     SchemaSymbols::fgATT_NILLABLE,
00776     SchemaSymbols::fgATT_PROCESSCONTENTS,
00777     SchemaSymbols::fgATT_PUBLIC,
00778     SchemaSymbols::fgATT_REF,
00779     SchemaSymbols::fgATT_REFER,
00780     SchemaSymbols::fgATT_SCHEMALOCATION,
00781     SchemaSymbols::fgATT_SOURCE,
00782     SchemaSymbols::fgATT_SUBSTITUTIONGROUP,
00783     SchemaSymbols::fgATT_SYSTEM,
00784     SchemaSymbols::fgATT_TARGETNAMESPACE,
00785     SchemaSymbols::fgATT_TYPE,
00786     SchemaSymbols::fgATT_USE,
00787     SchemaSymbols::fgATT_VALUE,
00788     SchemaSymbols::fgATT_VERSION,
00789     SchemaSymbols::fgATT_XPATH,
00790 };
00791 
00792 XERCES_CPP_NAMESPACE_END
00793