2 * Copyright 2001-2007 Internet2
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
20 * Representing XML QNames
23 #ifndef __xmltooling_qname_h__
24 #define __xmltooling_qname_h__
26 #include <xmltooling/unicode.h>
29 namespace xmltooling {
31 #if defined (_MSC_VER)
32 #pragma warning( push )
33 #pragma warning( disable : 4251 )
37 * A data structure for encapsulating XML QNames.
38 * The Xerces class is too limited to use at the moment.
40 class XMLTOOL_API QName
45 * @param uri namespace URI
46 * @param localPart local name
47 * @param prefix namespace prefix (without the colon)
49 QName(const XMLCh* uri=NULL, const XMLCh* localPart=NULL, const XMLCh* prefix=NULL);
54 * Deep copy constructor
56 QName(const QName& src);
59 * Deep assignment operator
61 QName& operator=(const QName& src);
66 * Indicates whether the QName has a prefix.
67 * @return true iff the prefix is non-empty
69 bool hasPrefix() const { return !m_prefix.empty(); }
72 * Indicates whether the QName has a non-empty namespace.
73 * @return true iff the namespace is non-empty
75 bool hasNamespaceURI() const { return !m_uri.empty(); }
78 * Indicates whether the QName has a non-empty local name.
79 * @return true iff the local name is non-empty
81 bool hasLocalPart() const { return !m_local.empty(); }
84 * Returns the namespace prefix
85 * @return Null-terminated Unicode string containing the prefix, without the colon
87 const XMLCh* getPrefix() const { return m_prefix.c_str(); }
90 * Returns the namespace URI
91 * @return Null-terminated Unicode string containing the URI
93 const XMLCh* getNamespaceURI() const { return m_uri.c_str(); }
96 * Returns the local part of the name
97 * @return Null-terminated Unicode string containing the local name
99 const XMLCh* getLocalPart() const { return m_local.c_str(); }
102 * Indicates whether the QName has a prefix.
103 * @return true iff the prefix is non-empty
105 bool hasPrefix() const { return m_prefix && *m_prefix; }
108 * Indicates whether the QName has a non-empty namespace.
109 * @return true iff the namespace is non-empty
111 bool hasNamespaceURI() const { return m_uri && *m_uri; }
114 * Indicates whether the QName has a non-empty local name.
115 * @return true iff the local name is non-empty
117 bool hasLocalPart() const { return m_local && *m_local; }
120 * Returns the namespace prefix
121 * @return Null-terminated Unicode string containing the prefix, without the colon
123 const XMLCh* getPrefix() const { return m_prefix; }
126 * Returns the namespace URI
127 * @return Null-terminated Unicode string containing the URI
129 const XMLCh* getNamespaceURI() const { return m_uri; }
132 * Returns the local part of the name
133 * @return Null-terminated Unicode string containing the local name
135 const XMLCh* getLocalPart() const { return m_local; }
139 * Sets the namespace prefix
140 * @param prefix Null-terminated Unicode string containing the prefix, without the colon
142 void setPrefix(const XMLCh* prefix);
145 * Sets the namespace URI
146 * @param uri Null-terminated Unicode string containing the URI
148 void setNamespaceURI(const XMLCh* uri);
151 * Sets the local part of the name
152 * @param localPart Null-terminated Unicode string containing the local name
154 void setLocalPart(const XMLCh* localPart);
157 * Gets a string representation of the QName for logging, etc.
158 * Format is prefix:localPart or {namespaceURI}localPart if no prefix.
160 * @return the string representation
162 std::string toString() const;
176 #if defined (_MSC_VER)
177 #pragma warning( pop )
181 * Returns true iff op1's namespace lexically compares less than op2's namespace,
182 * or if equal, iff op1's prefix lexically compares less than op2's prefix.
184 * Needed for use with sorted STL containers.
186 * @param op1 First qname to compare
187 * @param op2 Second qname to compare
189 extern XMLTOOL_API bool operator<(const QName& op1, const QName& op2);
192 * Returns true iff op1's components are equal to op2's components, excluding prefix.
193 * @param op1 First qname to compare
194 * @param op2 Second qname to compare
196 extern XMLTOOL_API bool operator==(const QName& op1, const QName& op2);
199 * Returns true iff op1's components are not equal to op2's components, excluding prefix.
200 * @param op1 First qname to compare
201 * @param op2 Second qname to compare
203 extern XMLTOOL_API bool operator!=(const QName& op1, const QName& op2);
207 #endif /* __xmltooling_qname_h__ */