/****************************************************************************
**
** Copyright (C) 2017 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU Free Documentation License Usage
** Alternatively, this file may be used under the terms of the GNU Free
** Documentation License version 1.3 as published by the Free Software
** Foundation and appearing in the file included in the packaging of
** this file. Please review the following information to ensure
** the GNU Free Documentation License version 1.3 requirements
** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
** $QT_END_LICENSE$
**
****************************************************************************/

/*!
  \example schema
  \title XML Schema Validation Example
  \ingroup xmlpattern_examples
  \brief Using Qt XML Patterns to validate XML with a W3C XML Schema.

  The XML Schema Validation example shows how to use Qt XML Patterns to
  validate XML with a W3C XML Schema.

  \tableofcontents

  \section1 Introduction

  The example application shows different XML schema definitions and
  for every definition two XML instance documents, one that is valid
  according to the schema and one that is not.
  The user can select the valid or invalid instance document, change
  it and validate it again.

  \section2 The User Interface

  The UI for this example was created using \l{Qt Designer Manual} {Qt
  Designer}:

  \image schema-example.png

  The UI consists of three parts, at the top the XML schema \l{QComboBox} {selection}
  and the schema \l{QTextBrowser} {viewer}, below the XML instance \l{QComboBox} {selection}
  and the instance \l{QTextEdit} {editor} and at the bottom the validation status \l{QLabel} {label}
  next to the validation \l{QPushButton} {button}.

  \section2 Validating XML Instance Documents

  You can select one of the three predefined XML schemas and for each schema
  an valid or invalid instance document. A click on the 'Validate' button will
  validate the content of the XML instance editor against the schema from the
  XML schema viewer. As you can modify the content of the instance editor, different
  instances can be tested and validation error messages analysed.

  \section1 Code Walk-Through

  The example's main() function creates the standard instance of
  QApplication. Then it creates an instance of the mainwindow class, shows it,
  and starts the Qt event loop:

  \snippet schema/main.cpp 0

  \section2 The UI Class: MainWindow

  The example's UI is a conventional Qt GUI application inheriting
  QMainWindow and the class generated by \l{Qt Designer Manual} {Qt
  Designer}:

  \snippet schema/mainwindow.h 0

  The constructor fills the schema and instance \l{QComboBox} selections with the predefined
  schemas and instances and connects their \l{QComboBox::currentIndexChanged()} {currentIndexChanged()}
  signals to the window's \c{schemaSelected()} resp. \c{instanceSelected()} slot.
  Furthermore the signal-slot connections for the validation \l{QPushButton} {button}
  and the instance \l{QTextEdit} {editor} are set up.

  The call to \c{schemaSelected(0)} and \c{instanceSelected(0)} will trigger the validation
  of the initial Contact Schema example.

  \snippet schema/mainwindow.cpp 0

  In the \c{schemaSelected()} slot the content of the instance \l{QComboBox} {selection}
  is adapted to the selected schema and the corresponding schema is loaded from the
  \l{The Qt Resource System} {resource file} and displayed in the schema \l{QTextBrowser} {viewer}.
  At the end of the method a revalidation is triggered.

  \snippet schema/mainwindow.cpp 1

  In the \c{instanceSelected()} slot the selected instance is loaded from the
  \l{The Qt Resource System} {resource file} and loaded into the instance \l{QTextEdit} {editor}
  an the revalidation is triggered again.

  \snippet schema/mainwindow.cpp 2

  The \c{validate()} slot does the actual work in this example.
  At first it stores the content of the schema \l{QTextBrowser} {viewer} and the
  \l{QTextEdit} {editor} into temporary \l{QByteArray} {variables}.
  Then it instanciates a \c{MessageHandler} object which inherits from
  \l{QAbstractMessageHandler} {QAbstractMessageHandler} and is a convenience
  class to store error messages from the XmlPatterns system.

  \snippet schema/mainwindow.cpp 4

  After the \l{QXmlSchema} {QXmlSchema} is instanciated and the message handler set
  on it, the \l{QXmlSchema::load()} {load()} method is called with the schema data as argument.
  If the schema is invalid or a parsing error has occurred, \l{QXmlSchema::isValid()} {isValid()}
  returns \c{false} and the error is flagged in \c{errorOccurred}.
  If the loading was successful, a \l{QXmlSchemaValidator} {QXmlSchemaValidator} is
  instanciated and the schema passed in the constructor.
  A call to \l{QXmlSchemaValidator::validate()} {validate()} will validate the passed
  XML instance data against the XML schema. The return value of that method signals
  whether the validation was successful.
  Depending on the success the status \l{QLabel} {label} is set to 'validation successful'
  or the error message stored in the \c{MessageHandler}

  The rest of the code does only some fancy coloring and eyecandy.

  \snippet schema/mainwindow.cpp 3
*/
