src/xmlpatterns/schema/qxsdschema_p.h
changeset 0 1918ee327afb
equal deleted inserted replaced
-1:000000000000 0:1918ee327afb
       
     1 /****************************************************************************
       
     2 **
       
     3 ** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies).
       
     4 ** All rights reserved.
       
     5 ** Contact: Nokia Corporation (qt-info@nokia.com)
       
     6 **
       
     7 ** This file is part of the QtXmlPatterns module of the Qt Toolkit.
       
     8 **
       
     9 ** $QT_BEGIN_LICENSE:LGPL$
       
    10 ** No Commercial Usage
       
    11 ** This file contains pre-release code and may not be distributed.
       
    12 ** You may use this file in accordance with the terms and conditions
       
    13 ** contained in the Technology Preview License Agreement accompanying
       
    14 ** this package.
       
    15 **
       
    16 ** GNU Lesser General Public License Usage
       
    17 ** Alternatively, this file may be used under the terms of the GNU Lesser
       
    18 ** General Public License version 2.1 as published by the Free Software
       
    19 ** Foundation and appearing in the file LICENSE.LGPL included in the
       
    20 ** packaging of this file.  Please review the following information to
       
    21 ** ensure the GNU Lesser General Public License version 2.1 requirements
       
    22 ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
       
    23 **
       
    24 ** In addition, as a special exception, Nokia gives you certain additional
       
    25 ** rights.  These rights are described in the Nokia Qt LGPL Exception
       
    26 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
       
    27 **
       
    28 ** If you have questions regarding the use of this file, please contact
       
    29 ** Nokia at qt-info@nokia.com.
       
    30 **
       
    31 **
       
    32 **
       
    33 **
       
    34 **
       
    35 **
       
    36 **
       
    37 **
       
    38 ** $QT_END_LICENSE$
       
    39 **
       
    40 ****************************************************************************/
       
    41 
       
    42 //
       
    43 //  W A R N I N G
       
    44 //  -------------
       
    45 //
       
    46 // This file is not part of the Qt API.  It exists purely as an
       
    47 // implementation detail.  This header file may change from version to
       
    48 // version without notice, or even be removed.
       
    49 //
       
    50 // We mean it.
       
    51 
       
    52 #ifndef Patternist_XsdSchema_H
       
    53 #define Patternist_XsdSchema_H
       
    54 
       
    55 #include "qschematype_p.h"
       
    56 #include "qxsdannotated_p.h"
       
    57 #include "qxsdattribute_p.h"
       
    58 #include "qxsdattributegroup_p.h"
       
    59 #include "qxsdcomplextype_p.h"
       
    60 #include "qxsdelement_p.h"
       
    61 #include "qxsdidentityconstraint_p.h"
       
    62 #include "qxsdmodelgroup_p.h"
       
    63 #include "qxsdnotation_p.h"
       
    64 #include "qxsdsimpletype_p.h"
       
    65 
       
    66 #include <QtCore/QHash>
       
    67 #include <QtCore/QReadWriteLock>
       
    68 
       
    69 /**
       
    70  * @defgroup Patternist_schema XML Schema Processing
       
    71  */
       
    72 
       
    73 QT_BEGIN_HEADER
       
    74 
       
    75 QT_BEGIN_NAMESPACE
       
    76 
       
    77 namespace QPatternist
       
    78 {
       
    79     /**
       
    80      * @short Represents a XSD schema object.
       
    81      *
       
    82      * The class provides access to all components of a parsed XSD.
       
    83      *
       
    84      * @note In the documentation of this class objects, which are direct
       
    85      *       children of the <em>schema</em> object, are called top-level objects.
       
    86      *
       
    87      * @see <a href="http://www.w3.org/Submission/2004/SUBM-xmlschema-api-20040309/xml-schema-api.html#Interface-XSModel">XML Schema API reference</a>
       
    88      * @ingroup Patternist_schema
       
    89      * @author Tobias Koenig <tobias.koenig@nokia.com>
       
    90      */
       
    91     class XsdSchema : public QSharedData, public XsdAnnotated
       
    92     {
       
    93         public:
       
    94             typedef QExplicitlySharedDataPointer<XsdSchema> Ptr;
       
    95             typedef QList<XsdSchema::Ptr> List;
       
    96 
       
    97             /**
       
    98              * Creates a new schema object.
       
    99              *
       
   100              * @param namePool The namepool that should be used for names of
       
   101              *                 all schema components.
       
   102              */
       
   103             XsdSchema(const NamePool::Ptr &namePool);
       
   104 
       
   105             /**
       
   106              * Destroys the schema object.
       
   107              */
       
   108             ~XsdSchema();
       
   109 
       
   110             /**
       
   111              * Returns the namepool that is used for names of
       
   112              * all schema components.
       
   113              */
       
   114             NamePool::Ptr namePool() const;
       
   115 
       
   116             /**
       
   117              * Sets the @p targetNamespace of the schema.
       
   118              */
       
   119             void setTargetNamespace(const QString &targetNamespace);
       
   120 
       
   121             /**
       
   122              * Returns the target namespace of the schema.
       
   123              */
       
   124             QString targetNamespace() const;
       
   125 
       
   126             /**
       
   127              * Adds a new top-level @p element to the schema.
       
   128              *
       
   129              * @param element The new element.
       
   130              * @see <a href="http://www.w3.org/TR/xmlschema11-1/#declare-element">Element Declaration</a>
       
   131              */
       
   132             void addElement(const XsdElement::Ptr &element);
       
   133 
       
   134             /**
       
   135              * Returns the top-level element of the schema with
       
   136              * the given @p name or an empty pointer if none exist.
       
   137              */
       
   138             XsdElement::Ptr element(const QXmlName &name) const;
       
   139 
       
   140             /**
       
   141              * Returns the list of all top-level elements.
       
   142              */
       
   143             XsdElement::List elements() const;
       
   144 
       
   145             /**
       
   146              * Adds a new top-level @p attribute to the schema.
       
   147              *
       
   148              * @param attribute The new attribute.
       
   149              * @see <a href="http://www.w3.org/TR/xmlschema11-1/#declare-attribute">Attribute Declaration</a>
       
   150              */
       
   151             void addAttribute(const XsdAttribute::Ptr &attribute);
       
   152 
       
   153             /**
       
   154              * Returns the top-level attribute of the schema with
       
   155              * the given @p name or an empty pointer if none exist.
       
   156              */
       
   157             XsdAttribute::Ptr attribute(const QXmlName &name) const;
       
   158 
       
   159             /**
       
   160              * Returns the list of all top-level attributes.
       
   161              */
       
   162             XsdAttribute::List attributes() const;
       
   163 
       
   164             /**
       
   165              * Adds a new top-level @p type to the schema.
       
   166              * That can be a simple or a complex type.
       
   167              *
       
   168              * @param type The new type.
       
   169              * @see <a href="http://www.w3.org/TR/xmlschema11-1/#declare-datatype">Simple Type Declaration</a>
       
   170              * @see <a href="http://www.w3.org/TR/xmlschema11-1/#declare-type">Complex Type Declaration</a>
       
   171              */
       
   172             void addType(const SchemaType::Ptr &type);
       
   173 
       
   174             /**
       
   175              * Returns the top-level type of the schema with
       
   176              * the given @p name or an empty pointer if none exist.
       
   177              */
       
   178             SchemaType::Ptr type(const QXmlName &name) const;
       
   179 
       
   180             /**
       
   181              * Returns the list of all top-level types.
       
   182              */
       
   183             SchemaType::List types() const;
       
   184 
       
   185             /**
       
   186              * Returns the list of all top-level simple types.
       
   187              */
       
   188             XsdSimpleType::List simpleTypes() const;
       
   189 
       
   190             /**
       
   191              * Returns the list of all top-level complex types.
       
   192              */
       
   193             XsdComplexType::List complexTypes() const;
       
   194 
       
   195             /**
       
   196              * Adds an anonymous @p type to the schema.
       
   197              * Anonymous types have no name and are declared
       
   198              * locally inside an element object.
       
   199              *
       
   200              * @param type The new anonymous type.
       
   201              */
       
   202             void addAnonymousType(const SchemaType::Ptr &type);
       
   203 
       
   204             /**
       
   205              * Returns the list of all anonymous types.
       
   206              */
       
   207             SchemaType::List anonymousTypes() const;
       
   208 
       
   209             /**
       
   210              * Adds a new top-level attribute @p group to the schema.
       
   211              *
       
   212              * @param group The new attribute group.
       
   213              * @see <a href="http://www.w3.org/TR/xmlschema11-1/#declare-attributeGroup">Attribute Group Declaration</a>
       
   214              */
       
   215             void addAttributeGroup(const XsdAttributeGroup::Ptr &group);
       
   216 
       
   217             /**
       
   218              * Returns the top-level attribute group of the schema with
       
   219              * the given @p name or an empty pointer if none exist.
       
   220              */
       
   221             XsdAttributeGroup::Ptr attributeGroup(const QXmlName name) const;
       
   222 
       
   223             /**
       
   224              * Returns the list of all top-level attribute groups.
       
   225              */
       
   226             XsdAttributeGroup::List attributeGroups() const;
       
   227 
       
   228             /**
       
   229              * Adds a new top-level element @p group to the schema.
       
   230              *
       
   231              * @param group The new element group.
       
   232              * @see <a href="http://www.w3.org/TR/xmlschema11-1/#declare-namedModelGroup">Element Group Declaration</a>
       
   233              */
       
   234             void addElementGroup(const XsdModelGroup::Ptr &group);
       
   235 
       
   236             /**
       
   237              * Returns the top-level element group of the schema with
       
   238              * the given @p name or an empty pointer if none exist.
       
   239              */
       
   240             XsdModelGroup::Ptr elementGroup(const QXmlName &name) const;
       
   241 
       
   242             /**
       
   243              * Returns the list of all top-level element groups.
       
   244              */
       
   245             XsdModelGroup::List elementGroups() const;
       
   246 
       
   247             /**
       
   248              * Adds a new top-level @p notation to the schema.
       
   249              *
       
   250              * @param notation The new notation.
       
   251              * @see <a href="http://www.w3.org/TR/xmlschema11-1/#declare-notation">Notation Declaration</a>
       
   252              */
       
   253             void addNotation(const XsdNotation::Ptr &notation);
       
   254 
       
   255             /**
       
   256              * Returns the top-level notation of the schema with
       
   257              * the given @p name or an empty pointer if none exist.
       
   258              */
       
   259             XsdNotation::Ptr notation(const QXmlName &name) const;
       
   260 
       
   261             /**
       
   262              * Returns the list of all top-level notations.
       
   263              */
       
   264             XsdNotation::List notations() const;
       
   265 
       
   266             /**
       
   267              * Adds a new identity @p constraint to the schema.
       
   268              */
       
   269             void addIdentityConstraint(const XsdIdentityConstraint::Ptr &constraint);
       
   270 
       
   271             /**
       
   272              * Returns the identity constraint with the given @p name
       
   273              * or an empty pointer if none exist.
       
   274              */
       
   275             XsdIdentityConstraint::Ptr identityConstraint(const QXmlName &name) const;
       
   276 
       
   277             /**
       
   278              * Returns the list of all identity constraints in this schema.
       
   279              */
       
   280             XsdIdentityConstraint::List identityConstraints() const;
       
   281 
       
   282         private:
       
   283             NamePool::Ptr                               m_namePool;
       
   284             QString                                     m_targetNamespace;
       
   285             QHash<QXmlName, XsdElement::Ptr>            m_elements;
       
   286             QHash<QXmlName, XsdAttribute::Ptr>          m_attributes;
       
   287             QHash<QXmlName, SchemaType::Ptr>            m_types;
       
   288             QHash<QXmlName, SchemaType::Ptr>            m_anonymousTypes;
       
   289             QHash<QXmlName, XsdAttributeGroup::Ptr>     m_attributeGroups;
       
   290             QHash<QXmlName, XsdModelGroup::Ptr>         m_elementGroups;
       
   291             QHash<QXmlName, XsdNotation::Ptr>           m_notations;
       
   292             QHash<QXmlName, XsdIdentityConstraint::Ptr> m_identityConstraints;
       
   293             mutable QReadWriteLock                      m_lock;
       
   294     };
       
   295 }
       
   296 
       
   297 QT_END_NAMESPACE
       
   298 
       
   299 QT_END_HEADER
       
   300 
       
   301 #endif