diff --git a/src/util/XMLString.cpp b/src/util/XMLString.cpp index 8d124c3da6e4262452582ddfdc01beadd02805e5..430fec23eb392c096665a9c46a95ab7326b76bef 100644 --- a/src/util/XMLString.cpp +++ b/src/util/XMLString.cpp @@ -699,6 +699,46 @@ bool XMLString::isValidEncName(const XMLCh* const name) return true; } +/** + * isValidQName + * + * [6] QName ::= (Prefix ':')? LocalPart + * [7] Prefix ::= NCName + * [8] LocalPart ::= NCName + * + */ +bool XMLString::isValidQName(const XMLCh* const name) +{ + if (!name) + return false; + + int strLen = XMLString::stringLen(name); + if (strLen == 0) + return false; + + int colonPos = XMLString::indexOf(name, chColon); + if ((colonPos == 0) || // ":abcd" + (colonPos == strLen-1)) // "abcd:" + return false; + + // + // prefix + // + if (colonPos != -1) + { + XMLCh *prefix = new XMLCh[colonPos+1]; + XMLString::subString(prefix, name, 0, colonPos-1); + ArrayJanitor<XMLCh> janName(prefix); + if (XMLString::isValidNCName(prefix)==false) + return false; + } + + // + // LocalPart + // + return XMLString::isValidNCName(name+colonPos+1); +} + bool XMLString::isAlpha(XMLCh const theChar) { if ((( theChar >= chLatin_a ) && ( theChar <= chLatin_z )) || diff --git a/src/util/XMLString.hpp b/src/util/XMLString.hpp index 688486efc22dad127371cc994481b32d09b6aee1..114333eef953f00d98031436d4ae864c034a90c6 100644 --- a/src/util/XMLString.hpp +++ b/src/util/XMLString.hpp @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.25 2001/07/06 20:27:57 peiyongz + * isValidaQName() + * * Revision 1.24 2001/07/04 14:38:20 peiyongz * IDDatatypeValidator: created * DatatypeValidatorFactory: IDDTV enabled @@ -1047,6 +1050,13 @@ public: */ static bool isValidEncName(const XMLCh* const name); + /** + * Checks whether an name is a valid QName. + * @param name The string to check its QName validity + * @return Returns true if name is QName valid, otherwise false + */ + static bool isValidQName(const XMLCh* const name); + /** * Checks whether a character is within [a-zA-Z]. * @param theChar: the character to check