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.
18 * @file xmltooling/Namespace.h
20 * Representing XML namespace attributes
23 #if !defined(__xmltooling_namespace_h__)
24 #define __xmltooling_namespace_h__
26 #include <xmltooling/unicode.h>
28 namespace xmltooling {
30 #if defined (_MSC_VER)
31 #pragma warning( push )
32 #pragma warning( disable : 4251 )
36 * A data structure for encapsulating XML Namespace attributes
38 class XMLTOOL_API Namespace
43 * @param uri namespace URI
44 * @param prefix namespace prefix (without the colon)
45 * @param alwaysDeclare true iff the namespace should always be declared regardless of in-scope declarations
47 Namespace(const XMLCh* uri=NULL, const XMLCh* prefix=NULL, bool alwaysDeclare=false);
52 * Deep copy constructor
54 Namespace(const Namespace& src);
57 * Deep assignment operator
59 Namespace& operator=(const Namespace& src);
64 * Returns the namespace prefix
65 * @return Null-terminated Unicode string containing the prefix, without the colon
67 const XMLCh* getNamespacePrefix() const { return m_prefix.c_str(); }
70 * Returns the namespace URI
71 * @return Null-terminated Unicode string containing the URI
73 const XMLCh* getNamespaceURI() const { return m_uri.c_str(); }
76 * Returns the namespace prefix
77 * @return Null-terminated Unicode string containing the prefix, without the colon
79 const XMLCh* getNamespacePrefix() const { return m_prefix; }
82 * Returns the namespace URI
83 * @return Null-terminated Unicode string containing the URI
85 const XMLCh* getNamespaceURI() const { return m_uri; }
89 * Returns true iff the namespace should always be declared regardless of in-scope declarations
90 * @return the alwaysDeclared setting
92 const bool alwaysDeclare() const { return m_pinned; }
95 * Sets the namespace prefix
96 * @param prefix Null-terminated Unicode string containing the prefix, without the colon
98 void setNamespacePrefix(const XMLCh* prefix);
101 * Sets the namespace URI
102 * @param uri Null-terminated Unicode string containing the URI
104 void setNamespaceURI(const XMLCh* uri);
107 * Sets the alwaysDeclared property
108 * @param alwaysDeclare true iff the namespace should always be declared regardless of in-scope declarations
110 void setAlwaysDeclare(bool alwaysDeclare) { m_pinned = alwaysDeclare; }
123 #if defined (_MSC_VER)
124 #pragma warning( pop )
128 * Returns true iff op1's namespace lexically compares less than op2's namespace,
129 * or if equal, iff op1's prefix lexically compares less than op2's prefix.
131 * Needed for use with sorted STL containers.
133 * @param op1 First namspace to compare
134 * @param op2 Second namespace to compare
136 extern XMLTOOL_API bool operator<(const Namespace& op1, const Namespace& op2);
138 #ifndef HAVE_GOOD_STL
140 * Returns true iff op1's namespace and prefix are equal to op2's namespace and prefix.
141 * @param op1 First namspace to compare
142 * @param op2 Second namespace to compare
144 extern XMLTOOL_API bool operator==(const Namespace& op1, const Namespace& op2);
149 #endif /* __xmltooling_namespace_h__ */