/**************************************************************************** ** ** Copyright (C) 2016 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the QtXmlPatterns module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** 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 Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser ** General Public License version 3 as published by the Free Software ** Foundation and appearing in the file LICENSE.LGPL3 included in the ** packaging of this file. Please review the following information to ** ensure the GNU Lesser General Public License version 3 requirements ** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. ** ** GNU General Public License Usage ** Alternatively, this file may be used under the terms of the GNU ** General Public License version 2.0 or (at your option) the GNU General ** Public license version 3 or any later version approved by the KDE Free ** Qt Foundation. The licenses are as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 ** included in the packaging of this file. Please review the following ** information to ensure the GNU General Public License requirements will ** be met: https://www.gnu.org/licenses/gpl-2.0.html and ** https://www.gnu.org/licenses/gpl-3.0.html. ** ** $QT_END_LICENSE$ ** ****************************************************************************/ // // 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_XsdElement_H #define Patternist_XsdElement_H #include #include #include #include #include #include #include QT_BEGIN_NAMESPACE namespace QPatternist { /** * @short Represents a XSD element object. * * This class represents the element object of a XML schema as described * here. * * It contains information from either a top-level element declaration (as child of a schema object) * or a local element declaration (as descendant of an complexType object). * * @see XML Schema API reference * @ingroup Patternist_schema * @author Tobias Koenig */ class XsdElement : public XsdTerm { public: typedef QExplicitlySharedDataPointer Ptr; typedef QList List; /** * Describes the constraint type of the element. */ enum ConstraintType { NoneConstraint, ///< The value of the element has no constraints. DefaultConstraint, ///< The element has a default value set. FixedConstraint ///< The element has a fixed value set. }; /** * Describes the scope of an element. * * @see Scope Definition */ class Scope : public QSharedData { public: typedef QExplicitlySharedDataPointer Ptr; /** * Describes the scope of an attribute. */ enum Variety { Global, ///< The element is defined globally as child of the schema object. Local ///< The element is defined locally as child of a complex type or model group definition. }; /** * Sets the @p variety of the element scope. */ void setVariety(Variety variety); /** * Returns the variety of the element scope. */ Variety variety() const; /** * Sets the @p parent complex type or model group definition of the element scope. */ void setParent(const NamedSchemaComponent::Ptr &parent); /** * Returns the parent complex type or model group definition of the element scope. */ NamedSchemaComponent::Ptr parent() const; private: Variety m_variety; NamedSchemaComponent::Ptr m_parent; }; /** * Describes a type table of an element. * * @see Type Table Definition */ class TypeTable : public QSharedData { public: typedef QExplicitlySharedDataPointer Ptr; /** * Adds an @p alternative to the type table. */ void addAlternative(const XsdAlternative::Ptr &alternative); /** * Returns the alternatives of the type table. */ XsdAlternative::List alternatives() const; /** * Sets the default @p type definition. */ void setDefaultTypeDefinition(const XsdAlternative::Ptr &type); /** * Returns the default type definition. */ XsdAlternative::Ptr defaultTypeDefinition() const; private: XsdAlternative::List m_alternatives; XsdAlternative::Ptr m_defaultTypeDefinition; }; /** * Describes the value constraint of an element. * * @see Value Constraint Definition */ class ValueConstraint : public QSharedData { public: typedef QExplicitlySharedDataPointer Ptr; /** * Describes the value constraint of an element. */ enum Variety { Default, ///< The element has a default value set. Fixed ///< The element has a fixed value set. }; /** * Sets the @p variety of the element value constraint. */ void setVariety(Variety variety); /** * Returns the variety of the element value constraint. */ Variety variety() const; /** * Sets the @p value of the constraint. */ void setValue(const QString &value); /** * Returns the value of the constraint. */ QString value() const; /** * Sets the lexical @p form of the constraint. */ void setLexicalForm(const QString &form); /** * Returns the lexical form of the constraint. */ QString lexicalForm() const; private: Variety m_variety; QString m_value; QString m_lexicalForm; }; /** * Creates a new element object. */ XsdElement(); /** * Always returns @c true, used to avoid dynamic casts. */ virtual bool isElement() const; /** * Sets the @p type of the element. * * @see Type Definition */ void setType(const SchemaType::Ptr &type); /** * Returns the type of the element. */ SchemaType::Ptr type() const; /** * Sets the @p scope of the element. * * @see Scope Definition */ void setScope(const Scope::Ptr &scope); /** * Returns the scope of the element. */ Scope::Ptr scope() const; /** * Sets the value @p constraint of the element. * * @see Value Constraint Definition */ void setValueConstraint(const ValueConstraint::Ptr &constraint); /** * Returns the value constraint of the element. */ ValueConstraint::Ptr valueConstraint() const; /** * Sets the type table of the element. * * @see Type Table Definition */ void setTypeTable(const TypeTable::Ptr &table); /** * Returns the type table of the element. */ TypeTable::Ptr typeTable() const; /** * Sets whether the element is @p abstract. * * @see Abstract Definition */ void setIsAbstract(bool abstract); /** * Returns whether the element is abstract. */ bool isAbstract() const; /** * Sets whether the element is @p nillable. * * @see Nillable Definition */ void setIsNillable(bool nillable); /** * Returns whether the element is nillable. */ bool isNillable() const; /** * Sets the disallowed @p substitutions of the element. * * Only ExtensionConstraint, RestrictionConstraint and SubstitutionConstraint are allowed. * * @see Disallowed Substitutions Definition */ void setDisallowedSubstitutions(const BlockingConstraints &substitutions); /** * Returns the disallowed substitutions of the element. */ BlockingConstraints disallowedSubstitutions() const; /** * Sets the substitution group @p exclusions of the element. * * Only SchemaType::ExtensionConstraint and SchemaType::RestrictionConstraint are allowed. * * @see Substitution Group Exclusions Definition */ void setSubstitutionGroupExclusions(const SchemaType::DerivationConstraints &exclusions); /** * Returns the substitution group exclusions of the element. */ SchemaType::DerivationConstraints substitutionGroupExclusions() const; /** * Sets the identity @p constraints of the element. * * @see Identity Constraint Definition */ void setIdentityConstraints(const XsdIdentityConstraint::List &constraints); /** * Adds a new identity @p constraint to the element. */ void addIdentityConstraint(const XsdIdentityConstraint::Ptr &constraint); /** * Returns a list of all identity constraints of the element. */ XsdIdentityConstraint::List identityConstraints() const; /** * Sets the substitution group @p affiliations of the element. * * @see Substitution Group Affiliations */ void setSubstitutionGroupAffiliations(const XsdElement::List &affiliations); /** * Returns the substitution group affiliations of the element. */ XsdElement::List substitutionGroupAffiliations() const; /** * Adds a substitution group to the element. */ void addSubstitutionGroup(const XsdElement::Ptr &elements); /** * Returns the substitution groups of the element. */ XsdElement::List substitutionGroups() const; private: SchemaType::Ptr m_type; Scope::Ptr m_scope; ValueConstraint::Ptr m_valueConstraint; TypeTable::Ptr m_typeTable; bool m_isAbstract; bool m_isNillable; BlockingConstraints m_disallowedSubstitutions; SchemaType::DerivationConstraints m_substitutionGroupExclusions; XsdIdentityConstraint::List m_identityConstraints; XsdElement::List m_substitutionGroupAffiliations; QSet m_substitutionGroups; }; } QT_END_NAMESPACE #endif