gareth 2003/01/29 11:51:48 Modified: c/src/xercesc/validators/datatype DatatypeValidatorFactory.cpp DatatypeValidatorFactory.hpp Log: type names / uris are now added to DatatypeValidators. Revision Changes Path 1.11 +107 -57 xml-xerces/c/src/xercesc/validators/datatype/DatatypeValidatorFactory.cpp Index: DatatypeValidatorFactory.cpp =================================================================== RCS file: /home/cvs/xml-xerces/c/src/xercesc/validators/datatype/DatatypeValidatorFactory.cpp,v retrieving revision 1.10 retrieving revision 1.11 diff -u -r1.10 -r1.11 --- DatatypeValidatorFactory.cpp 3 Jan 2003 16:39:45 -0000 1.10 +++ DatatypeValidatorFactory.cpp 29 Jan 2003 19:51:48 -0000 1.11 @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.11 2003/01/29 19:51:48 gareth + * type names / uris are now added to DatatypeValidators. + * * Revision 1.10 2003/01/03 16:39:45 tng * Performance: no need to create that many members for fBuiltInRegistry * @@ -210,6 +213,7 @@ XERCES_CPP_NAMESPACE_BEGIN + // --------------------------------------------------------------------------- // DatatypeValidatorFactory: Local const data // --------------------------------------------------------------------------- @@ -401,7 +405,6 @@ void DatatypeValidatorFactory::expandRegistryToFullSchemaSet() { static XMLRegisterCleanup builtInRegistryCleanup; - // Initialize common Schema/DTD Datatype validator set if not initialized if (fBuiltInRegistry == 0) { RefHashTableOf<DatatypeValidator>* t = new RefHashTableOf<DatatypeValidator>(29); @@ -413,49 +416,85 @@ { builtInRegistryCleanup.registerCleanup(reinitRegistry); - fBuiltInRegistry->put((void*) SchemaSymbols::fgDT_STRING, - new StringDatatypeValidator()); - fBuiltInRegistry->put((void*) XMLUni::fgNotationString, - new NOTATIONDatatypeValidator()); - - - fBuiltInRegistry->put((void*) SchemaSymbols::fgDT_ANYSIMPLETYPE, - new AnySimpleTypeDatatypeValidator()); - fBuiltInRegistry->put((void*) SchemaSymbols::fgDT_BOOLEAN, - new BooleanDatatypeValidator()); - fBuiltInRegistry->put((void*) SchemaSymbols::fgDT_DECIMAL, - new DecimalDatatypeValidator()); - fBuiltInRegistry->put((void*) SchemaSymbols::fgDT_HEXBINARY, - new HexBinaryDatatypeValidator()); - fBuiltInRegistry->put((void*) SchemaSymbols::fgDT_BASE64BINARY, - new Base64BinaryDatatypeValidator()); - fBuiltInRegistry->put((void*) SchemaSymbols::fgDT_DOUBLE, - new DoubleDatatypeValidator()); - fBuiltInRegistry->put((void*) SchemaSymbols::fgDT_FLOAT, - new FloatDatatypeValidator()); - fBuiltInRegistry->put((void*) SchemaSymbols::fgDT_ANYURI, - new AnyURIDatatypeValidator()); - fBuiltInRegistry->put((void*) SchemaSymbols::fgDT_QNAME, - new QNameDatatypeValidator()); - - fBuiltInRegistry->put((void*) SchemaSymbols::fgDT_DATETIME, - new DateTimeDatatypeValidator()); - fBuiltInRegistry->put((void*) SchemaSymbols::fgDT_DATE, - new DateDatatypeValidator()); - fBuiltInRegistry->put((void*) SchemaSymbols::fgDT_TIME, - new TimeDatatypeValidator()); - fBuiltInRegistry->put((void*) SchemaSymbols::fgDT_DAY, - new DayDatatypeValidator()); - fBuiltInRegistry->put((void*) SchemaSymbols::fgDT_MONTH, - new MonthDatatypeValidator()); - fBuiltInRegistry->put((void*) SchemaSymbols::fgDT_MONTHDAY, - new MonthDayDatatypeValidator()); - fBuiltInRegistry->put((void*) SchemaSymbols::fgDT_YEAR, - new YearDatatypeValidator()); - fBuiltInRegistry->put((void*) SchemaSymbols::fgDT_YEARMONTH, - new YearMonthDatatypeValidator()); - fBuiltInRegistry->put((void*) SchemaSymbols::fgDT_DURATION, - new DurationDatatypeValidator()); + DatatypeValidator *dv = new StringDatatypeValidator(); + dv->setTypeName(SchemaSymbols::fgDT_STRING, SchemaSymbols::fgURI_SCHEMAFORSCHEMA); + fBuiltInRegistry->put((void*) SchemaSymbols::fgDT_STRING, dv); + + dv = new NOTATIONDatatypeValidator(); + dv->setTypeName(XMLUni::fgNotationString, SchemaSymbols::fgURI_SCHEMAFORSCHEMA); + fBuiltInRegistry->put((void*) XMLUni::fgNotationString, dv); + + dv = new AnySimpleTypeDatatypeValidator(); + dv->setTypeName(SchemaSymbols::fgDT_ANYSIMPLETYPE, SchemaSymbols::fgURI_SCHEMAFORSCHEMA); + fBuiltInRegistry->put((void*) SchemaSymbols::fgDT_ANYSIMPLETYPE, dv); + + dv = new BooleanDatatypeValidator(); + dv->setTypeName(SchemaSymbols::fgDT_BOOLEAN, SchemaSymbols::fgURI_SCHEMAFORSCHEMA); + fBuiltInRegistry->put((void*) SchemaSymbols::fgDT_BOOLEAN, dv); + + dv = new DecimalDatatypeValidator(); + dv->setTypeName(SchemaSymbols::fgDT_DECIMAL, SchemaSymbols::fgURI_SCHEMAFORSCHEMA); + fBuiltInRegistry->put((void*) SchemaSymbols::fgDT_DECIMAL, dv); + + dv = new HexBinaryDatatypeValidator(); + dv->setTypeName(SchemaSymbols::fgDT_HEXBINARY, SchemaSymbols::fgURI_SCHEMAFORSCHEMA); + fBuiltInRegistry->put((void*) SchemaSymbols::fgDT_HEXBINARY, dv); + + dv = new Base64BinaryDatatypeValidator(); + dv->setTypeName(SchemaSymbols::fgDT_BASE64BINARY, SchemaSymbols::fgURI_SCHEMAFORSCHEMA); + fBuiltInRegistry->put((void*) SchemaSymbols::fgDT_BASE64BINARY, dv); + + dv = new DoubleDatatypeValidator(); + dv->setTypeName(SchemaSymbols::fgDT_DOUBLE, SchemaSymbols::fgURI_SCHEMAFORSCHEMA); + fBuiltInRegistry->put((void*) SchemaSymbols::fgDT_DOUBLE, dv); + + dv = new FloatDatatypeValidator(); + dv->setTypeName(SchemaSymbols::fgDT_FLOAT, SchemaSymbols::fgURI_SCHEMAFORSCHEMA); + fBuiltInRegistry->put((void*) SchemaSymbols::fgDT_FLOAT, dv); + + dv = new AnyURIDatatypeValidator(); + dv->setTypeName(SchemaSymbols::fgDT_ANYURI, SchemaSymbols::fgURI_SCHEMAFORSCHEMA); + fBuiltInRegistry->put((void*) SchemaSymbols::fgDT_ANYURI, dv); + + dv = new QNameDatatypeValidator(); + dv->setTypeName(SchemaSymbols::fgDT_QNAME, SchemaSymbols::fgURI_SCHEMAFORSCHEMA); + fBuiltInRegistry->put((void*) SchemaSymbols::fgDT_QNAME, dv); + + dv = new DateTimeDatatypeValidator(); + dv->setTypeName(SchemaSymbols::fgDT_DATETIME, SchemaSymbols::fgURI_SCHEMAFORSCHEMA); + fBuiltInRegistry->put((void*) SchemaSymbols::fgDT_DATETIME, dv); + + dv = new DateDatatypeValidator(); + dv->setTypeName(SchemaSymbols::fgDT_DATE, SchemaSymbols::fgURI_SCHEMAFORSCHEMA); + fBuiltInRegistry->put((void*) SchemaSymbols::fgDT_DATE, dv); + + dv = new TimeDatatypeValidator(); + dv->setTypeName(SchemaSymbols::fgDT_TIME, SchemaSymbols::fgURI_SCHEMAFORSCHEMA); + fBuiltInRegistry->put((void*) SchemaSymbols::fgDT_TIME, dv); + + dv = new DayDatatypeValidator(); + dv->setTypeName(SchemaSymbols::fgDT_DAY, SchemaSymbols::fgURI_SCHEMAFORSCHEMA); + fBuiltInRegistry->put((void*) SchemaSymbols::fgDT_DAY, dv); + + dv = new MonthDatatypeValidator(); + dv->setTypeName(SchemaSymbols::fgDT_MONTH, SchemaSymbols::fgURI_SCHEMAFORSCHEMA); + fBuiltInRegistry->put((void*) SchemaSymbols::fgDT_MONTH, dv); + + dv = new MonthDayDatatypeValidator(); + dv->setTypeName(SchemaSymbols::fgDT_MONTHDAY, SchemaSymbols::fgURI_SCHEMAFORSCHEMA); + fBuiltInRegistry->put((void*) SchemaSymbols::fgDT_MONTHDAY, dv); + + dv = new YearDatatypeValidator(); + dv->setTypeName(SchemaSymbols::fgDT_YEAR, SchemaSymbols::fgURI_SCHEMAFORSCHEMA); + fBuiltInRegistry->put((void*) SchemaSymbols::fgDT_YEAR, dv); + + dv = new YearMonthDatatypeValidator(); + dv->setTypeName(SchemaSymbols::fgDT_YEARMONTH, SchemaSymbols::fgURI_SCHEMAFORSCHEMA); + fBuiltInRegistry->put((void*) SchemaSymbols::fgDT_YEARMONTH, dv); + + dv = new DurationDatatypeValidator(); + dv->setTypeName(SchemaSymbols::fgDT_DURATION, SchemaSymbols::fgURI_SCHEMAFORSCHEMA); + fBuiltInRegistry->put((void*) SchemaSymbols::fgDT_DURATION, dv); // REVISIT // We are creating a lot of Hashtables for the facets of the different @@ -469,8 +508,8 @@ new KVStringPair(SchemaSymbols::fgELT_WHITESPACE, SchemaSymbols::fgWS_REPLACE)); createDatatypeValidator(SchemaSymbols::fgDT_NORMALIZEDSTRING, - getDatatypeValidator(SchemaSymbols::fgDT_STRING), - facets, 0, false, 0, false); + getDatatypeValidator(SchemaSymbols::fgDT_STRING), + facets, 0, false, 0, false); // Create 'token' datatype validator facets = new RefHashTableOf<KVStringPair>(3); @@ -481,11 +520,15 @@ getDatatypeValidator(SchemaSymbols::fgDT_NORMALIZEDSTRING), facets, 0, false, 0, false); - fBuiltInRegistry->put((void*) SchemaSymbols::fgDT_NAME, - new NameDatatypeValidator(getDatatypeValidator(SchemaSymbols::fgDT_TOKEN), 0, 0, 0)); - fBuiltInRegistry->put((void*) SchemaSymbols::fgDT_NCNAME, - new NCNameDatatypeValidator(getDatatypeValidator(SchemaSymbols::fgDT_NAME), 0, 0, 0)); + dv = new NameDatatypeValidator(getDatatypeValidator(SchemaSymbols::fgDT_TOKEN), 0, 0, 0); + dv->setTypeName(SchemaSymbols::fgDT_NAME, SchemaSymbols::fgURI_SCHEMAFORSCHEMA); + fBuiltInRegistry->put((void*) SchemaSymbols::fgDT_NAME, dv); + + + dv = new NCNameDatatypeValidator(getDatatypeValidator(SchemaSymbols::fgDT_NAME), 0, 0, 0); + dv->setTypeName(SchemaSymbols::fgDT_NCNAME, SchemaSymbols::fgURI_SCHEMAFORSCHEMA); + fBuiltInRegistry->put((void*) SchemaSymbols::fgDT_NCNAME, dv); // Create 'NMTOKEN' datatype validator facets = new RefHashTableOf<KVStringPair>(3); @@ -660,16 +703,21 @@ fUserDefinedRegistry = new RefHashTableOf<DatatypeValidator>(29); if (!getDatatypeValidator(XMLUni::fgIDRefsString)) { - fUserDefinedRegistry->put((void*) XMLUni::fgIDString, - new IDDatatypeValidator(getDatatypeValidator(SchemaSymbols::fgDT_NCNAME), 0, 0, 0)); - fUserDefinedRegistry->put((void*) XMLUni::fgIDRefString, - new IDREFDatatypeValidator(getDatatypeValidator(SchemaSymbols::fgDT_NCNAME), 0, 0, 0)); - fUserDefinedRegistry->put((void*) XMLUni::fgEntityString, - new ENTITYDatatypeValidator(getDatatypeValidator(SchemaSymbols::fgDT_NCNAME), 0, 0, 0)); + DatatypeValidator *dv = new IDDatatypeValidator(getDatatypeValidator(SchemaSymbols::fgDT_NCNAME), 0, 0, 0); + dv->setTypeName(XMLUni::fgIDString, SchemaSymbols::fgURI_SCHEMAFORSCHEMA); + fUserDefinedRegistry->put((void*) XMLUni::fgIDString, dv); + + dv = new IDREFDatatypeValidator(getDatatypeValidator(SchemaSymbols::fgDT_NCNAME), 0, 0, 0); + dv->setTypeName(XMLUni::fgIDRefString, SchemaSymbols::fgURI_SCHEMAFORSCHEMA); + fUserDefinedRegistry->put((void*) XMLUni::fgIDRefString, dv); + + dv = new ENTITYDatatypeValidator(getDatatypeValidator(SchemaSymbols::fgDT_NCNAME), 0, 0, 0); + dv->setTypeName(XMLUni::fgEntityString, SchemaSymbols::fgURI_SCHEMAFORSCHEMA); + fUserDefinedRegistry->put((void*) XMLUni::fgEntityString, dv); // Create 'IDREFS' datatype validator - createDatatypeValidator(XMLUni::fgIDRefsString, + createDatatypeValidator(XMLUni::fgIDRefsString, getDatatypeValidator(XMLUni::fgIDRefString), 0, 0, true, 0, true); // Create 'ENTITIES' datatype validator @@ -736,6 +784,7 @@ else { fBuiltInRegistry->put((void *)typeName, datatypeValidator); } + datatypeValidator->setTypeName(typeName); } return datatypeValidator; @@ -768,6 +817,7 @@ else { fBuiltInRegistry->put((void *)typeName, datatypeValidator); } + datatypeValidator->setTypeName(typeName); } return datatypeValidator; 1.7 +12 -9 xml-xerces/c/src/xercesc/validators/datatype/DatatypeValidatorFactory.hpp Index: DatatypeValidatorFactory.hpp =================================================================== RCS file: /home/cvs/xml-xerces/c/src/xercesc/validators/datatype/DatatypeValidatorFactory.hpp,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- DatatypeValidatorFactory.hpp 18 Dec 2002 14:17:55 -0000 1.6 +++ DatatypeValidatorFactory.hpp 29 Jan 2003 19:51:48 -0000 1.7 @@ -227,6 +227,12 @@ // ----------------------------------------------------------------------- void cleanUp(); + /** + * helper method to set the uri to the schema uri and name to tName for the DatatypeValidator + * tName in ref. + */ + void setDatatypeName(RefHashTableOf<DatatypeValidator>* reg, const XMLCh* tName); + // ----------------------------------------------------------------------- // Private data members // @@ -236,28 +242,25 @@ // fBuiltInRegistry // This is a hashtable of built-in primitive datatype validators. // ----------------------------------------------------------------------- - RefHashTableOf<DatatypeValidator>* fUserDefinedRegistry; - static RefHashTableOf<DatatypeValidator>* fBuiltInRegistry; -}; + XERCES_CPP_NAMESPACE_QUALIFIER RefHashTableOf<XERCES_CPP_NAMESPACE_QUALIFIER DatatypeValidator>* fUserDefinedRegistry; + static XERCES_CPP_NAMESPACE_QUALIFIER RefHashTableOf<DatatypeValidator>* fBuiltInRegistry; + friend class XPath2ContextImpl; +}; -// --------------------------------------------------------------------------- -// DatatypeValidatorFactory: Getters -// --------------------------------------------------------------------------- inline DatatypeValidator* DatatypeValidatorFactory::getDatatypeValidator(const XMLCh* const dvType) const { if (dvType) { - if (fBuiltInRegistry && fBuiltInRegistry->containsKey(dvType)) { return fBuiltInRegistry->get(dvType); } if (fUserDefinedRegistry && fUserDefinedRegistry->containsKey(dvType)) { return fUserDefinedRegistry->get(dvType); + } } - return 0; }
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]