summaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorTobias Koenig <tokoe@kde.org>2009-05-16 10:19:10 (GMT)
committerTobias Koenig <tokoe@kde.org>2009-05-16 10:19:10 (GMT)
commit135a028d9dc9a28a0a072665a7dc43b7e9e187be (patch)
treed259e1d265589d10a541899d4982ab4e656900eb /tools
parent210bd7b6033e41aad61fe131002dc5e496d7427a (diff)
downloadQt-135a028d9dc9a28a0a072665a7dc43b7e9e187be.zip
Qt-135a028d9dc9a28a0a072665a7dc43b7e9e187be.tar.gz
Qt-135a028d9dc9a28a0a072665a7dc43b7e9e187be.tar.bz2
Add W3C XML Schema validation support
This was done by Tobias Koenig, as part of an internship at Trolltech/Qt Software, started at Wed Oct 1 18:32:43 2008 +0200, and the last commit being part of this commit dating Tue Feb 24 11:03:36 2009 +0100. This is work consisting of about 650 commits squashed into one, where the first commit was 61b280386c1905a15690fdd917dcbc8eb09b6283, in the repository before Qt's history cut.
Diffstat (limited to 'tools')
-rw-r--r--tools/tools.pro2
-rw-r--r--tools/xmlpatternsvalidator/main.cpp96
-rw-r--r--tools/xmlpatternsvalidator/main.h46
-rw-r--r--tools/xmlpatternsvalidator/xmlpatternsvalidator.pro19
4 files changed, 162 insertions, 1 deletions
diff --git a/tools/tools.pro b/tools/tools.pro
index 0a56cfb..e7f7b03 100644
--- a/tools/tools.pro
+++ b/tools/tools.pro
@@ -25,7 +25,7 @@ mac {
SUBDIRS += kmap2qmap
contains(QT_CONFIG, dbus):SUBDIRS += qdbus
-!wince*:contains(QT_CONFIG, xmlpatterns): SUBDIRS += xmlpatterns
+!wince*:contains(QT_CONFIG, xmlpatterns): SUBDIRS += xmlpatterns xmlpatternsvalidator
embedded: SUBDIRS += makeqpf
CONFIG+=ordered
diff --git a/tools/xmlpatternsvalidator/main.cpp b/tools/xmlpatternsvalidator/main.cpp
new file mode 100644
index 0000000..032afc0
--- /dev/null
+++ b/tools/xmlpatternsvalidator/main.cpp
@@ -0,0 +1,96 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Qt Software Information (qt-info@nokia.com)
+**
+** This file is part of the Patternist project on Trolltech Labs.
+**
+** $TROLLTECH_DUAL_LICENSE$
+**
+****************************************************************************/
+
+#include "main.h"
+
+#include <QtCore/QDebug>
+#include <QtCore/QFile>
+#include <QtCore/QUrl>
+#include <QtXmlPatterns/QXmlSchema>
+#include <QtXmlPatterns/QXmlSchemaValidator>
+
+QT_USE_NAMESPACE
+
+enum ExecutionMode
+{
+ InvalidMode,
+ SchemaOnlyMode,
+ SchemaAndInstanceMode,
+ InstanceOnlyMode
+};
+
+int main(int argc, char **argv)
+{
+ const QCoreApplication app(argc, argv);
+ QCoreApplication::setApplicationName(QLatin1String("xmlpatternsvalidator"));
+
+ if (argc != 2 && argc != 3) {
+ qDebug() << QXmlPatternistCLI::tr("usage: xmlpatternsvalidator (<schema url> | <instance url> <schema url> | <instance url>)");
+ return 2;
+ }
+
+ // parse command line arguments
+ ExecutionMode mode = InvalidMode;
+
+ if (argc == 2) {
+ // either it is a schema or instance document
+
+ QString url = QFile::decodeName(argv[1]);
+ if (url.toLower().endsWith(QLatin1String(".xsd"))) {
+ mode = SchemaOnlyMode;
+ } else {
+ // as we could validate all types of xml documents, don't check the extension here
+ mode = InstanceOnlyMode;
+ }
+ } else if (argc == 3) {
+ mode = SchemaAndInstanceMode;
+ }
+
+ // do validation
+ QXmlSchema schema;
+
+ if (mode == SchemaOnlyMode) {
+ const QString schemaUri = QFile::decodeName(argv[1]);
+
+ schema.load(QUrl(schemaUri));
+
+ if (schema.isValid())
+ return 0;
+ else
+ return 1;
+ } else if (mode == SchemaAndInstanceMode) {
+ const QString instanceUri = QFile::decodeName(argv[1]);
+ const QString schemaUri = QFile::decodeName(argv[2]);
+
+ schema.load(QUrl(schemaUri));
+
+ if (!schema.isValid())
+ return 1;
+
+ QXmlSchemaValidator validator(schema);
+ if (validator.validate(QUrl(instanceUri)))
+ return 0;
+ else
+ return 1;
+ } else if (mode == InstanceOnlyMode) {
+ const QString instanceUri = QFile::decodeName(argv[1]);
+
+ QXmlSchemaValidator validator(schema);
+ if (validator.validate(QUrl(instanceUri)))
+ return 0;
+ else
+ return 1;
+ }
+
+ Q_ASSERT(false);
+
+ return 1;
+}
diff --git a/tools/xmlpatternsvalidator/main.h b/tools/xmlpatternsvalidator/main.h
new file mode 100644
index 0000000..477a45a
--- /dev/null
+++ b/tools/xmlpatternsvalidator/main.h
@@ -0,0 +1,46 @@
+/****************************************************************************
+ **
+ ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+ ** Contact: Qt Software Information (qt-info@nokia.com)
+ **
+ ** This file is part of the Patternist project on Trolltech Labs. * **
+ ** $TROLLTECH_DUAL_LICENSE$
+ **
+ ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ **
+ ****************************************************************************/
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+
+#ifndef Patternist_main_h
+#define Patternist_main_h
+
+#include <QtCore/QCoreApplication>
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+class QXmlPatternistCLI
+{
+public:
+ Q_DECLARE_TR_FUNCTIONS(QXmlPatternistCLI)
+private:
+ inline QXmlPatternistCLI();
+ Q_DISABLE_COPY(QXmlPatternistCLI)
+};
+
+QT_END_NAMESPACE
+
+QT_END_HEADER
+
+#endif
diff --git a/tools/xmlpatternsvalidator/xmlpatternsvalidator.pro b/tools/xmlpatternsvalidator/xmlpatternsvalidator.pro
new file mode 100644
index 0000000..dd5bd37
--- /dev/null
+++ b/tools/xmlpatternsvalidator/xmlpatternsvalidator.pro
@@ -0,0 +1,19 @@
+TEMPLATE = app
+TARGET = xmlpatternsvalidator
+DESTDIR = ../../bin
+QT -= gui
+QT += xmlpatterns
+
+target.path = $$[QT_INSTALL_BINS]
+INSTALLS += target
+
+# This ensures we get stderr and stdout on Windows.
+CONFIG += console
+
+# This ensures that this is a command-line program on OS X and not a GUI application.
+CONFIG -= app_bundle
+
+SOURCES = main.cpp
+HEADERS = main.h
+
+include(../src/common.pri)