You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xerces.apache.org by pe...@apache.org on 2001/07/04 16:38:27 UTC
cvs commit: xml-xerces/c/src/validators/datatype IDDatatypeValidator.cpp IDDatatypeValidator.hpp DatatypeValidatorFactory.cpp
peiyongz 01/07/04 07:38:27
Modified: c/src/util XMLString.cpp XMLString.hpp
c/src/validators/datatype DatatypeValidatorFactory.cpp
Added: c/src/validators/datatype IDDatatypeValidator.cpp
IDDatatypeValidator.hpp
Log:
IDDatatypeValidator: created
DatatypeValidatorFactory: IDDTV enabled
XMLString:isValidName(): to validate Name (XML [4][5])
Revision Changes Path
1.24 +29 -1 xml-xerces/c/src/util/XMLString.cpp
Index: XMLString.cpp
===================================================================
RCS file: /home/cvs/xml-xerces/c/src/util/XMLString.cpp,v
retrieving revision 1.23
retrieving revision 1.24
diff -u -r1.23 -r1.24
--- XMLString.cpp 2001/06/20 15:06:09 1.23
+++ XMLString.cpp 2001/07/04 14:38:19 1.24
@@ -55,7 +55,7 @@
*/
/*
- * $Id: XMLString.cpp,v 1.23 2001/06/20 15:06:09 peiyongz Exp $
+ * $Id: XMLString.cpp,v 1.24 2001/07/04 14:38:19 peiyongz Exp $
*/
@@ -637,6 +637,34 @@
return true;
}
+/**
+ * isValidName
+ *
+ * Name::= (Letter | '_' | ':') (NameChar)*
+ * NameChar ::= Letter | Digit | '.' | '-' | '_' | ':'
+ * | CombiningChar | Extender
+ */
+bool XMLString::isValidName(const XMLCh* const name) {
+
+ if (!name ||
+ (XMLString::stringLen(name) == 0))
+ return false;
+
+ const XMLCh* tempName = name;
+ XMLCh firstChar = *tempName++;
+
+ if (!XMLReader::isXMLLetter(firstChar) &&
+ (firstChar != chUnderscore) &&
+ (firstChar != chColon) )
+ return false;
+
+ while(*tempName)
+ if (!XMLReader::isNameChar(*tempName++))
+ return false;
+
+ return true;
+}
+
/**
* isValidEncName
*
1.24 +11 -0 xml-xerces/c/src/util/XMLString.hpp
Index: XMLString.hpp
===================================================================
RCS file: /home/cvs/xml-xerces/c/src/util/XMLString.hpp,v
retrieving revision 1.23
retrieving revision 1.24
diff -u -r1.23 -r1.24
--- XMLString.hpp 2001/06/13 14:07:55 1.23
+++ XMLString.hpp 2001/07/04 14:38:20 1.24
@@ -56,6 +56,11 @@
/*
* $Log: XMLString.hpp,v $
+ * Revision 1.24 2001/07/04 14:38:20 peiyongz
+ * IDDatatypeValidator: created
+ * DatatypeValidatorFactory: IDDTV enabled
+ * XMLString:isValidName(): to validate Name (XML [4][5])
+ *
* Revision 1.23 2001/06/13 14:07:55 peiyongz
* isValidaEncName() to validate an encoding name (EncName)
*
@@ -1029,6 +1034,13 @@
static bool isValidNCName(const XMLCh* const name);
/**
+ * Checks whether an name is a valid Name.
+ * @param name The string to check its Name validity
+ * @return Returns true if name is Name valid, otherwise false
+ */
+ static bool isValidName(const XMLCh* const name);
+
+ /**
* Checks whether an name is a valid EncName.
* @param name The string to check its EncName validity
* @return Returns true if name is EncName valid, otherwise false
@@ -1040,6 +1052,7 @@
* @param theChar: the character to check
* @return Returns true if within the range, otherwise false
*/
+
static bool isAlpha(XMLCh const theChar);
/**
1.11 +5 -2 xml-xerces/c/src/validators/datatype/DatatypeValidatorFactory.cpp
Index: DatatypeValidatorFactory.cpp
===================================================================
RCS file: /home/cvs/xml-xerces/c/src/validators/datatype/DatatypeValidatorFactory.cpp,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -r1.10 -r1.11
--- DatatypeValidatorFactory.cpp 2001/05/28 21:11:17 1.10
+++ DatatypeValidatorFactory.cpp 2001/07/04 14:38:24 1.11
@@ -56,6 +56,11 @@
/*
* $Log: DatatypeValidatorFactory.cpp,v $
+ * Revision 1.11 2001/07/04 14:38:24 peiyongz
+ * IDDatatypeValidator: created
+ * DatatypeValidatorFactory: IDDTV enabled
+ * XMLString:isValidName(): to validate Name (XML [4][5])
+ *
* Revision 1.10 2001/05/28 21:11:17 tng
* Schema: Various DatatypeValidator fix. By Pei Yong Zhang
*
@@ -102,6 +107,7 @@
#include <validators/datatype/DecimalDatatypeValidator.hpp>
#include <validators/datatype/HexBinaryDatatypeValidator.hpp>
#include <validators/datatype/Base64BinaryDatatypeValidator.hpp>
+#include <validators/datatype/IDDatatypeValidator.hpp>
#include <util/PlatformUtils.hpp>
#include <util/XMLDeleterFor.hpp>
@@ -307,10 +313,9 @@
fBuiltInRegistry->put((void*) SchemaSymbols::fgDT_STRING,
new StringDatatypeValidator());
-
-/*
fBuiltInRegistry->put((void*) XMLUni::fgIDString,
new IDDatatypeValidator());
+/*
fBuiltInRegistry->put((void*) XMLUni::fgIDRefString,
new IDREFDatatypeValidator());
fBuiltInRegistry->put((void*) XMLUni::fgEntityString,
1.1 xml-xerces/c/src/validators/datatype/IDDatatypeValidator.cpp
Index: IDDatatypeValidator.cpp
===================================================================
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 2001 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: IDDatatypeValidator.cpp,v 1.1 2001/07/04 14:38:25 peiyongz Exp $
* $Log: IDDatatypeValidator.cpp,v $
* Revision 1.1 2001/07/04 14:38:25 peiyongz
* IDDatatypeValidator: created
* DatatypeValidatorFactory: IDDTV enabled
* XMLString:isValidName(): to validate Name (XML [4][5])
*
*/
// ---------------------------------------------------------------------------
// Includes
// ---------------------------------------------------------------------------
#include <validators/datatype/IDDatatypeValidator.hpp>
#include <validators/datatype/InvalidDatatypeFacetException.hpp>
#include <validators/datatype/InvalidDatatypeValueException.hpp>
#include <util/NumberFormatException.hpp>
static const int BUF_LEN = 64;
static XMLCh value1[BUF_LEN+1];
static XMLCh value2[BUF_LEN+1];
// ---------------------------------------------------------------------------
// Constructors and Destructor
// ---------------------------------------------------------------------------
IDDatatypeValidator::IDDatatypeValidator(
DatatypeValidator* const baseValidator
, RefHashTableOf<KVStringPair>* const facets
, RefVectorOf<XMLCh>* const enums
, const int finalSet)
:StringDatatypeValidator(baseValidator, facets, enums, finalSet)
,fTableOfId(0)
{
//
// the StringDatatypeValidator has the same set of
// constrainning facets as the IDDatatypeValidator
// and the StringDatatypeValidator(...) would do
// all the jobs there.
//
// if enumeration is provided, make sure that they
// are all valid NCName(s).
//
if (enums)
{
int enumLength = enums->size();
for ( int i = 0; i < enumLength; i++)
{
if ( XMLString::isValidName(enums->elementAt(i)) == false)
ThrowXML(InvalidDatatypeFacetException, XMLExcepts::FACET_Len_minLen);
//("Value '"+content+"' is not a valid NCName");
}
}
DatatypeValidator::setType(DatatypeValidator::ID);
}
void IDDatatypeValidator::validate(const XMLCh* const content)
{
// use StringDatatypeValidator (which in turn, invoke
// the baseValidator) to validate content against
// facets if any.
//
StringDatatypeValidator::validate(content);
// check 3.3.1.constrain must: "Name"
//
if (XMLString::isValidName(content) == false)
ThrowXML(InvalidDatatypeValueException, XMLExcepts::FACET_Len_minLen);
//("Value '"+content+"' is not a valid NCName");
// storing IDs to the global ID table
if (fTableOfId)
addId(content);
}
void IDDatatypeValidator::addId(const XMLCh * const content)
{
if (fTableOfId->containsKey(content))
ThrowXML(InvalidDatatypeValueException, XMLExcepts::FACET_Len_minLen);
//ThrowXML(InvalidDatatypeValueException, XMLExcepts::VALUE_ID_Not_Unique);
//("Value '"+content+"' has to be unique");
fTableOfId->put((void*)content
, new KVStringPair(content, XMLUni::fgZeroLenString));
}
/**
* End of file IDDatatypeValidator.cpp
*/
1.1 xml-xerces/c/src/validators/datatype/IDDatatypeValidator.hpp
Index: IDDatatypeValidator.hpp
===================================================================
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 2001 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: IDDatatypeValidator.hpp,v 1.1 2001/07/04 14:38:25 peiyongz Exp $
* $Log: IDDatatypeValidator.hpp,v $
* Revision 1.1 2001/07/04 14:38:25 peiyongz
* IDDatatypeValidator: created
* DatatypeValidatorFactory: IDDTV enabled
* XMLString:isValidName(): to validate Name (XML [4][5])
*
*/
#if !defined(ID_DATATYPEVALIDATOR_HPP)
#define ID_DATATYPEVALIDATOR_HPP
#include <validators/datatype/StringDatatypeValidator.hpp>
#include <validators/schema/SchemaSymbols.hpp>
class VALIDATORS_EXPORT IDDatatypeValidator : public StringDatatypeValidator
{
public:
// -----------------------------------------------------------------------
// Public ctor/dtor
// -----------------------------------------------------------------------
/** @name Constructor. */
//@{
IDDatatypeValidator();
IDDatatypeValidator(DatatypeValidator* const baseValidator
, RefHashTableOf<KVStringPair>* const facets
, RefVectorOf<XMLCh>* const enums
, const int finalSet);
virtual ~IDDatatypeValidator();
//@}
// -----------------------------------------------------------------------
// Validation methods
// -----------------------------------------------------------------------
/** @name Validation Function */
//@{
/**
* validate that a string matches the boolean datatype
* @param content A string containing the content to be validated
*
* @exception throws InvalidDatatypeException if the content is
* is not valid.
*/
void validate(const XMLCh* const content);
/**
* Returns an instance of the base datatype validator class
* Used by the DatatypeValidatorFactory.
*/
DatatypeValidator* newInstance(DatatypeValidator* const baseValidator
, RefHashTableOf<KVStringPair>* const facets
, RefVectorOf<XMLCh>* const enums
, const int finalSet);
//@}
void setTableOfId(RefHashTableOf<KVStringPair>* const);
private:
void addId(const XMLCh* const);
// -----------------------------------------------------------------------
// Private data members
//
// fTableOfId
// pointer to the (global) table containning all ID(s), do not own it.
//
// -----------------------------------------------------------------------
RefHashTableOf<KVStringPair> *fTableOfId;
};
// ---------------------------------------------------------------------------
// Constructors and Destructor
// ---------------------------------------------------------------------------
inline IDDatatypeValidator::IDDatatypeValidator()
:StringDatatypeValidator()
,fTableOfId(0)
{
DatatypeValidator::setType(DatatypeValidator::ID);
}
inline IDDatatypeValidator::~IDDatatypeValidator()
{
}
inline DatatypeValidator* IDDatatypeValidator::newInstance(
DatatypeValidator* const baseValidator
, RefHashTableOf<KVStringPair>* const facets
, RefVectorOf<XMLCh>* const enums
, const int finalSet)
{
return (DatatypeValidator*) new IDDatatypeValidator(baseValidator, facets, enums, finalSet);
}
inline void IDDatatypeValidator::setTableOfId(RefHashTableOf<KVStringPair> * const newTableOfId)
{
fTableOfId = newTableOfId;
}
/**
* End of file IDDatatypeValidator.hpp
*/
#endif
---------------------------------------------------------------------
To unsubscribe, e-mail: xerces-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: xerces-cvs-help@xml.apache.org