source: trunk/src/xmlpatterns/api/qxmlname.cpp@ 751

Last change on this file since 751 was 651, checked in by Dmitry A. Kuminov, 15 years ago

trunk: Merged in qt 4.6.2 sources.

File size: 16.3 KB
Line 
1/****************************************************************************
2**
3** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
4** All rights reserved.
5** Contact: Nokia Corporation ([email protected])
6**
7** This file is part of the QtXmlPatterns module of the Qt Toolkit.
8**
9** $QT_BEGIN_LICENSE:LGPL$
10** Commercial Usage
11** Licensees holding valid Qt Commercial licenses may use this file in
12** accordance with the Qt Commercial License Agreement provided with the
13** Software or, alternatively, in accordance with the terms contained in
14** a written agreement between you and Nokia.
15**
16** GNU Lesser General Public License Usage
17** Alternatively, this file may be used under the terms of the GNU Lesser
18** General Public License version 2.1 as published by the Free Software
19** Foundation and appearing in the file LICENSE.LGPL included in the
20** packaging of this file. Please review the following information to
21** ensure the GNU Lesser General Public License version 2.1 requirements
22** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
23**
24** In addition, as a special exception, Nokia gives you certain additional
25** rights. These rights are described in the Nokia Qt LGPL Exception
26** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
27**
28** GNU General Public License Usage
29** Alternatively, this file may be used under the terms of the GNU
30** General Public License version 3.0 as published by the Free Software
31** Foundation and appearing in the file LICENSE.GPL included in the
32** packaging of this file. Please review the following information to
33** ensure the GNU General Public License version 3.0 requirements will be
34** met: http://www.gnu.org/copyleft/gpl.html.
35**
36** If you have questions regarding the use of this file, please contact
37** Nokia at [email protected].
38** $QT_END_LICENSE$
39**
40****************************************************************************/
41
42/*
43 * QXmlName is conceptually identical to QPatternist::QName. The
44 * difference is that the latter is elegant, powerful and fast.
45 *
46 * However, it is too powerful and too open and not at all designed
47 * for being public. QXmlName, in contrast, is only a public marker,
48 * that for instance uses a qint64 instead of qint32, such that we in
49 * the future can use that, if needed.
50 */
51
52#include "qnamepool_p.h"
53#include "qxmlname.h"
54#include "qxmlnamepool.h"
55#include "qxpathhelper_p.h"
56#include "private/qxmlutils_p.h"
57
58QT_BEGIN_NAMESPACE
59
60/*!
61 \class QXmlName
62 \brief The QXmlName class represents the name of an XML node, in an efficient, namespace-aware way.
63 \reentrant
64 \since 4.4
65 \ingroup xml-tools
66
67 QXmlName represents the name of an XML node in a way that
68 is both efficient and safe for comparing names. Normally,
69 an XML node represents an XML element or attribute, but
70 QXmlName can also represent the names of other kinds of
71 nodes, e.g., QAbstractXmlReceiver::processingInstruction()
72 and QAbstractXmlReceiver::namespaceBinding().
73
74 The name of an XML node has three components: The \e {namespace
75 URI}, the \e {local name}, and the \e {prefix}. To see what these
76 refer to in XML, consider the following snippet.
77
78 \quotefile doc/src/snippets/patternist/mobeyDick.xml
79
80 For the element named \e book, localName() returns \e book,
81 namespaceUri() returns \e http://example.com/MyDefault,
82 and prefix() returns an empty string. For the element named
83 \e title, localName() returns \e title, namespaceUri() returns
84 \e http://purl.org/dc/elements/1.1, and prefix() returns \e dc.
85
86 To ensure that operations with QXmlName are efficient, e.g.,
87 copying names and comparing them, each instance of QXmlName is
88 associated with a \l {QXmlNamePool} {name pool}, which must be
89 specified at QXmlName construction time. The three components
90 of the QXmlName, i.e., the namespace URI, the local name, and
91 the prefix, are stored in the name pool mapped to identifiers
92 so they can be shared. For this reason, the only way to create
93 a valid instance of QXmlName is to use the class constructor,
94 where the \l {QXmlNamePool} {name pool}, local name, namespace
95 URI, and prefix must all be specified.
96
97 Note that QXmlName's default constructor constructs a null
98 instance. It is typically used for allocating unused entries
99 in collections of QXmlName.
100
101 A side effect of associating each instance of QXmlName with
102 a \l {QXmlNamePool} {name pool} is that each instance of
103 QXmlName is tied to the QXmlNamePool with which it was created.
104 However, the QXmlName class does not keep track of the name pool,
105 so all the accessor functions, e.g., namespaceUri(), prefix(),
106 localName(), and toClarkName() require that the correct name
107 pool be passed to them. Failure to provide the correct name
108 pool to these accessor functions results in undefined behavior.
109
110 Note that a \l {QXmlNamePool} {name pool} is \e not an XML
111 namespace. One \l {QXmlNamePool} {name pool} can represent
112 instances of QXmlName from different XML namespaces, and the