util/src/xmlpatterns/api/qxmlschema.cpp
changeset 7 f7bc934e204c
equal deleted inserted replaced
3:41300fa6a67c 7:f7bc934e204c
       
     1 /****************************************************************************
       
     2 **
       
     3 ** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies).
       
     4 ** All rights reserved.
       
     5 ** Contact: Nokia Corporation (qt-info@nokia.com)
       
     6 **
       
     7 ** This file is part of the QtXmlPatterns module of the Qt Toolkit.
       
     8 **
       
     9 ** $QT_BEGIN_LICENSE:LGPL$
       
    10 ** No Commercial Usage
       
    11 ** This file contains pre-release code and may not be distributed.
       
    12 ** You may use this file in accordance with the terms and conditions
       
    13 ** contained in the Technology Preview License Agreement accompanying
       
    14 ** this package.
       
    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 ** If you have questions regarding the use of this file, please contact
       
    29 ** Nokia at qt-info@nokia.com.
       
    30 **
       
    31 **
       
    32 **
       
    33 **
       
    34 **
       
    35 **
       
    36 **
       
    37 **
       
    38 ** $QT_END_LICENSE$
       
    39 **
       
    40 ****************************************************************************/
       
    41 
       
    42 #include "qxmlschema.h"
       
    43 #include "qxmlschema_p.h"
       
    44 
       
    45 #include <QtCore/QIODevice>
       
    46 #include <QtCore/QUrl>
       
    47 
       
    48 QT_BEGIN_NAMESPACE
       
    49 
       
    50 /*!
       
    51   \class QXmlSchema
       
    52 
       
    53   \brief The QXmlSchema class provides loading and validation of a W3C XML Schema.
       
    54 
       
    55   \reentrant
       
    56   \since 4.6
       
    57   \ingroup xml-tools
       
    58 
       
    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}.
       
    62 
       
    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:
       
    65 
       
    66   \snippet doc/src/snippets/qxmlschema/main.cpp 0
       
    67 
       
    68   \section1 XML Schema Version
       
    69 
       
    70   This class is used to represent schemas that conform to the \l{XML Schema} 1.0
       
    71   specification.
       
    72 
       
    73   \sa QXmlSchemaValidator, {xmlpatterns/schema}{XML Schema Validation Example}
       
    74 */
       
    75 
       
    76 /*!
       
    77   Constructs an invalid, empty schema that cannot be used until
       
    78   load() is called.
       
    79  */
       
    80 QXmlSchema::QXmlSchema()
       
    81     : d(new QXmlSchemaPrivate(QXmlNamePool()))
       
    82 {
       
    83 }
       
    84 
       
    85 /*!
       
    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.
       
    89  */
       
    90 QXmlSchema::QXmlSchema(const QXmlSchema &other)
       
    91     : d(other.d)
       
    92 {
       
    93 }
       
    94 
       
    95 /*!
       
    96   Destroys this QXmlSchema.
       
    97  */
       
    98 QXmlSchema::~QXmlSchema()
       
    99 {
       
   100 }
       
   101 
       
   102 /*!
       
   103   Sets this QXmlSchema to a schema loaded from the \a source
       
   104   URI.
       
   105 
       
   106   If the schema \l {isValid()} {is invalid}, \c{false} is returned
       
   107   and the behavior is undefined.
       
   108 
       
   109   Example:
       
   110 
       
   111   \snippet doc/src/snippets/qxmlschema/main.cpp 0
       
   112 
       
   113   \sa isValid()
       
   114  */
       
   115 bool QXmlSchema::load(const QUrl &source)
       
   116 {
       
   117     d->load(source, QString());
       
   118     return d->isValid();
       
   119 }
       
   120 
       
   121 /*!
       
   122   Sets this QXmlSchema to a schema read from the \a source
       
   123   device. The device must have been opened with at least
       
   124   QIODevice::ReadOnly.
       
   125 
       
   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.
       
   130 
       
   131   If \a source is \c null or not readable, or if \a documentUri is not
       
   132   a valid URI, behavior is undefined.
       
   133 
       
   134   If the schema \l {isValid()} {is invalid}, \c{false} is returned
       
   135   and the behavior is undefined.
       
   136 
       
   137   Example:
       
   138 
       
   139   \snippet doc/src/snippets/qxmlschema/main.cpp 1
       
   140 
       
   141   \sa isValid()
       
   142  */
       
   143 bool QXmlSchema::load(QIODevice *source, const QUrl &documentUri)
       
   144 {
       
   145     d->load(source, documentUri, QString());
       
   146     return d->isValid();
       
   147 }
       
   148 
       
   149 /*!
       
   150   Sets this QXmlSchema to a schema read from the \a data
       
   151 
       
   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.
       
   156 
       
   157   If \a documentUri is not a valid URI, behavior is undefined.
       
   158   \sa isValid()
       
   159 
       
   160   If the schema \l {isValid()} {is invalid}, \c{false} is returned
       
   161   and the behavior is undefined.
       
   162 
       
   163   Example:
       
   164 
       
   165   \snippet doc/src/snippets/qxmlschema/main.cpp 2
       
   166 
       
   167   \sa isValid()
       
   168  */
       
   169 bool QXmlSchema::load(const QByteArray &data, const QUrl &documentUri)
       
   170 {
       
   171     d->load(data, documentUri, QString());
       
   172     return d->isValid();
       
   173 }
       
   174 
       
   175 /*!
       
   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.
       
   179  */
       
   180 bool QXmlSchema::isValid() const
       
   181 {
       
   182     return d->isValid();
       
   183 }
       
   184 
       
   185 /*!
       
   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.
       
   189  */
       
   190 QXmlNamePool QXmlSchema::namePool() const
       
   191 {
       
   192     return d->namePool();
       
   193 }
       
   194 
       
   195 /*!
       
   196   Returns the document URI of the schema or an empty URI if no
       
   197   schema has been set.
       
   198  */
       
   199 QUrl QXmlSchema::documentUri() const
       
   200 {
       
   201     return d->documentUri();
       
   202 }
       
   203 
       
   204 /*!
       
   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.
       
   209 
       
   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.
       
   213 
       
   214   When QXmlSchema calls QAbstractMessageHandler::message(),
       
   215   the arguments are as follows:
       
   216 
       
   217   \table
       
   218   \header
       
   219     \o message() argument
       
   220     \o Semantics
       
   221   \row
       
   222     \o QtMsgType type
       
   223     \o Only QtWarningMsg and QtFatalMsg are used. The former
       
   224        identifies a warning, while the latter identifies an error.
       
   225   \row
       
   226     \o const QString & description
       
   227     \o An XHTML document which is the actual message. It is translated
       
   228        into the current language.
       
   229   \row
       
   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.
       
   233   \row
       
   234     \o const QSourceLocation & sourceLocation
       
   235     \o Identifies where the error occurred.
       
   236   \endtable
       
   237 
       
   238  */
       
   239 void QXmlSchema::setMessageHandler(QAbstractMessageHandler *handler)
       
   240 {
       
   241     d->setMessageHandler(handler);
       
   242 }
       
   243 
       
   244 /*!
       
   245     Returns the message handler that handles compile and validation
       
   246     messages for this QXmlSchema.
       
   247  */
       
   248 QAbstractMessageHandler *QXmlSchema::messageHandler() const
       
   249 {
       
   250     return d->messageHandler();
       
   251 }
       
   252 
       
   253 /*!
       
   254   Sets the URI resolver to \a resolver. QXmlSchema does not take
       
   255   ownership of \a resolver.
       
   256 
       
   257   \sa uriResolver()
       
   258  */
       
   259 void QXmlSchema::setUriResolver(const QAbstractUriResolver *resolver)
       
   260 {
       
   261     d->setUriResolver(resolver);
       
   262 }
       
   263 
       
   264 /*!
       
   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.
       
   267 
       
   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.
       
   271 
       
   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.
       
   275 
       
   276   \sa setUriResolver()
       
   277  */
       
   278 const QAbstractUriResolver *QXmlSchema::uriResolver() const
       
   279 {
       
   280     return d->uriResolver();
       
   281 }
       
   282 
       
   283 /*!
       
   284   Sets the network manager to \a manager.
       
   285   QXmlSchema does not take ownership of \a manager.
       
   286 
       
   287   \sa networkAccessManager()
       
   288  */
       
   289 void QXmlSchema::setNetworkAccessManager(QNetworkAccessManager *manager)
       
   290 {
       
   291     d->setNetworkAccessManager(manager);
       
   292 }
       
   293 
       
   294 /*!
       
   295   Returns the network manager, or 0 if it has not been set.
       
   296 
       
   297   \sa setNetworkAccessManager()
       
   298  */
       
   299 QNetworkAccessManager *QXmlSchema::networkAccessManager() const
       
   300 {
       
   301     return d->networkAccessManager();
       
   302 }
       
   303 
       
   304 QT_END_NAMESPACE