1 /****************************************************************************
3 ** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
4 ** All rights reserved.
5 ** Contact: Nokia Corporation (qt-info@nokia.com)
7 ** This file is part of the QtXmlPatterns module of the Qt Toolkit.
9 ** $QT_BEGIN_LICENSE:LGPL$
10 ** GNU Lesser General Public License Usage
11 ** This file may be used under the terms of the GNU Lesser General Public
12 ** License version 2.1 as published by the Free Software Foundation and
13 ** appearing in the file LICENSE.LGPL included in the packaging of this
14 ** file. Please review the following information to ensure the GNU Lesser
15 ** General Public License version 2.1 requirements will be met:
16 ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
18 ** In addition, as a special exception, Nokia gives you certain additional
19 ** rights. These rights are described in the Nokia Qt LGPL Exception
20 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
22 ** GNU General Public License Usage
23 ** Alternatively, this file may be used under the terms of the GNU General
24 ** Public License version 3.0 as published by the Free Software Foundation
25 ** and appearing in the file LICENSE.GPL included in the packaging of this
26 ** file. Please review the following information to ensure the GNU General
27 ** Public License version 3.0 requirements will be met:
28 ** http://www.gnu.org/copyleft/gpl.html.
31 ** Alternatively, this file may be used in accordance with the terms and
32 ** conditions contained in a signed written agreement between you and Nokia.
40 ****************************************************************************/
42 #include "qxmlschema.h"
43 #include "qxmlschema_p.h"
45 #include <QtCore/QIODevice>
46 #include <QtCore/QUrl>
53 \brief The QXmlSchema class provides loading and validation of a W3C XML Schema.
59 The QXmlSchema class loads, compiles and validates W3C XML Schema files
60 that can be used further for validation of XML instance documents via
61 \l{QXmlSchemaValidator}.
63 The following example shows how to load a XML Schema file from the network
64 and test whether it is a valid schema document:
66 \snippet doc/src/snippets/qxmlschema/main.cpp 0
68 \section1 XML Schema Version
70 This class is used to represent schemas that conform to the \l{XML Schema} 1.0
73 \sa QXmlSchemaValidator, {xmlpatterns/schema}{XML Schema Validation Example}
77 Constructs an invalid, empty schema that cannot be used until
80 QXmlSchema::QXmlSchema()
81 : d(new QXmlSchemaPrivate(QXmlNamePool()))
86 Constructs a QXmlSchema that is a copy of \a other. The new
87 instance will share resources with the existing schema
88 to the extent possible.
90 QXmlSchema::QXmlSchema(const QXmlSchema &other)
96 Destroys this QXmlSchema.
98 QXmlSchema::~QXmlSchema()
103 Sets this QXmlSchema to a schema loaded from the \a source
106 If the schema \l {isValid()} {is invalid}, \c{false} is returned
107 and the behavior is undefined.
111 \snippet doc/src/snippets/qxmlschema/main.cpp 0
115 bool QXmlSchema::load(const QUrl &source)
117 d->load(source, QString());
122 Sets this QXmlSchema to a schema read from the \a source
123 device. The device must have been opened with at least
126 \a documentUri represents the schema obtained from the \a source
127 device. It is the base URI of the schema, that is used
128 internally to resolve relative URIs that appear in the schema, and
129 for message reporting.
131 If \a source is \c null or not readable, or if \a documentUri is not
132 a valid URI, behavior is undefined.
134 If the schema \l {isValid()} {is invalid}, \c{false} is returned
135 and the behavior is undefined.
139 \snippet doc/src/snippets/qxmlschema/main.cpp 1
143 bool QXmlSchema::load(QIODevice *source, const QUrl &documentUri)
145 d->load(source, documentUri, QString());
150 Sets this QXmlSchema to a schema read from the \a data
152 \a documentUri represents the schema obtained from the \a data.
153 It is the base URI of the schema, that is used internally to
154 resolve relative URIs that appear in the schema, and
155 for message reporting.
157 If \a documentUri is not a valid URI, behavior is undefined.
160 If the schema \l {isValid()} {is invalid}, \c{false} is returned
161 and the behavior is undefined.
165 \snippet doc/src/snippets/qxmlschema/main.cpp 2
169 bool QXmlSchema::load(const QByteArray &data, const QUrl &documentUri)
171 d->load(data, documentUri, QString());
176 Returns true if this schema is valid. Examples of invalid schemas
177 are ones that contain syntax errors or that do not conform the
178 W3C XML Schema specification.
180 bool QXmlSchema::isValid() const
186 Returns the name pool used by this QXmlSchema for constructing \l
187 {QXmlName} {names}. There is no setter for the name pool, because
188 mixing name pools causes errors due to name confusion.
190 QXmlNamePool QXmlSchema::namePool() const
192 return d->namePool();
196 Returns the document URI of the schema or an empty URI if no
199 QUrl QXmlSchema::documentUri() const
201 return d->documentUri();
205 Changes the \l {QAbstractMessageHandler}{message handler} for this
206 QXmlSchema to \a handler. The schema sends all compile and
207 validation messages to this message handler. QXmlSchema does not take
208 ownership of \a handler.
210 Normally, the default message handler is sufficient. It writes
211 compile and validation messages to \e stderr. The default message
212 handler includes color codes if \e stderr can render colors.
214 When QXmlSchema calls QAbstractMessageHandler::message(),
215 the arguments are as follows:
219 \o message() argument
223 \o Only QtWarningMsg and QtFatalMsg are used. The former
224 identifies a warning, while the latter identifies an error.
226 \o const QString & description
227 \o An XHTML document which is the actual message. It is translated
228 into the current language.
230 \o const QUrl &identifier
231 \o Identifies the error with a URI, where the fragment is
232 the error code, and the rest of the URI is the error namespace.
234 \o const QSourceLocation & sourceLocation
235 \o Identifies where the error occurred.
239 void QXmlSchema::setMessageHandler(QAbstractMessageHandler *handler)
241 d->setMessageHandler(handler);
245 Returns the message handler that handles compile and validation
246 messages for this QXmlSchema.
248 QAbstractMessageHandler *QXmlSchema::messageHandler() const
250 return d->messageHandler();
254 Sets the URI resolver to \a resolver. QXmlSchema does not take
255 ownership of \a resolver.
259 void QXmlSchema::setUriResolver(const QAbstractUriResolver *resolver)
261 d->setUriResolver(resolver);
265 Returns the schema's URI resolver. If no URI resolver has been set,
266 QtXmlPatterns will use the URIs in schemas as they are.
268 The URI resolver provides a level of abstraction, or \e{polymorphic
269 URIs}. A resolver can rewrite \e{logical} URIs to physical ones, or
270 it can translate obsolete or invalid URIs to valid ones.
272 When QtXmlPatterns calls QAbstractUriResolver::resolve() the
273 absolute URI is the URI mandated by the schema specification, and the
274 relative URI is the URI specified by the user.
278 const QAbstractUriResolver *QXmlSchema::uriResolver() const
280 return d->uriResolver();
284 Sets the network manager to \a manager.
285 QXmlSchema does not take ownership of \a manager.
287 \sa networkAccessManager()
289 void QXmlSchema::setNetworkAccessManager(QNetworkAccessManager *manager)
291 d->setNetworkAccessManager(manager);
295 Returns the network manager, or 0 if it has not been set.
297 \sa setNetworkAccessManager()
299 QNetworkAccessManager *QXmlSchema::networkAccessManager() const
301 return d->networkAccessManager();