1 /**************************************************************************** 2 ** 3 ** Copyright (C) 2015 The Qt Company Ltd. 4 ** Contact: http://www.qt.io/licensing/ 5 ** 6 ** This file is part of the QtXmlPatterns module of the Qt Toolkit. 7 ** 8 ** $QT_BEGIN_LICENSE:LGPL$ 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 http://www.qt.io/terms-conditions. For further 15 ** information use the contact form at http://www.qt.io/contact-us. 16 ** 17 ** GNU Lesser General Public License Usage 18 ** Alternatively, this file may be used under the terms of the GNU Lesser 19 ** General Public License version 2.1 or version 3 as published by the Free 20 ** Software Foundation and appearing in the file LICENSE.LGPLv21 and 21 ** LICENSE.LGPLv3 included in the packaging of this file. Please review the 22 ** following information to ensure the GNU Lesser General Public License 23 ** requirements will be met: https://www.gnu.org/licenses/lgpl.html and 24 ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. 25 ** 26 ** As a special exception, The Qt Company gives you certain additional 27 ** rights. These rights are described in The Qt Company LGPL Exception 28 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. 29 ** 30 ** GNU General Public License Usage 31 ** Alternatively, this file may be used under the terms of the GNU 32 ** General Public License version 3.0 as published by the Free Software 33 ** Foundation and appearing in the file LICENSE.GPL included in the 34 ** packaging of this file. Please review the following information to 35 ** ensure the GNU General Public License version 3.0 requirements will be 36 ** met: http://www.gnu.org/copyleft/gpl.html. 37 ** 38 ** $QT_END_LICENSE$ 39 ** 40 ****************************************************************************/ 41 42 // 43 // W A R N I N G 44 // ------------- 45 // 46 // This file is not part of the Qt API. It exists purely as an 47 // implementation detail. This header file may change from version to 48 // version without notice, or even be removed. 49 // 50 // We mean it. 51 52 #ifndef Patternist_XsdSchemaContext_H 53 #define Patternist_XsdSchemaContext_H 54 55 #include "qnamedschemacomponent_p.h" 56 #include "qreportcontext_p.h" 57 #include "qschematypefactory_p.h" 58 #include "qxsdschematoken_p.h" 59 #include "qxsdschema_p.h" 60 #include "qxsdschemachecker_p.h" 61 #include "qxsdschemaresolver_p.h" 62 63 #include <QtCore/QUrl> 64 #include <QtNetwork/QNetworkAccessManager> 65 #include <QtXmlPatterns/QAbstractMessageHandler> 66 67 QT_BEGIN_HEADER 68 69 QT_BEGIN_NAMESPACE 70 71 namespace QPatternist 72 { 73 /** 74 * @short A context for schema parsing and validation. 75 * 76 * This class provides the infrastructure for error reporting and 77 * network access. Additionally it stores objects that are used by 78 * both, the parser and the validator. 79 * 80 * @ingroup Patternist_schema 81 * @author Tobias Koenig <tobias.koenig@nokia.com> 82 */ 83 class XsdSchemaContext : public ReportContext 84 { 85 public: 86 /** 87 * A smart pointer wrapping XsdSchemaContext instances. 88 */ 89 typedef QExplicitlySharedDataPointer<XsdSchemaContext> Ptr; 90 91 /** 92 * Creates a new schema context object. 93 * 94 * @param namePool The name pool all names belong to. 95 */ 96 XsdSchemaContext(const NamePool::Ptr &namePool); 97 98 /** 99 * Returns the name pool of the schema context. 100 */ 101 virtual NamePool::Ptr namePool() const; 102 103 /** 104 * Sets the base URI for the main schema. 105 * 106 * The main schema is the one that includes resp. imports 107 * all the other schema files. 108 */ 109 virtual void setBaseURI(const QUrl &uri); 110 111 /** 112 * Returns the base URI of the main schema. 113 */ 114 virtual QUrl baseURI() const; 115 116 /** 117 * Sets the network access manager that should be used 118 * to access referenced schema definitions. 119 */ 120 void setNetworkAccessManager(QNetworkAccessManager *accessManager); 121 122 /** 123 * Returns the network access manager that is used to 124 * access referenced schema definitions. 125 */ 126 virtual QNetworkAccessManager* networkAccessManager() const; 127 128 /** 129 * Sets the message @p handler used by the context for error reporting. 130 */ 131 void setMessageHandler(QAbstractMessageHandler *handler); 132 133 /** 134 * Returns the message handler used by the context for 135 * error reporting. 136 */ 137 virtual QAbstractMessageHandler* messageHandler() const; 138 139 /** 140 * Always returns an empty source location. 141 */ 142 virtual QSourceLocation locationFor(const SourceLocationReflection *const reflection) const; 143 144 /** 145 * Sets the uri @p resolver that is used for resolving URIs in the 146 * schema parser. 147 */ 148 void setUriResolver(const QAbstractUriResolver *resolver); 149 150 /** 151 * Returns the uri resolver that is used for resolving URIs in the 152 * schema parser. 153 */ 154 virtual const QAbstractUriResolver* uriResolver() const; 155 156 /** 157 * Returns the list of facets for the given simple @p type. 158 */ 159 XsdFacet::Hash facetsForType(const AnySimpleType::Ptr &type) const; 160 161 /** 162 * Returns a schema type factory that contains some predefined schema types. 163 */ 164 SchemaTypeFactory::Ptr schemaTypeFactory() const; 165 166 /** 167 * The following variables should not be accessed directly. 168 */ 169 mutable SchemaTypeFactory::Ptr m_schemaTypeFactory; 170 mutable QHash<SchemaType::Ptr, XsdFacet::Hash> m_builtinTypesFacetList; 171 172 private: 173 QHash<SchemaType::Ptr, XsdFacet::Hash> setupBuiltinTypesFacetList() const; 174 175 NamePool::Ptr m_namePool; 176 QNetworkAccessManager* m_networkAccessManager; 177 QUrl m_baseURI; 178 const QAbstractUriResolver* m_uriResolver; 179 QAbstractMessageHandler* m_messageHandler; 180 }; 181 } 182 183 QT_END_NAMESPACE 184 185 QT_END_HEADER 186 187 #endif 188