summaryrefslogtreecommitdiffstats
path: root/src/xmlpatterns/schema
diff options
context:
space:
mode:
Diffstat (limited to 'src/xmlpatterns/schema')
-rw-r--r--src/xmlpatterns/schema/qnamespacesupport.cpp4
-rw-r--r--src/xmlpatterns/schema/qxsdparticlechecker.cpp6
-rw-r--r--src/xmlpatterns/schema/qxsdschemacontext.cpp2
-rw-r--r--src/xmlpatterns/schema/qxsdschemacontext_p.h4
-rw-r--r--src/xmlpatterns/schema/qxsdschemadebugger_p.h2
-rw-r--r--src/xmlpatterns/schema/qxsdschemahelper.cpp4
-rw-r--r--src/xmlpatterns/schema/qxsdschemahelper_p.h63
-rw-r--r--src/xmlpatterns/schema/qxsdschemaparser.cpp46
-rw-r--r--src/xmlpatterns/schema/qxsdstatemachine.cpp16
-rw-r--r--src/xmlpatterns/schema/qxsdstatemachine_p.h6
-rw-r--r--src/xmlpatterns/schema/qxsdvalidatedxmlnodemodel.cpp2
-rw-r--r--src/xmlpatterns/schema/qxsdvalidatedxmlnodemodel_p.h10
-rw-r--r--src/xmlpatterns/schema/qxsdvalidatinginstancereader.cpp15
-rw-r--r--src/xmlpatterns/schema/qxsdvalidatinginstancereader_p.h2
14 files changed, 128 insertions, 54 deletions
diff --git a/src/xmlpatterns/schema/qnamespacesupport.cpp b/src/xmlpatterns/schema/qnamespacesupport.cpp
index 00698d6..349f451 100644
--- a/src/xmlpatterns/schema/qnamespacesupport.cpp
+++ b/src/xmlpatterns/schema/qnamespacesupport.cpp
@@ -33,9 +33,7 @@ NamespaceSupport::NamespaceSupport(const NamePool::Ptr &namePool)
: m_namePool(namePool)
{
// the XML namespace
- const QXmlName binding = namePool->allocateBinding(QLatin1String("xml"),
- QLatin1String("http://www.w3.org/XML/1998/namespace"));
- m_ns.insert(binding.prefix(), binding.namespaceURI());
+ m_ns.insert(StandardPrefixes::xml, StandardNamespaces::xml);
}
void NamespaceSupport::setPrefix(const QXmlName::PrefixCode prefixCode, const QXmlName::NamespaceCode namespaceCode)
diff --git a/src/xmlpatterns/schema/qxsdparticlechecker.cpp b/src/xmlpatterns/schema/qxsdparticlechecker.cpp
index 1bdef00..7a09f8a 100644
--- a/src/xmlpatterns/schema/qxsdparticlechecker.cpp
+++ b/src/xmlpatterns/schema/qxsdparticlechecker.cpp
@@ -180,9 +180,9 @@ static bool derivedTermValid(const XsdTerm::Ptr &baseTerm, const XsdTerm::Ptr &d
// check that the constraints of the derived element are more strict then the constraints of the base element
const XsdElement::BlockingConstraints baseConstraints = element->disallowedSubstitutions();
const XsdElement::BlockingConstraints derivedConstraints = derivedElement->disallowedSubstitutions();
- if ((baseConstraints & XsdElement::RestrictionConstraint) && !(derivedConstraints & XsdElement::RestrictionConstraint) ||
- (baseConstraints & XsdElement::ExtensionConstraint) && !(derivedConstraints & XsdElement::ExtensionConstraint) ||
- (baseConstraints & XsdElement::SubstitutionConstraint) && !(derivedConstraints & XsdElement::SubstitutionConstraint)) {
+ if (((baseConstraints & XsdElement::RestrictionConstraint) && !(derivedConstraints & XsdElement::RestrictionConstraint)) ||
+ ((baseConstraints & XsdElement::ExtensionConstraint) && !(derivedConstraints & XsdElement::ExtensionConstraint)) ||
+ ((baseConstraints & XsdElement::SubstitutionConstraint) && !(derivedConstraints & XsdElement::SubstitutionConstraint))) {
errorMsg = QtXmlPatterns::tr("block constraints of derived element %1 must not be more weaker than in the base element").arg(formatKeyword(derivedElement->displayName(namePool)));
return false;
}
diff --git a/src/xmlpatterns/schema/qxsdschemacontext.cpp b/src/xmlpatterns/schema/qxsdschemacontext.cpp
index 57736bd..65b2e52 100644
--- a/src/xmlpatterns/schema/qxsdschemacontext.cpp
+++ b/src/xmlpatterns/schema/qxsdschemacontext.cpp
@@ -67,7 +67,7 @@ QSourceLocation XsdSchemaContext::locationFor(const SourceLocationReflection *co
return QSourceLocation();
}
-void XsdSchemaContext::setUriResolver(QAbstractUriResolver *uriResolver)
+void XsdSchemaContext::setUriResolver(const QAbstractUriResolver *uriResolver)
{
m_uriResolver = uriResolver;
}
diff --git a/src/xmlpatterns/schema/qxsdschemacontext_p.h b/src/xmlpatterns/schema/qxsdschemacontext_p.h
index cf52028..c3a9f15 100644
--- a/src/xmlpatterns/schema/qxsdschemacontext_p.h
+++ b/src/xmlpatterns/schema/qxsdschemacontext_p.h
@@ -115,7 +115,7 @@ namespace QPatternist
* Sets the uri @p resolver that is used for resolving URIs in the
* schema parser.
*/
- void setUriResolver(QAbstractUriResolver *resolver);
+ void setUriResolver(const QAbstractUriResolver *resolver);
/**
* Returns the uri resolver that is used for resolving URIs in the
@@ -145,7 +145,7 @@ namespace QPatternist
NamePool::Ptr m_namePool;
QNetworkAccessManager* m_networkAccessManager;
QUrl m_baseURI;
- QAbstractUriResolver* m_uriResolver;
+ const QAbstractUriResolver* m_uriResolver;
QAbstractMessageHandler* m_messageHandler;
};
}
diff --git a/src/xmlpatterns/schema/qxsdschemadebugger_p.h b/src/xmlpatterns/schema/qxsdschemadebugger_p.h
index 8c12f0f..8966963 100644
--- a/src/xmlpatterns/schema/qxsdschemadebugger_p.h
+++ b/src/xmlpatterns/schema/qxsdschemadebugger_p.h
@@ -85,7 +85,7 @@ namespace QPatternist
void dumpSchema(const XsdSchema::Ptr &schema);
private:
- NamePool::Ptr m_namePool;
+ const NamePool::Ptr m_namePool;
};
}
diff --git a/src/xmlpatterns/schema/qxsdschemahelper.cpp b/src/xmlpatterns/schema/qxsdschemahelper.cpp
index 752af89..ff169f7 100644
--- a/src/xmlpatterns/schema/qxsdschemahelper.cpp
+++ b/src/xmlpatterns/schema/qxsdschemahelper.cpp
@@ -409,7 +409,7 @@ bool XsdSchemaHelper::isValidlySubstitutable(const SchemaType::Ptr &type, const
return false;
}
-bool XsdSchemaHelper::isSimpleDerivationOk(const SchemaType::Ptr &derivedType, const SchemaType::Ptr baseType, const SchemaType::DerivationConstraints &constraints)
+bool XsdSchemaHelper::isSimpleDerivationOk(const SchemaType::Ptr &derivedType, const SchemaType::Ptr &baseType, const SchemaType::DerivationConstraints &constraints)
{
// @see http://www.w3.org/TR/xmlschema11-1/#cos-st-derived-ok
@@ -453,7 +453,7 @@ bool XsdSchemaHelper::isSimpleDerivationOk(const SchemaType::Ptr &derivedType, c
return false;
}
-bool XsdSchemaHelper::isComplexDerivationOk(const SchemaType::Ptr &derivedType, const SchemaType::Ptr baseType, const SchemaType::DerivationConstraints &constraints)
+bool XsdSchemaHelper::isComplexDerivationOk(const SchemaType::Ptr &derivedType, const SchemaType::Ptr &baseType, const SchemaType::DerivationConstraints &constraints)
{
if (!derivedType)
return false;
diff --git a/src/xmlpatterns/schema/qxsdschemahelper_p.h b/src/xmlpatterns/schema/qxsdschemahelper_p.h
index 1722b4c..918664e 100644
--- a/src/xmlpatterns/schema/qxsdschemahelper_p.h
+++ b/src/xmlpatterns/schema/qxsdschemahelper_p.h
@@ -55,12 +55,15 @@ namespace QPatternist
/**
* Checks whether the given @p nameSpace is allowed by the given namespace @p constraint.
*/
- static bool wildcardAllowsNamespaceName(const QString &nameSpace, const XsdWildcard::NamespaceConstraint::Ptr &constraint);
+ static bool wildcardAllowsNamespaceName(const QString &nameSpace,
+ const XsdWildcard::NamespaceConstraint::Ptr &constraint);
/**
* Checks whether the given @p name is allowed by the namespace constraint of the given @p wildcard.
*/
- static bool wildcardAllowsExpandedName(const QXmlName &name, const XsdWildcard::Ptr &wildcard, const NamePool::Ptr &namePool);
+ static bool wildcardAllowsExpandedName(const QXmlName &name,
+ const XsdWildcard::Ptr &wildcard,
+ const NamePool::Ptr &namePool);
/**
* Checks whether the @p wildcard is a subset of @p otherWildcard.
@@ -75,25 +78,32 @@ namespace QPatternist
/**
* Returns the intersection of the given @p wildcard and @p otherWildcard.
*/
- static XsdWildcard::Ptr wildcardIntersection(const XsdWildcard::Ptr &wildcard, const XsdWildcard::Ptr &otherWildcard);
+ static XsdWildcard::Ptr wildcardIntersection(const XsdWildcard::Ptr &wildcard,
+ const XsdWildcard::Ptr &otherWildcard);
/**
* Returns whether the given @p type is validly substitutable for an @p otherType
* under the given @p constraints.
*/
- static bool isValidlySubstitutable(const SchemaType::Ptr &type, const SchemaType::Ptr &otherType, const SchemaType::DerivationConstraints &constraints);
+ static bool isValidlySubstitutable(const SchemaType::Ptr &type,
+ const SchemaType::Ptr &otherType,
+ const SchemaType::DerivationConstraints &constraints);
/**
* Returns whether the simple @p derivedType can be derived from the simple @p baseType
* under the given @p constraints.
*/
- static bool isSimpleDerivationOk(const SchemaType::Ptr &derivedType, const SchemaType::Ptr baseType, const SchemaType::DerivationConstraints &constraints);
+ static bool isSimpleDerivationOk(const SchemaType::Ptr &derivedType,
+ const SchemaType::Ptr &baseType,
+ const SchemaType::DerivationConstraints &constraints);
/**
* Returns whether the complex @p derivedType can be derived from the complex @p baseType
* under the given @p constraints.
*/
- static bool isComplexDerivationOk(const SchemaType::Ptr &derivedType, const SchemaType::Ptr baseType, const SchemaType::DerivationConstraints &constraints);
+ static bool isComplexDerivationOk(const SchemaType::Ptr &derivedType,
+ const SchemaType::Ptr &baseType,
+ const SchemaType::DerivationConstraints &constraints);
/**
* This method takes the two string based operands @p operand1 and @p operand2 and converts them to instances of type @p type.
@@ -111,41 +121,62 @@ namespace QPatternist
* Returns whether the process content property of the @p derivedWildcard is valid
* according to the process content property of its @p baseWildcard.
*/
- static bool checkWildcardProcessContents(const XsdWildcard::Ptr &baseWildcard, const XsdWildcard::Ptr &derivedWildcard);
+ static bool checkWildcardProcessContents(const XsdWildcard::Ptr &baseWildcard,
+ const XsdWildcard::Ptr &derivedWildcard);
/**
* Checks whether @[ member is a member of the substitution group with the given @p head.
*/
- static bool foundSubstitutionGroupTransitive(const XsdElement::Ptr &head, const XsdElement::Ptr &member, QSet<XsdElement::Ptr> &visitedElements);
+ static bool foundSubstitutionGroupTransitive(const XsdElement::Ptr &head,
+ const XsdElement::Ptr &member,
+ QSet<XsdElement::Ptr> &visitedElements);
/**
* A helper method that iterates over the type hierarchy from @p memberType up to @p headType and collects all
* @p derivationSet and @p blockSet constraints that exists on the way there.
*/
- static void foundSubstitutionGroupTypeInheritance(const SchemaType::Ptr &headType, const SchemaType::Ptr &memberType,
- QSet<SchemaType::DerivationMethod> &derivationSet, NamedSchemaComponent::BlockingConstraints &blockSet);
+ static void foundSubstitutionGroupTypeInheritance(const SchemaType::Ptr &headType,
+ const SchemaType::Ptr &memberType,
+ QSet<SchemaType::DerivationMethod> &derivationSet,
+ NamedSchemaComponent::BlockingConstraints &blockSet);
/**
* Checks if the @p member is transitive to @p head.
*/
- static bool substitutionGroupOkTransitive(const XsdElement::Ptr &head, const XsdElement::Ptr &member, const NamePool::Ptr &namePool);
+ static bool substitutionGroupOkTransitive(const XsdElement::Ptr &head,
+ const XsdElement::Ptr &member,
+ const NamePool::Ptr &namePool);
/**
* Checks if @p derivedAttributeGroup is a valid restriction for @p attributeGroup.
*/
- static bool isValidAttributeGroupRestriction(const XsdAttributeGroup::Ptr &derivedAttributeGroup, const XsdAttributeGroup::Ptr &attributeGroup, const XsdSchemaContext::Ptr &context, QString &errorMsg);
+ static bool isValidAttributeGroupRestriction(const XsdAttributeGroup::Ptr &derivedAttributeGroup,
+ const XsdAttributeGroup::Ptr &attributeGroup,
+ const XsdSchemaContext::Ptr &context,
+ QString &errorMsg);
/**
* Checks if @p derivedAttributeUses are a valid restriction for @p attributeUses.
*/
- static bool isValidAttributeUsesRestriction(const XsdAttributeUse::List &derivedAttributeUses, const XsdAttributeUse::List &attributeUses,
- const XsdWildcard::Ptr &derivedWildcard, const XsdWildcard::Ptr &wildcard, const XsdSchemaContext::Ptr &context, QString &errorMsg);
+ static bool isValidAttributeUsesRestriction(const XsdAttributeUse::List &derivedAttributeUses,
+ const XsdAttributeUse::List &attributeUses,
+ const XsdWildcard::Ptr &derivedWildcard,
+ const XsdWildcard::Ptr &wildcard,
+ const XsdSchemaContext::Ptr &context,
+ QString &errorMsg);
/**
* Checks if @p derivedAttributeUses are a valid extension for @p attributeUses.
*/
- static bool isValidAttributeUsesExtension(const XsdAttributeUse::List &derivedAttributeUses, const XsdAttributeUse::List &attributeUses,
- const XsdWildcard::Ptr &derivedWildcard, const XsdWildcard::Ptr &wildcard, const XsdSchemaContext::Ptr &context, QString &errorMsg);
+ static bool isValidAttributeUsesExtension(const XsdAttributeUse::List &derivedAttributeUses,
+ const XsdAttributeUse::List &attributeUses,
+ const XsdWildcard::Ptr &derivedWildcard,
+ const XsdWildcard::Ptr &wildcard,
+ const XsdSchemaContext::Ptr &context,
+ QString &errorMsg);
+
+ private:
+ Q_DISABLE_COPY(XsdSchemaHelper)
};
}
diff --git a/src/xmlpatterns/schema/qxsdschemaparser.cpp b/src/xmlpatterns/schema/qxsdschemaparser.cpp
index 9f1e75d..cabc12e 100644
--- a/src/xmlpatterns/schema/qxsdschemaparser.cpp
+++ b/src/xmlpatterns/schema/qxsdschemaparser.cpp
@@ -5,6 +5,7 @@
#include "qacceltreeresourceloader_p.h"
#include "qautoptr_p.h"
#include "qboolean_p.h"
+#include "qcommonnamespaces_p.h"
#include "qderivedinteger_p.h"
#include "qderivedstring_p.h"
#include "qqnamevalue_p.h"
@@ -119,12 +120,28 @@ class TagValidationHandler
void validate(XsdSchemaToken::NodeName token)
{
if (token == XsdSchemaToken::NoKeyword) {
- m_parser->error(QtXmlPatterns::tr("can not process unknown element %1").arg(formatElement(m_parser->name().toString())));
+ const QList<XsdSchemaToken::NodeName> tokens = m_machine.possibleTransitions();
+
+ QStringList elementNames;
+ for (int i = 0; i < tokens.count(); ++i)
+ elementNames.append(formatElement(XsdSchemaToken::toString(tokens.at(i))));
+
+ m_parser->error(QtXmlPatterns::tr("can not process unknown element %1, expected elements are: %2")
+ .arg(formatElement(m_parser->name().toString()))
+ .arg(elementNames.join(QLatin1String(", "))));
return;
}
if (!m_machine.proceed(token)) {
- m_parser->error(QtXmlPatterns::tr("element %1 is not allowed in this scope").arg(formatElement(XsdSchemaToken::toString(token))));
+ const QList<XsdSchemaToken::NodeName> tokens = m_machine.possibleTransitions();
+
+ QStringList elementNames;
+ for (int i = 0; i < tokens.count(); ++i)
+ elementNames.append(formatElement(XsdSchemaToken::toString(tokens.at(i))));
+
+ m_parser->error(QtXmlPatterns::tr("element %1 is not allowed in this scope, possible elements are: %2")
+ .arg(formatElement(XsdSchemaToken::toString(token)))
+ .arg(elementNames.join(QLatin1String(", "))));
return;
}
}
@@ -132,7 +149,14 @@ class TagValidationHandler
void finalize() const
{
if (!m_machine.inEndState()) {
- m_parser->error(QtXmlPatterns::tr("child element is missing in that scope"));
+ const QList<XsdSchemaToken::NodeName> tokens = m_machine.possibleTransitions();
+
+ QStringList elementNames;
+ for (int i = 0; i < tokens.count(); ++i)
+ elementNames.append(formatElement(XsdSchemaToken::toString(tokens.at(i))));
+
+ m_parser->error(QtXmlPatterns::tr("child element is missing in that scope, possible child elements are: %1")
+ .arg(elementNames.join(QLatin1String(", "))));
}
}
@@ -425,8 +449,8 @@ void XsdSchemaParser::parseSchema(ParserType parserType)
const QString version = readAttribute(QString::fromLatin1("version"));
}
- if (hasAttribute(QString::fromLatin1("http://www.w3.org/XML/1998/namespace"), QString::fromLatin1("lang"))) {
- const QString value = readAttribute(QString::fromLatin1("lang"), QString::fromLatin1("http://www.w3.org/XML/1998/namespace"));
+ if (hasAttribute(CommonNamespaces::XML, QString::fromLatin1("lang"))) {
+ const QString value = readAttribute(QString::fromLatin1("lang"), CommonNamespaces::XML);
const QRegExp exp(QString::fromLatin1("[a-zA-Z]{1,8}(-[a-zA-Z0-9]{1,8})*"));
if (!exp.exactMatch(value)) {
@@ -750,7 +774,7 @@ void XsdSchemaParser::parseRedefine()
if (url.isRelative()) {
Q_ASSERT(m_documentURI.isValid());
- url = m_documentURI.resolved(url);
+ url = m_documentURI.resolved(url);
}
// we parse the schema given in the redefine tag into its own context
@@ -1176,8 +1200,8 @@ XsdDocumentation::Ptr XsdSchemaParser::parseDocumentation()
}
}
- if (hasAttribute(QString::fromLatin1("http://www.w3.org/XML/1998/namespace"), QString::fromLatin1("lang"))) {
- const QString value = readAttribute(QString::fromLatin1("lang"), QString::fromLatin1("http://www.w3.org/XML/1998/namespace"));
+ if (hasAttribute(CommonNamespaces::XML, QString::fromLatin1("lang"))) {
+ const QString value = readAttribute(QString::fromLatin1("lang"), CommonNamespaces::XML);
const QRegExp exp(QString::fromLatin1("[a-zA-Z]{1,8}(-[a-zA-Z0-9]{1,8})*"));
if (!exp.exactMatch(value)) {
@@ -3948,7 +3972,7 @@ XsdAttribute::Ptr XsdSchemaParser::parseGlobalAttribute()
error(QtXmlPatterns::tr("content of %1 attribute of %2 element must not be from namespace %3")
.arg(formatAttribute("name"))
.arg(formatElement("attribute"))
- .arg(formatURI(QLatin1String("http://www.w3.org/2001/XMLSchema-instance"))));
+ .arg(formatURI(CommonNamespaces::XSI)));
return attribute;
}
if (m_namePool->stringForLocalName(objectName.localName()) == QString::fromLatin1("xmlns")) {
@@ -4170,7 +4194,7 @@ XsdAttributeUse::Ptr XsdSchemaParser::parseLocalAttribute(const NamedSchemaCompo
error(QtXmlPatterns::tr("content of %1 attribute of %2 element must not be from namespace %3")
.arg(formatAttribute("name"))
.arg(formatElement("attribute"))
- .arg(formatURI(QLatin1String("http://www.w3.org/2001/XMLSchema-instance"))));
+ .arg(formatURI(CommonNamespaces::XSI)));
return attributeUse;
}
if (m_namePool->stringForLocalName(objectName.localName()) == QString::fromLatin1("xmlns")) {
@@ -5858,7 +5882,7 @@ QString XsdSchemaParser::readXPathAttribute(const QString &attributeName, XPathT
QXmlNamePool namePool(m_namePool.data());
- QXmlQuery::QueryLanguage language;
+ QXmlQuery::QueryLanguage language = QXmlQuery::XPath20;
switch (type) {
case XPath20: language = QXmlQuery::XPath20; break;
case XPathSelector: language = QXmlQuery::XmlSchema11IdentityConstraintSelector; break;
diff --git a/src/xmlpatterns/schema/qxsdstatemachine.cpp b/src/xmlpatterns/schema/qxsdstatemachine.cpp
index e40e55b..4f36f22 100644
--- a/src/xmlpatterns/schema/qxsdstatemachine.cpp
+++ b/src/xmlpatterns/schema/qxsdstatemachine.cpp
@@ -114,6 +114,20 @@ bool XsdStateMachine<TransitionType>::proceed(TransitionType transition)
}
template <typename TransitionType>
+QList<TransitionType> XsdStateMachine<TransitionType>::possibleTransitions() const
+{
+ // check that we are not in an invalid state
+ if (!m_transitions.contains(m_currentState)) {
+ return QList<TransitionType>();
+ }
+
+ // fetch the transition entry for the current state
+ const QHash<TransitionType, QVector<StateId> > &entry = m_transitions[m_currentState];
+
+ return entry.keys();
+}
+
+template <typename TransitionType>
template <typename InputType>
bool XsdStateMachine<TransitionType>::proceed(InputType input)
{
@@ -259,7 +273,7 @@ typename XsdStateMachine<TransitionType>::StateId XsdStateMachine<TransitionType
}
// check if the NFA state set contains a Start or End
- // state, in that case our new DFA state will be a
+ // state, in that case our new DFA state will be a
// Start or End state as well
StateType type = InternalState;
QSetIterator<StateId> it(nfaState);
diff --git a/src/xmlpatterns/schema/qxsdstatemachine_p.h b/src/xmlpatterns/schema/qxsdstatemachine_p.h
index 7988335..f0cf99d 100644
--- a/src/xmlpatterns/schema/qxsdstatemachine_p.h
+++ b/src/xmlpatterns/schema/qxsdstatemachine_p.h
@@ -113,6 +113,12 @@ namespace QPatternist
bool proceed(TransitionType transition);
/**
+ * Returns the list of transitions that are reachable from the current
+ * state.
+ */
+ QList<TransitionType> possibleTransitions() const;
+
+ /**
* Continues execution of the machine with the given @p input.
*
* @note To use this method, inputEqualsTransition must be implemented
diff --git a/src/xmlpatterns/schema/qxsdvalidatedxmlnodemodel.cpp b/src/xmlpatterns/schema/qxsdvalidatedxmlnodemodel.cpp
index 8e1645a..33bca4e 100644
--- a/src/xmlpatterns/schema/qxsdvalidatedxmlnodemodel.cpp
+++ b/src/xmlpatterns/schema/qxsdvalidatedxmlnodemodel.cpp
@@ -20,7 +20,7 @@ QT_BEGIN_NAMESPACE
using namespace QPatternist;
XsdValidatedXmlNodeModel::XsdValidatedXmlNodeModel(const QAbstractXmlNodeModel *model)
- : m_internalModel(const_cast<QAbstractXmlNodeModel*>(model))
+ : m_internalModel(model)
{
}
diff --git a/src/xmlpatterns/schema/qxsdvalidatedxmlnodemodel_p.h b/src/xmlpatterns/schema/qxsdvalidatedxmlnodemodel_p.h
index 579f41a..d52e369 100644
--- a/src/xmlpatterns/schema/qxsdvalidatedxmlnodemodel_p.h
+++ b/src/xmlpatterns/schema/qxsdvalidatedxmlnodemodel_p.h
@@ -134,11 +134,11 @@ namespace QPatternist
virtual QVector<QXmlNodeModelIndex> attributes(const QXmlNodeModelIndex &element) const;
private:
- QAbstractXmlNodeModel::Ptr m_internalModel;
- QHash<QXmlNodeModelIndex, XsdElement::Ptr> m_assignedElements;
- QHash<QXmlNodeModelIndex, XsdAttribute::Ptr> m_assignedAttributes;
- QHash<QXmlNodeModelIndex, SchemaType::Ptr> m_assignedTypes;
- QHash<QString, QSet<NamedSchemaComponent::Ptr> > m_idIdRefBindings;
+ QExplicitlySharedDataPointer<const QAbstractXmlNodeModel> m_internalModel;
+ QHash<QXmlNodeModelIndex, XsdElement::Ptr> m_assignedElements;
+ QHash<QXmlNodeModelIndex, XsdAttribute::Ptr> m_assignedAttributes;
+ QHash<QXmlNodeModelIndex, SchemaType::Ptr> m_assignedTypes;
+ QHash<QString, QSet<NamedSchemaComponent::Ptr> > m_idIdRefBindings;
};
}
diff --git a/src/xmlpatterns/schema/qxsdvalidatinginstancereader.cpp b/src/xmlpatterns/schema/qxsdvalidatinginstancereader.cpp
index 12fc477..8cb34d4 100644
--- a/src/xmlpatterns/schema/qxsdvalidatinginstancereader.cpp
+++ b/src/xmlpatterns/schema/qxsdvalidatinginstancereader.cpp
@@ -15,6 +15,7 @@
#include "qacceltreeresourceloader_p.h"
#include "qbase64binary_p.h"
#include "qboolean_p.h"
+#include "qcommonnamespaces_p.h"
#include "qderivedinteger_p.h"
#include "qduration_p.h"
#include "qgenericstaticcontext_p.h"
@@ -64,14 +65,14 @@ namespace QPatternist
}
}
-XsdValidatingInstanceReader::XsdValidatingInstanceReader(const XsdValidatedXmlNodeModel *model, const QUrl &documentUri, const XsdSchemaContext::Ptr &context)
+XsdValidatingInstanceReader::XsdValidatingInstanceReader(XsdValidatedXmlNodeModel *model, const QUrl &documentUri, const XsdSchemaContext::Ptr &context)
: XsdInstanceReader(model, context)
- , m_model(const_cast<XsdValidatedXmlNodeModel*>(model))
+ , m_model(model)
, m_namePool(m_context->namePool())
- , m_xsiNilName(m_namePool->allocateQName(QLatin1String("http://www.w3.org/2001/XMLSchema-instance"), QLatin1String("nil")))
- , m_xsiTypeName(m_namePool->allocateQName(QLatin1String("http://www.w3.org/2001/XMLSchema-instance"), QLatin1String("type")))
- , m_xsiSchemaLocationName(m_namePool->allocateQName(QLatin1String("http://www.w3.org/2001/XMLSchema-instance"), QLatin1String("schemaLocation")))
- , m_xsiNoNamespaceSchemaLocationName(m_namePool->allocateQName(QLatin1String("http://www.w3.org/2001/XMLSchema-instance"), QLatin1String("noNamespaceSchemaLocation")))
+ , m_xsiNilName(m_namePool->allocateQName(CommonNamespaces::XSI, QLatin1String("nil")))
+ , m_xsiTypeName(m_namePool->allocateQName(CommonNamespaces::XSI, QLatin1String("type")))
+ , m_xsiSchemaLocationName(m_namePool->allocateQName(CommonNamespaces::XSI, QLatin1String("schemaLocation")))
+ , m_xsiNoNamespaceSchemaLocationName(m_namePool->allocateQName(CommonNamespaces::XSI, QLatin1String("noNamespaceSchemaLocation")))
, m_documentUri(documentUri)
{
m_idRefsType = m_context->schemaTypeFactory()->createSchemaType(m_namePool->allocateQName(CommonNamespaces::WXS, QLatin1String("IDREFS")));
@@ -152,7 +153,7 @@ bool XsdValidatingInstanceReader::read()
void XsdValidatingInstanceReader::error(const QString &msg) const
{
- const_cast<XsdSchemaContext*>(m_context.data())->error(msg, XsdSchemaContext::XSDError, sourceLocation());
+ m_context.data()->error(msg, XsdSchemaContext::XSDError, sourceLocation());
}
bool XsdValidatingInstanceReader::loadSchema(const QString &targetNamespace, const QUrl &location)
diff --git a/src/xmlpatterns/schema/qxsdvalidatinginstancereader_p.h b/src/xmlpatterns/schema/qxsdvalidatinginstancereader_p.h
index 799ab44..28f3c3f 100644
--- a/src/xmlpatterns/schema/qxsdvalidatinginstancereader_p.h
+++ b/src/xmlpatterns/schema/qxsdvalidatinginstancereader_p.h
@@ -59,7 +59,7 @@ namespace QPatternist
* @param documentUri The uri of the document the model is from.
* @param context The context that is used to report errors etc.
*/
- XsdValidatingInstanceReader(const XsdValidatedXmlNodeModel *model, const QUrl &documentUri, const XsdSchemaContext::Ptr &context);
+ XsdValidatingInstanceReader(XsdValidatedXmlNodeModel *model, const QUrl &documentUri, const XsdSchemaContext::Ptr &context);
/**
* Adds a new @p schema to the pool of schemas that shall be used