summaryrefslogtreecommitdiffstats
path: root/src/xmlpatterns/api
diff options
context:
space:
mode:
Diffstat (limited to 'src/xmlpatterns/api')
-rw-r--r--src/xmlpatterns/api/qxmlquery.cpp6
-rw-r--r--src/xmlpatterns/api/qxmlquery_p.h13
-rw-r--r--src/xmlpatterns/api/qxmlschema.cpp19
-rw-r--r--src/xmlpatterns/api/qxmlschema.h11
-rw-r--r--src/xmlpatterns/api/qxmlschema_p.cpp8
-rw-r--r--src/xmlpatterns/api/qxmlschema_p.h6
-rw-r--r--src/xmlpatterns/api/qxmlschemavalidator.cpp38
-rw-r--r--src/xmlpatterns/api/qxmlschemavalidator.h13
-rw-r--r--src/xmlpatterns/api/qxmlschemavalidator_p.h5
9 files changed, 68 insertions, 51 deletions
diff --git a/src/xmlpatterns/api/qxmlquery.cpp b/src/xmlpatterns/api/qxmlquery.cpp
index 423da3e..1cf0a2e 100644
--- a/src/xmlpatterns/api/qxmlquery.cpp
+++ b/src/xmlpatterns/api/qxmlquery.cpp
@@ -427,7 +427,7 @@ void QXmlQuery::setQuery(QIODevice *sourceCode, const QUrl &documentURI)
return;
}
- d->queryURI = QXmlQueryPrivate::normalizeQueryURI(documentURI);
+ d->queryURI = QPatternist::XPathHelper::normalizeQueryURI(documentURI);
d->expression(sourceCode);
}
@@ -475,12 +475,12 @@ void QXmlQuery::setQuery(const QUrl &queryURI, const QUrl &baseURI)
{
Q_ASSERT_X(queryURI.isValid(), Q_FUNC_INFO, "The passed URI must be valid.");
- const QUrl canonicalURI(QXmlQueryPrivate::normalizeQueryURI(queryURI));
+ const QUrl canonicalURI(QPatternist::XPathHelper::normalizeQueryURI(queryURI));
Q_ASSERT(canonicalURI.isValid());
Q_ASSERT(!canonicalURI.isRelative());
Q_ASSERT(baseURI.isValid() || baseURI.isEmpty());
- d->queryURI = QXmlQueryPrivate::normalizeQueryURI(baseURI.isEmpty() ? queryURI : baseURI);
+ d->queryURI = QPatternist::XPathHelper::normalizeQueryURI(baseURI.isEmpty() ? queryURI : baseURI);
QPatternist::AutoPtr<QIODevice> result;
diff --git a/src/xmlpatterns/api/qxmlquery_p.h b/src/xmlpatterns/api/qxmlquery_p.h
index 7f58f97..486d885 100644
--- a/src/xmlpatterns/api/qxmlquery_p.h
+++ b/src/xmlpatterns/api/qxmlquery_p.h
@@ -212,19 +212,6 @@ public:
return m_resourceLoader;
}
-
- static inline QUrl normalizeQueryURI(const QUrl &uri)
- {
- Q_ASSERT_X(uri.isEmpty() || uri.isValid(), Q_FUNC_INFO,
- "The URI passed to QXmlQuery::setQuery() must be valid or empty.");
- if(uri.isEmpty())
- return QUrl::fromLocalFile(QCoreApplication::applicationFilePath());
- else if(uri.isRelative())
- return QUrl::fromLocalFile(QCoreApplication::applicationFilePath()).resolved(uri);
- else
- return uri;
- }
-
void setRequiredType(const QPatternist::SequenceType::Ptr &seqType)
{
Q_ASSERT(seqType);
diff --git a/src/xmlpatterns/api/qxmlschema.cpp b/src/xmlpatterns/api/qxmlschema.cpp
index 55b96cd..108212e 100644
--- a/src/xmlpatterns/api/qxmlschema.cpp
+++ b/src/xmlpatterns/api/qxmlschema.cpp
@@ -21,7 +21,7 @@
\brief The QXmlSchema class provides loading and validation of a W3C XML Schema.
\reentrant
- \since 4.X
+ \since 4.6
\ingroup xml-tools
The QXmlSchema class loads, compiles and validates W3C XML Schema files
@@ -31,7 +31,7 @@
/*!
Constructs an invalid, empty schema that cannot be used until
- setSchema() is called.
+ load() is called.
*/
QXmlSchema::QXmlSchema()
: d(new QXmlSchemaPrivate(QXmlNamePool()))
@@ -59,9 +59,10 @@ QXmlSchema::~QXmlSchema()
Sets this QXmlSchema to a schema loaded from the \a source
URI.
*/
-void QXmlSchema::load(const QUrl &source)
+bool QXmlSchema::load(const QUrl &source)
{
d->load(source, QString());
+ return d->isValid();
}
/*!
@@ -78,9 +79,10 @@ void QXmlSchema::load(const QUrl &source)
a valid URI, behavior is undefined.
\sa isValid()
*/
-void QXmlSchema::load(QIODevice *source, const QUrl &documentUri)
+bool QXmlSchema::load(QIODevice *source, const QUrl &documentUri)
{
d->load(source, documentUri, QString());
+ return d->isValid();
}
/*!
@@ -94,9 +96,10 @@ void QXmlSchema::load(QIODevice *source, const QUrl &documentUri)
If \a documentUri is not a valid URI, behavior is undefined.
\sa isValid()
*/
-void QXmlSchema::load(const QByteArray &data, const QUrl &documentUri)
+bool QXmlSchema::load(const QByteArray &data, const QUrl &documentUri)
{
d->load(data, documentUri, QString());
+ return d->isValid();
}
/*!
@@ -183,14 +186,14 @@ QAbstractMessageHandler *QXmlSchema::messageHandler() const
\sa uriResolver()
*/
-void QXmlSchema::setUriResolver(QAbstractUriResolver *resolver)
+void QXmlSchema::setUriResolver(const QAbstractUriResolver *resolver)
{
d->setUriResolver(resolver);
}
/*!
Returns the schema's URI resolver. If no URI resolver has been set,
- QtXmlPatterns will use the URIs in queries as they are.
+ QtXmlPatterns will use the URIs in schemas as they are.
The URI resolver provides a level of abstraction, or \e{polymorphic
URIs}. A resolver can rewrite \e{logical} URIs to physical ones, or
@@ -202,7 +205,7 @@ void QXmlSchema::setUriResolver(QAbstractUriResolver *resolver)
\sa setUriResolver()
*/
-QAbstractUriResolver *QXmlSchema::uriResolver() const
+const QAbstractUriResolver *QXmlSchema::uriResolver() const
{
return d->uriResolver();
}
diff --git a/src/xmlpatterns/api/qxmlschema.h b/src/xmlpatterns/api/qxmlschema.h
index 225cce2..cf56b1e 100644
--- a/src/xmlpatterns/api/qxmlschema.h
+++ b/src/xmlpatterns/api/qxmlschema.h
@@ -13,6 +13,7 @@
#define QXMLSCHEMA_H
#include <QtCore/QSharedDataPointer>
+#include <QtCore/QUrl>
#include <QtXmlPatterns/QXmlNamePool>
QT_BEGIN_HEADER
@@ -37,9 +38,9 @@ class Q_XMLPATTERNS_EXPORT QXmlSchema
QXmlSchema(const QXmlSchema &other);
~QXmlSchema();
- void load(const QUrl &source);
- void load(QIODevice *source, const QUrl &documentUri);
- void load(const QByteArray &data, const QUrl &documentUri);
+ bool load(const QUrl &source);
+ bool load(QIODevice *source, const QUrl &documentUri = QUrl());
+ bool load(const QByteArray &data, const QUrl &documentUri = QUrl());
bool isValid() const;
@@ -49,8 +50,8 @@ class Q_XMLPATTERNS_EXPORT QXmlSchema
void setMessageHandler(QAbstractMessageHandler *handler);
QAbstractMessageHandler *messageHandler() const;
- void setUriResolver(QAbstractUriResolver *resolver);
- QAbstractUriResolver *uriResolver() const;
+ void setUriResolver(const QAbstractUriResolver *resolver);
+ const QAbstractUriResolver *uriResolver() const;
void setNetworkAccessManager(QNetworkAccessManager *networkmanager);
QNetworkAccessManager *networkAccessManager() const;
diff --git a/src/xmlpatterns/api/qxmlschema_p.cpp b/src/xmlpatterns/api/qxmlschema_p.cpp
index ebcccee..21dc04a 100644
--- a/src/xmlpatterns/api/qxmlschema_p.cpp
+++ b/src/xmlpatterns/api/qxmlschema_p.cpp
@@ -61,7 +61,7 @@ QXmlSchemaPrivate::QXmlSchemaPrivate(const QXmlSchemaPrivate &other)
void QXmlSchemaPrivate::load(const QUrl &source, const QString &targetNamespace)
{
- m_documentUri = source;
+ m_documentUri = QPatternist::XPathHelper::normalizeQueryURI(source);
m_schemaContext->setMessageHandler(messageHandler());
m_schemaContext->setUriResolver(uriResolver());
@@ -98,7 +98,7 @@ void QXmlSchemaPrivate::load(QIODevice *source, const QUrl &documentUri, const Q
return;
}
- m_documentUri = documentUri;
+ m_documentUri = QPatternist::XPathHelper::normalizeQueryURI(documentUri);
m_schemaContext->setMessageHandler(messageHandler());
m_schemaContext->setUriResolver(uriResolver());
m_schemaContext->setNetworkAccessManager(networkAccessManager());
@@ -145,12 +145,12 @@ QAbstractMessageHandler *QXmlSchemaPrivate::messageHandler() const
return m_messageHandler.data()->value;
}
-void QXmlSchemaPrivate::setUriResolver(QAbstractUriResolver *resolver)
+void QXmlSchemaPrivate::setUriResolver(const QAbstractUriResolver *resolver)
{
m_uriResolver = resolver;
}
-QAbstractUriResolver *QXmlSchemaPrivate::uriResolver() const
+const QAbstractUriResolver *QXmlSchemaPrivate::uriResolver() const
{
return m_uriResolver;
}
diff --git a/src/xmlpatterns/api/qxmlschema_p.h b/src/xmlpatterns/api/qxmlschema_p.h
index e625f1e..efba256 100644
--- a/src/xmlpatterns/api/qxmlschema_p.h
+++ b/src/xmlpatterns/api/qxmlschema_p.h
@@ -54,14 +54,14 @@ class QXmlSchemaPrivate : public QSharedData
QUrl documentUri() const;
void setMessageHandler(QAbstractMessageHandler *handler);
QAbstractMessageHandler *messageHandler() const;
- void setUriResolver(QAbstractUriResolver *resolver);
- QAbstractUriResolver *uriResolver() const;
+ void setUriResolver(const QAbstractUriResolver *resolver);
+ const QAbstractUriResolver *uriResolver() const;
void setNetworkAccessManager(QNetworkAccessManager *networkmanager);
QNetworkAccessManager *networkAccessManager() const;
QXmlNamePool m_namePool;
QAbstractMessageHandler* m_userMessageHandler;
- QAbstractUriResolver* m_uriResolver;
+ const QAbstractUriResolver* m_uriResolver;
QNetworkAccessManager* m_userNetworkAccessManager;
QPatternist::ReferenceCountedValue<QAbstractMessageHandler>::Ptr m_messageHandler;
QPatternist::ReferenceCountedValue<QNetworkAccessManager>::Ptr m_networkAccessManager;
diff --git a/src/xmlpatterns/api/qxmlschemavalidator.cpp b/src/xmlpatterns/api/qxmlschemavalidator.cpp
index aa80537..fcde49c 100644
--- a/src/xmlpatterns/api/qxmlschemavalidator.cpp
+++ b/src/xmlpatterns/api/qxmlschemavalidator.cpp
@@ -27,7 +27,7 @@
\brief The QXmlSchemaValidator class validates XML instance documents against a W3C XML Schema.
\reentrant
- \since 4.X
+ \since 4.6
\ingroup xml-tools
The QXmlSchemaValidator class loads, parses an XML instance document and validates it
@@ -35,6 +35,16 @@
*/
/*!
+ Constructs a schema validator.
+ The schema used for validation must be referenced in the XML instance document
+ via the xsi:schemaLocation attribute.
+ */
+QXmlSchemaValidator::QXmlSchemaValidator()
+ : d(new QXmlSchemaValidatorPrivate(QXmlSchema()))
+{
+}
+
+/*!
Constructs a schema validator that will use \a schema for validation.
*/
QXmlSchemaValidator::QXmlSchemaValidator(const QXmlSchema &schema)
@@ -65,7 +75,7 @@ void QXmlSchemaValidator::setSchema(const QXmlSchema &schema)
Returns \c true if the XML instance document is valid according the
schema, \c false otherwise.
*/
-bool QXmlSchemaValidator::validate(const QByteArray &data, const QUrl &documentUri)
+bool QXmlSchemaValidator::validate(const QByteArray &data, const QUrl &documentUri) const
{
QByteArray localData(data);
@@ -81,7 +91,7 @@ bool QXmlSchemaValidator::validate(const QByteArray &data, const QUrl &documentU
Returns \c true if the XML instance document is valid according the
schema, \c false otherwise.
*/
-bool QXmlSchemaValidator::validate(const QUrl &source)
+bool QXmlSchemaValidator::validate(const QUrl &source) const
{
d->m_context->setMessageHandler(messageHandler());
d->m_context->setUriResolver(uriResolver());
@@ -102,7 +112,7 @@ bool QXmlSchemaValidator::validate(const QUrl &source)
Returns \c true if the XML instance document is valid according the
schema, \c false otherwise.
*/
-bool QXmlSchemaValidator::validate(QIODevice *source, const QUrl &documentUri)
+bool QXmlSchemaValidator::validate(QIODevice *source, const QUrl &documentUri) const
{
if (!source) {
qWarning("A null QIODevice pointer cannot be passed.");
@@ -114,6 +124,8 @@ bool QXmlSchemaValidator::validate(QIODevice *source, const QUrl &documentUri)
return false;
}
+ const QUrl normalizedUri = QPatternist::XPathHelper::normalizeQueryURI(documentUri);
+
d->m_context->setMessageHandler(messageHandler());
d->m_context->setUriResolver(uriResolver());
d->m_context->setNetworkAccessManager(networkAccessManager());
@@ -125,7 +137,7 @@ bool QXmlSchemaValidator::validate(QIODevice *source, const QUrl &documentUri)
QPatternist::Item item;
try {
- item = loader.openDocument(source, documentUri, d->m_context);
+ item = loader.openDocument(source, normalizedUri, d->m_context);
} catch (QPatternist::Exception exception) {
return false;
}
@@ -135,7 +147,7 @@ bool QXmlSchemaValidator::validate(QIODevice *source, const QUrl &documentUri)
QPatternist::XsdValidatedXmlNodeModel *validatedModel = new QPatternist::XsdValidatedXmlNodeModel(model);
- QPatternist::XsdValidatingInstanceReader reader(validatedModel, documentUri, d->m_context);
+ QPatternist::XsdValidatingInstanceReader reader(validatedModel, normalizedUri, d->m_context);
if (d->m_schema)
reader.addSchema(d->m_schema, d->m_schemaDocumentUri);
try {
@@ -158,6 +170,14 @@ QXmlNamePool QXmlSchemaValidator::namePool() const
}
/*!
+ Returns the schema that is used for validation.
+ */
+QXmlSchema QXmlSchemaValidator::schema() const
+{
+ return d->m_originalSchema;
+}
+
+/*!
Changes the \l {QAbstractMessageHandler}{message handler} for this
QXmlSchemaValidator to \a handler. The schema validator sends all parsing and
validation messages to this message handler. QXmlSchemaValidator does not take
@@ -215,14 +235,14 @@ QAbstractMessageHandler *QXmlSchemaValidator::messageHandler() const
\sa uriResolver()
*/
-void QXmlSchemaValidator::setUriResolver(QAbstractUriResolver *resolver)
+void QXmlSchemaValidator::setUriResolver(const QAbstractUriResolver *resolver)
{
d->m_uriResolver = resolver;
}
/*!
Returns the schema's URI resolver. If no URI resolver has been set,
- QtXmlPatterns will use the URIs in queries as they are.
+ QtXmlPatterns will use the URIs in instance documents as they are.
The URI resolver provides a level of abstraction, or \e{polymorphic
URIs}. A resolver can rewrite \e{logical} URIs to physical ones, or
@@ -234,7 +254,7 @@ void QXmlSchemaValidator::setUriResolver(QAbstractUriResolver *resolver)
\sa setUriResolver()
*/
-QAbstractUriResolver *QXmlSchemaValidator::uriResolver() const
+const QAbstractUriResolver *QXmlSchemaValidator::uriResolver() const
{
return d->m_uriResolver;
}
diff --git a/src/xmlpatterns/api/qxmlschemavalidator.h b/src/xmlpatterns/api/qxmlschemavalidator.h
index e643995..c82c522 100644
--- a/src/xmlpatterns/api/qxmlschemavalidator.h
+++ b/src/xmlpatterns/api/qxmlschemavalidator.h
@@ -12,6 +12,7 @@
#ifndef QXMLSCHEMAVALIDATOR_H
#define QXMLSCHEMAVALIDATOR_H
+#include <QtCore/QUrl>
#include <QtXmlPatterns/QXmlNamePool>
QT_BEGIN_HEADER
@@ -31,22 +32,24 @@ class QXmlSchemaValidatorPrivate;
class Q_XMLPATTERNS_EXPORT QXmlSchemaValidator
{
public:
+ QXmlSchemaValidator();
QXmlSchemaValidator(const QXmlSchema &schema);
~QXmlSchemaValidator();
void setSchema(const QXmlSchema &schema);
- bool validate(const QUrl &source);
- bool validate(QIODevice *source, const QUrl &documentUri);
- bool validate(const QByteArray &data, const QUrl &documentUri);
+ bool validate(const QUrl &source) const;
+ bool validate(QIODevice *source, const QUrl &documentUri = QUrl()) const;
+ bool validate(const QByteArray &data, const QUrl &documentUri = QUrl()) const;
QXmlNamePool namePool() const;
+ QXmlSchema schema() const;
void setMessageHandler(QAbstractMessageHandler *handler);
QAbstractMessageHandler *messageHandler() const;
- void setUriResolver(QAbstractUriResolver *resolver);
- QAbstractUriResolver *uriResolver() const;
+ void setUriResolver(const QAbstractUriResolver *resolver);
+ const QAbstractUriResolver *uriResolver() const;
void setNetworkAccessManager(QNetworkAccessManager *networkmanager);
QNetworkAccessManager *networkAccessManager() const;
diff --git a/src/xmlpatterns/api/qxmlschemavalidator_p.h b/src/xmlpatterns/api/qxmlschemavalidator_p.h
index 0990f73..9910f6e 100644
--- a/src/xmlpatterns/api/qxmlschemavalidator_p.h
+++ b/src/xmlpatterns/api/qxmlschemavalidator_p.h
@@ -77,15 +77,18 @@ public:
m_context = QPatternist::XsdSchemaContext::Ptr(new QPatternist::XsdSchemaContext(m_namePool.d));
m_context->m_schemaTypeFactory = schema.d->m_schemaContext->m_schemaTypeFactory;
m_context->m_builtinTypesFacetList = schema.d->m_schemaContext->m_builtinTypesFacetList;
+
+ m_originalSchema = schema;
}
QXmlNamePool m_namePool;
QAbstractMessageHandler* m_userMessageHandler;
- QAbstractUriResolver* m_uriResolver;
+ const QAbstractUriResolver* m_uriResolver;
QNetworkAccessManager* m_userNetworkAccessManager;
QPatternist::ReferenceCountedValue<QAbstractMessageHandler>::Ptr m_messageHandler;
QPatternist::ReferenceCountedValue<QNetworkAccessManager>::Ptr m_networkAccessManager;
+ QXmlSchema m_originalSchema;
QPatternist::XsdSchemaContext::Ptr m_context;
QPatternist::XsdSchema::Ptr m_schema;
QUrl m_schemaDocumentUri;