📄 datatypevalidator.hpp
字号:
/* * The Apache Software License, Version 1.1 * * Copyright (c) 2001-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, * if any, must include the following acknowledgment: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowledgment may appear in the software itself, * if and wherever such third-party acknowledgments normally appear. * * 4. The names "Xerces" and "Apache Software Foundation" must * not be used to endorse or promote products derived from this * software without prior written permission. For written * permission, please contact apache\@apache.org. * * 5. Products derived from this software may not be called "Apache", * nor may "Apache" appear in their name, without prior written * permission of the Apache Software Foundation. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation, and was * originally based on software copyright (c) 2001, International * Business Machines, Inc., http://www.ibm.com . For more information * on the Apache Software Foundation, please see * <http://www.apache.org/>. *//* * $Id: DatatypeValidator.hpp,v 1.24 2004/01/29 11:51:22 cargilld Exp $ */#if !defined(DATATYPEVALIDATOR_HPP)#define DATATYPEVALIDATOR_HPP#include <xercesc/util/PlatformUtils.hpp>#include <xercesc/util/RefHashTableOf.hpp>#include <xercesc/util/KVStringPair.hpp>#include <xercesc/util/XMLUniDefs.hpp>#include <xercesc/util/regx/RegularExpression.hpp>#include <xercesc/validators/schema/SchemaSymbols.hpp>#include <xercesc/internal/XSerializable.hpp>#include <xercesc/framework/psvi/XSSimpleTypeDefinition.hpp>#include <xercesc/framework/ValidationContext.hpp>XERCES_CPP_NAMESPACE_BEGINclass MemoryManager;/** * DataTypeValidator defines the interface that data type validators must * obey. These validators can be supplied by the application writer and may * be useful as standalone code as well as plugins to the validator * architecture. * * Notice: * The datatype validator will own the facets hashtable passed to it during * construction, which means that the datatype validator will be responsible * for the deletion. The facets hashtable will be created during parsing and * passed to the appropriate datatype validator which in turn will delete it * upon its destruction. * */class VALIDATORS_EXPORT DatatypeValidator : public XSerializable, public XMemory{public: // ----------------------------------------------------------------------- // Constant data // ----------------------------------------------------------------------- //facets enum { FACET_LENGTH = 1, FACET_MINLENGTH = 1<<1, FACET_MAXLENGTH = 1<<2, FACET_PATTERN = 1<<3, FACET_ENUMERATION = 1<<4, FACET_MAXINCLUSIVE = 1<<5, FACET_MAXEXCLUSIVE = 1<<6, FACET_MININCLUSIVE = 1<<7, FACET_MINEXCLUSIVE = 1<<8, FACET_TOTALDIGITS = 1<<9, FACET_FRACTIONDIGITS = 1<<10, FACET_ENCODING = 1<<11, FACET_DURATION = 1<<12, FACET_PERIOD = 1<<13, FACET_WHITESPACE = 1<<14 }; //2.4.2.6 whiteSpace - Datatypes enum { PRESERVE = 0, REPLACE = 1, COLLAPSE = 2 }; enum ValidatorType { String, AnyURI, QName, Name, NCName, Boolean, Float, Double, Decimal, HexBinary, Base64Binary, Duration, DateTime, Date, Time, MonthDay, YearMonth, Year, Month, Day, ID, IDREF, ENTITY, NOTATION, List, Union, AnySimpleType, UnKnown }; // ----------------------------------------------------------------------- // Public Destructor // ----------------------------------------------------------------------- /** @name Destructor. */ //@{ virtual ~DatatypeValidator(); //@} // ----------------------------------------------------------------------- // Getter methods // ----------------------------------------------------------------------- /** @name Getter Functions */ //@{ /** * Returns the final values of the simpleType */ int getFinalSet() const; /** * Returns the datatype facet if any is set. */ RefHashTableOf<KVStringPair>* getFacets() const; /** * Returns default value (collapse) for whiteSpace facet. * This function is overwritten in StringDatatypeValidator. */ short getWSFacet () const; /** * Returns the base datatype validator if set. */ DatatypeValidator* getBaseValidator() const; /** * Returns the 'class' type of datatype validator */ ValidatorType getType() const; /** * Returns whether the type is atomic or not * * To be redefined in List/Union validators */ virtual bool isAtomic() const; /** * Returns the datatype enumeration if any is set. * Derived class shall provide their own copy. */ virtual const RefArrayVectorOf<XMLCh>* getEnumString() const = 0; /** * returns true if this type is anonymous **/ bool getAnonymous() const; /** * sets this type to be anonymous **/ void setAnonymous(); /** * Fundamental Facet: ordered */ XSSimpleTypeDefinition::ORDERING getOrdered() const; /** * Fundamental Facet: cardinality. */ bool getFinite() const; /** * Fundamental Facet: bounded. */ bool getBounded() const; /** * Fundamental Facet: numeric. */ bool getNumeric() const; /** * Canonical Representation * * Derivative datatype may overwrite this method once * it has its own canonical representation other than * the default one. * * @param rawData: data in raw string * @param memMgr: memory manager * @param toValiate: to validate the raw string or not * * @return: canonical representation of the data * * Note: * * 1. the return value is kept in memory allocated * by the memory manager passed in or by dv's * if no memory manager is provided. * * 2. client application is responsible for the * proper deallcation of the memory allocated * for the returned value. * * 3. In the case where the rawData is not valid * with regards to the fundamental datatype, * a null string is returned. * */ virtual const XMLCh* getCanonicalRepresentation ( const XMLCh* const rawData , MemoryManager* const memMgr = 0 , bool toValidate = false ) const; //@} // ----------------------------------------------------------------------- // Validation methods // ----------------------------------------------------------------------- /** @name Validation Function */ //@{ /** * Checks that the "content" string is valid datatype. * If invalid, a Datatype validation exception is thrown. * * @param content A string containing the content to be validated * */ virtual void validate ( const XMLCh* const content , ValidationContext* const context = 0 , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager ) = 0; /** * Checks whether a given type can be used as a substitute * * @param toCheck A datatype validator of the type to be used as a * substitute * * To be redefined in UnionDatatypeValidator */ virtual bool isSubstitutableBy(const DatatypeValidator* const toCheck); //@} // ----------------------------------------------------------------------- // Compare methods // ----------------------------------------------------------------------- /** @name Compare Function */ //@{ /** * Compares content in the Domain value vs. lexical value. * * e.g. If type is a float then 1.0 may be equivalent to 1 even though * both are lexically different. * * @param value1 string to compare * * @param value2 string to compare * * We will provide a default behavior that should be redefined at the * children level, if necessary (i.e. boolean case). */ virtual int compare(const XMLCh* const value1, const XMLCh* const value2 , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager ); //@} /** * Returns an instance of the base datatype validator class * Used by the DatatypeValidatorFactory. */ virtual DatatypeValidator* newInstance ( RefHashTableOf<KVStringPair>* const facets , RefArrayVectorOf<XMLCh>* const enums , const int finalSet , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager ) = 0; /** * Returns the uri,name of the type this validator is for */ const XMLCh* getTypeName() const; /** * sets the uri,name that this validator is for - typeName is uri,name string. * due to the internals of xerces this will set the uri to be the schema uri if * there is no comma in typeName */ void setTypeName(const XMLCh* const typeName); /** * sets the uri,name that this validator is for */ void setTypeName(const XMLCh* const name, const XMLCh* const uri); /** * Returns the uri of the type this validator is for */ const XMLCh* getTypeUri() const; /** * Returns the name of the type this validator is for */ const XMLCh* getTypeLocalName() const; /** * Returns the plugged-in memory manager */ MemoryManager* getMemoryManager() const; /*** * Support for Serialization/De-serialization ***/ DECL_XSERIALIZABLE(DatatypeValidator) /*** * * Serialzie DatatypeValidator derivative * * Param * serEng: serialize engine * dv: DatatypeValidator derivative
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -