1/****************************************************************************
2**
3** Copyright (C) 2016 The Qt Company Ltd.
4** Contact: https://www.qt.io/licensing/
5**
6** This file is part of the test suite of the Qt Toolkit.
7**
8** $QT_BEGIN_LICENSE:GPL-EXCEPT$
9** Commercial License Usage
10** Licensees holding valid commercial Qt licenses may use this file in
11** accordance with the commercial license agreement provided with the
12** Software or, alternatively, in accordance with the terms contained in
13** a written agreement between you and The Qt Company. For licensing terms
14** and conditions see https://www.qt.io/terms-conditions. For further
15** information use the contact form at https://www.qt.io/contact-us.
16**
17** GNU General Public License Usage
18** Alternatively, this file may be used under the terms of the GNU
19** General Public License version 3 as published by the Free Software
20** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
21** included in the packaging of this file. Please review the following
22** information to ensure the GNU General Public License requirements will
23** be met: https://www.gnu.org/licenses/gpl-3.0.html.
24**
25** $QT_END_LICENSE$
26**
27****************************************************************************/
28
29#ifndef PatternistSDK_ExternalSourceLoader_H
30#define PatternistSDK_ExternalSourceLoader_H
31
32#include <QHash>
33#include <QUrl>
34#include <QXmlQuery>
35
36#include <private/qdynamiccontext_p.h>
37#include <private/qresourceloader_p.h>
38#include <private/qexternalvariableloader_p.h>
39
40QT_BEGIN_NAMESPACE
41
42namespace QPatternistSDK
43{
44 /**
45 * @short Handles external variables in XQTS queries, such as <tt>$input-context</tt>,
46 * by loading appropriate XML source files.
47 *
48 * @ingroup PatternistSDK
49 * @author Frans Englich <frans.englich@nokia.com>
50 */
51 class ExternalSourceLoader : public QPatternist::ExternalVariableLoader
52 {
53 public:
54 enum TargetOfURI
55 {
56 /**
57 * Identifies @c input-file.
58 */
59 Document,
60
61 /**
62 * Identifies @c input-URI.
63 */
64 URI,
65
66 /**
67 * Identifies @c input-query.
68 */
69 Query
70 };
71
72 /**
73 * The first is the complete, absolute, final URI to the file to be loaded,
74 * and the second is the type of source found at that URI.
75 */
76 typedef QPair<QUrl, TargetOfURI> VariableValue;
77
78 /**
79 * In the XQTSCatalog.xml each source file in each test is referred to
80 * by a key, which can be fully looked up in the @c sources element. This QHash
81 * maps the keys to absolute URIs pointing to the source file.
82 */
83 typedef QHash<QString, QUrl> SourceMap;
84
85 /**
86 * The first value is the variable name, and the second is the URI identifying
87 * the XML source file that's supposed to be loaded as a document.
88 *
89 * This is one for every test case, except for @c rdb-queries-results-q5,
90 * @c rdb-queries-results-q17 and @c rdb-queries-results-q18(at least in XQTS 1.0).
91 */
92 typedef QHash<QString, VariableValue> VariableMap;
93
94 ExternalSourceLoader(const VariableMap &varMap,
95 const QPatternist::ResourceLoader::Ptr &resourceLoader);
96
97 virtual QPatternist::SequenceType::Ptr
98 announceExternalVariable(const QXmlName name,
99 const QPatternist::SequenceType::Ptr &declaredType);
100
101 virtual QPatternist::Item
102 evaluateSingleton(const QXmlName name,
103 const QPatternist::DynamicContext::Ptr &context);
104
105 VariableMap variableMap() const
106 {
107 return m_variableMap;
108 }
109
110 private:
111 const VariableMap m_variableMap;
112 const QPatternist::ResourceLoader::Ptr m_resourceLoader;
113 QXmlQuery m_query;
114 };
115}
116
117QT_END_NAMESPACE
118
119#endif
120// vim: et:ts=4:sw=4:sts=4
121

source code of qtxmlpatterns/tests/auto/xmlpatternssdk/ExternalSourceLoader.h