src/xmlpatterns/schema/qxsdschemaparsercontext.cpp
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 #include "qxsdschemaparsercontext_p.h"
       
    43 
       
    44 QT_BEGIN_NAMESPACE
       
    45 
       
    46 using namespace QPatternist;
       
    47 
       
    48 XsdSchemaParserContext::XsdSchemaParserContext(const NamePool::Ptr &namePool, const XsdSchemaContext::Ptr &context)
       
    49     : m_namePool(namePool)
       
    50     , m_schema(new XsdSchema(m_namePool))
       
    51     , m_checker(new XsdSchemaChecker(context, this))
       
    52     , m_resolver(new XsdSchemaResolver(context, this))
       
    53     , m_elementDescriptions(setupElementDescriptions())
       
    54 {
       
    55 }
       
    56 
       
    57 NamePool::Ptr XsdSchemaParserContext::namePool() const
       
    58 {
       
    59     return m_namePool;
       
    60 }
       
    61 
       
    62 XsdSchemaResolver::Ptr XsdSchemaParserContext::resolver() const
       
    63 {
       
    64     return m_resolver;
       
    65 }
       
    66 
       
    67 XsdSchemaChecker::Ptr XsdSchemaParserContext::checker() const
       
    68 {
       
    69     return m_checker;
       
    70 }
       
    71 
       
    72 XsdSchema::Ptr XsdSchemaParserContext::schema() const
       
    73 {
       
    74     return m_schema;
       
    75 }
       
    76 
       
    77 ElementDescription<XsdSchemaToken, XsdTagScope::Type>::Hash XsdSchemaParserContext::elementDescriptions() const
       
    78 {
       
    79     return m_elementDescriptions;
       
    80 }
       
    81 
       
    82 QXmlName XsdSchemaParserContext::createAnonymousName(const QString &targetNamespace) const
       
    83 {
       
    84     m_anonymousNameCounter.ref();
       
    85 
       
    86     const QString name = QString::fromLatin1("__AnonymousClass_%1").arg((int)m_anonymousNameCounter);
       
    87 
       
    88     return m_namePool->allocateQName(targetNamespace, name);
       
    89 }
       
    90 
       
    91 ElementDescription<XsdSchemaToken, XsdTagScope::Type>::Hash  XsdSchemaParserContext::setupElementDescriptions()
       
    92 {
       
    93     enum
       
    94     {
       
    95         ReservedForElements = 60
       
    96     };
       
    97 
       
    98     ElementDescription<XsdSchemaToken, XsdTagScope::Type>::Hash elementDescriptions;
       
    99     elementDescriptions.reserve(ReservedForElements);
       
   100 
       
   101     {
       
   102         ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::Schema];
       
   103         description.optionalAttributes.reserve(10);
       
   104         //description.tagToken = XsdSchemaToken::Schema;
       
   105         description.optionalAttributes.insert(XsdSchemaToken::AttributeFormDefault);
       
   106         description.optionalAttributes.insert(XsdSchemaToken::BlockDefault);
       
   107         description.optionalAttributes.insert(XsdSchemaToken::DefaultAttributes);
       
   108         description.optionalAttributes.insert(XsdSchemaToken::XPathDefaultNamespace);
       
   109         description.optionalAttributes.insert(XsdSchemaToken::ElementFormDefault);
       
   110         description.optionalAttributes.insert(XsdSchemaToken::FinalDefault);
       
   111         description.optionalAttributes.insert(XsdSchemaToken::Id);
       
   112         description.optionalAttributes.insert(XsdSchemaToken::TargetNamespace);
       
   113         description.optionalAttributes.insert(XsdSchemaToken::Version);
       
   114         description.optionalAttributes.insert(XsdSchemaToken::XmlLanguage);
       
   115     }
       
   116 
       
   117     {
       
   118         ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::Include];
       
   119         //description.tagToken = XsdSchemaToken::Include;
       
   120         description.requiredAttributes.insert(XsdSchemaToken::SchemaLocation);
       
   121         description.optionalAttributes.insert(XsdSchemaToken::Id);
       
   122     }
       
   123 
       
   124     {
       
   125         ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::Import];
       
   126         //description.tagToken = XsdSchemaToken::Import;
       
   127         description.optionalAttributes.insert(XsdSchemaToken::Id);
       
   128         description.optionalAttributes.insert(XsdSchemaToken::Namespace);
       
   129         description.optionalAttributes.insert(XsdSchemaToken::SchemaLocation);
       
   130     }
       
   131 
       
   132     {
       
   133         ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::Redefine];
       
   134         //description.tagToken = XsdSchemaToken::Redefine;
       
   135         description.optionalAttributes.insert(XsdSchemaToken::Id);
       
   136         description.requiredAttributes.insert(XsdSchemaToken::SchemaLocation);
       
   137     }
       
   138 
       
   139     {
       
   140         ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::Override];
       
   141         //description.tagToken = XsdSchemaToken::Override;
       
   142         description.optionalAttributes.insert(XsdSchemaToken::Id);
       
   143         description.requiredAttributes.insert(XsdSchemaToken::SchemaLocation);
       
   144     }
       
   145 
       
   146     {
       
   147         ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::Annotation];
       
   148         //description.tagToken = XsdSchemaToken::Annotation;
       
   149         description.optionalAttributes.insert(XsdSchemaToken::Id);
       
   150     }
       
   151 
       
   152     {
       
   153         ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::AppInfo];
       
   154         //description.tagToken = XsdSchemaToken::Appinfo;
       
   155         description.optionalAttributes.insert(XsdSchemaToken::Source);
       
   156     }
       
   157 
       
   158     {
       
   159         ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::Documentation];
       
   160         //description.tagToken = XsdSchemaToken::Documentation;
       
   161         description.optionalAttributes.insert(XsdSchemaToken::Source);
       
   162     }
       
   163 
       
   164     {
       
   165         ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::GlobalSimpleType];
       
   166         //description.tagToken = XsdSchemaToken::SimpleType;
       
   167         description.optionalAttributes.insert(XsdSchemaToken::Final);
       
   168         description.optionalAttributes.insert(XsdSchemaToken::Id);
       
   169         description.requiredAttributes.insert(XsdSchemaToken::Name);
       
   170     }
       
   171 
       
   172     {
       
   173         ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::LocalSimpleType];
       
   174         //description.tagToken = XsdSchemaToken::SimpleType;
       
   175         description.optionalAttributes.insert(XsdSchemaToken::Id);
       
   176     }
       
   177 
       
   178     {
       
   179         ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::SimpleRestriction];
       
   180         //description.tagToken = XsdSchemaToken::Restriction;
       
   181         description.optionalAttributes.insert(XsdSchemaToken::Base);
       
   182         description.optionalAttributes.insert(XsdSchemaToken::Id);
       
   183     }
       
   184 
       
   185     {
       
   186         ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::List];
       
   187         //description.tagToken = XsdSchemaToken::List;
       
   188         description.optionalAttributes.insert(XsdSchemaToken::Id);
       
   189         description.optionalAttributes.insert(XsdSchemaToken::ItemType);
       
   190     }
       
   191 
       
   192     {
       
   193         ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::Union];
       
   194         //description.tagToken = XsdSchemaToken::Union;
       
   195         description.optionalAttributes.insert(XsdSchemaToken::Id);
       
   196         description.optionalAttributes.insert(XsdSchemaToken::MemberTypes);
       
   197     }
       
   198 
       
   199     {
       
   200         ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::MinExclusiveFacet];
       
   201         //description.tagToken = XsdSchemaToken::MinExclusive;
       
   202         description.optionalAttributes.insert(XsdSchemaToken::Fixed);
       
   203         description.optionalAttributes.insert(XsdSchemaToken::Id);
       
   204         description.requiredAttributes.insert(XsdSchemaToken::Value);
       
   205     }
       
   206 
       
   207     {
       
   208         ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::MinInclusiveFacet];
       
   209         //description.tagToken = XsdSchemaToken::MinInclusive;
       
   210         description.optionalAttributes.insert(XsdSchemaToken::Fixed);
       
   211         description.optionalAttributes.insert(XsdSchemaToken::Id);
       
   212         description.requiredAttributes.insert(XsdSchemaToken::Value);
       
   213     }
       
   214 
       
   215     {
       
   216         ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::MaxExclusiveFacet];
       
   217         //description.tagToken = XsdSchemaToken::MaxExclusive;
       
   218         description.optionalAttributes.insert(XsdSchemaToken::Fixed);
       
   219         description.optionalAttributes.insert(XsdSchemaToken::Id);
       
   220         description.requiredAttributes.insert(XsdSchemaToken::Value);
       
   221     }
       
   222 
       
   223     {
       
   224         ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::MaxInclusiveFacet];
       
   225         //description.tagToken = XsdSchemaToken::MaxInclusive;
       
   226         description.optionalAttributes.insert(XsdSchemaToken::Fixed);
       
   227         description.optionalAttributes.insert(XsdSchemaToken::Id);
       
   228         description.requiredAttributes.insert(XsdSchemaToken::Value);
       
   229     }
       
   230 
       
   231     {
       
   232         ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::TotalDigitsFacet];
       
   233         //description.tagToken = XsdSchemaToken::TotalDigits;
       
   234         description.optionalAttributes.insert(XsdSchemaToken::Fixed);
       
   235         description.optionalAttributes.insert(XsdSchemaToken::Id);
       
   236         description.requiredAttributes.insert(XsdSchemaToken::Value);
       
   237     }
       
   238 
       
   239     {
       
   240         ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::FractionDigitsFacet];
       
   241         //description.tagToken = XsdSchemaToken::FractionDigits;
       
   242         description.optionalAttributes.insert(XsdSchemaToken::Fixed);
       
   243         description.optionalAttributes.insert(XsdSchemaToken::Id);
       
   244         description.requiredAttributes.insert(XsdSchemaToken::Value);
       
   245     }
       
   246 
       
   247     {
       
   248         ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::LengthFacet];
       
   249         //description.tagToken = XsdSchemaToken::Length;
       
   250         description.optionalAttributes.insert(XsdSchemaToken::Fixed);
       
   251         description.optionalAttributes.insert(XsdSchemaToken::Id);
       
   252         description.requiredAttributes.insert(XsdSchemaToken::Value);
       
   253     }
       
   254 
       
   255     {
       
   256         ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::MinLengthFacet];
       
   257         //description.tagToken = XsdSchemaToken::MinLength;
       
   258         description.optionalAttributes.insert(XsdSchemaToken::Fixed);
       
   259         description.optionalAttributes.insert(XsdSchemaToken::Id);
       
   260         description.requiredAttributes.insert(XsdSchemaToken::Value);
       
   261     }
       
   262 
       
   263     {
       
   264         ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::MaxLengthFacet];
       
   265         //description.tagToken = XsdSchemaToken::MaxLength;
       
   266         description.optionalAttributes.insert(XsdSchemaToken::Fixed);
       
   267         description.optionalAttributes.insert(XsdSchemaToken::Id);
       
   268         description.requiredAttributes.insert(XsdSchemaToken::Value);
       
   269     }
       
   270 
       
   271     {
       
   272         ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::EnumerationFacet];
       
   273         //description.tagToken = XsdSchemaToken::Enumeration;
       
   274         description.optionalAttributes.insert(XsdSchemaToken::Id);
       
   275         description.requiredAttributes.insert(XsdSchemaToken::Value);
       
   276     }
       
   277 
       
   278     {
       
   279         ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::WhiteSpaceFacet];
       
   280         //description.tagToken = XsdSchemaToken::WhiteSpace;
       
   281         description.optionalAttributes.insert(XsdSchemaToken::Fixed);
       
   282         description.optionalAttributes.insert(XsdSchemaToken::Id);
       
   283         description.requiredAttributes.insert(XsdSchemaToken::Value);
       
   284     }
       
   285 
       
   286     {
       
   287         ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::PatternFacet];
       
   288         //description.tagToken = XsdSchemaToken::Pattern;
       
   289         description.optionalAttributes.insert(XsdSchemaToken::Id);
       
   290         description.requiredAttributes.insert(XsdSchemaToken::Value);
       
   291     }
       
   292 
       
   293     {
       
   294         ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::GlobalComplexType];
       
   295         description.optionalAttributes.reserve(7);
       
   296         //description.tagToken = XsdSchemaToken::ComplexType;
       
   297         description.optionalAttributes.insert(XsdSchemaToken::Abstract);
       
   298         description.optionalAttributes.insert(XsdSchemaToken::Block);
       
   299         description.optionalAttributes.insert(XsdSchemaToken::DefaultAttributesApply);
       
   300         description.optionalAttributes.insert(XsdSchemaToken::Final);
       
   301         description.optionalAttributes.insert(XsdSchemaToken::Id);
       
   302         description.optionalAttributes.insert(XsdSchemaToken::Mixed);
       
   303         description.requiredAttributes.insert(XsdSchemaToken::Name);
       
   304     }
       
   305 
       
   306     {
       
   307         ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::LocalComplexType];
       
   308         //description.tagToken = XsdSchemaToken::ComplexType;
       
   309         description.optionalAttributes.insert(XsdSchemaToken::Id);
       
   310         description.optionalAttributes.insert(XsdSchemaToken::Mixed);
       
   311     }
       
   312 
       
   313     {
       
   314         ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::SimpleContent];
       
   315         //description.tagToken = XsdSchemaToken::SimpleContent;
       
   316         description.optionalAttributes.insert(XsdSchemaToken::Id);
       
   317     }
       
   318 
       
   319     {
       
   320         ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::SimpleContentRestriction];
       
   321         //description.tagToken = XsdSchemaToken::Restriction;
       
   322         description.requiredAttributes.insert(XsdSchemaToken::Base);
       
   323         description.optionalAttributes.insert(XsdSchemaToken::Id);
       
   324     }
       
   325 
       
   326     {
       
   327         ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::SimpleContentExtension];
       
   328         //description.tagToken = XsdSchemaToken::Extension;
       
   329         description.requiredAttributes.insert(XsdSchemaToken::Base);
       
   330         description.optionalAttributes.insert(XsdSchemaToken::Id);
       
   331     }
       
   332 
       
   333     {
       
   334         ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::ComplexContent];
       
   335         //description.tagToken = XsdSchemaToken::ComplexContent;
       
   336         description.optionalAttributes.insert(XsdSchemaToken::Id);
       
   337         description.optionalAttributes.insert(XsdSchemaToken::Mixed);
       
   338     }
       
   339 
       
   340     {
       
   341         ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::ComplexContentRestriction];
       
   342         //description.tagToken = XsdSchemaToken::Restriction;
       
   343         description.requiredAttributes.insert(XsdSchemaToken::Base);
       
   344         description.optionalAttributes.insert(XsdSchemaToken::Id);
       
   345     }
       
   346 
       
   347     {
       
   348         ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::ComplexContentExtension];
       
   349         //description.tagToken = XsdSchemaToken::Extension;
       
   350         description.requiredAttributes.insert(XsdSchemaToken::Base);
       
   351         description.optionalAttributes.insert(XsdSchemaToken::Id);
       
   352     }
       
   353 
       
   354     {
       
   355         ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::NamedGroup];
       
   356         //description.tagToken = XsdSchemaToken::Group;
       
   357         description.optionalAttributes.insert(XsdSchemaToken::Id);
       
   358         description.requiredAttributes.insert(XsdSchemaToken::Name);
       
   359     }
       
   360 
       
   361     {
       
   362         ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::ReferredGroup];
       
   363         description.optionalAttributes.reserve(4);
       
   364         //description.tagToken = XsdSchemaToken::Group;
       
   365         description.optionalAttributes.insert(XsdSchemaToken::Id);
       
   366         description.optionalAttributes.insert(XsdSchemaToken::MaxOccurs);
       
   367         description.optionalAttributes.insert(XsdSchemaToken::MinOccurs);
       
   368         description.requiredAttributes.insert(XsdSchemaToken::Ref);
       
   369     }
       
   370 
       
   371     {
       
   372         ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::All];
       
   373         //description.tagToken = XsdSchemaToken::All;
       
   374         description.optionalAttributes.insert(XsdSchemaToken::Id);
       
   375     }
       
   376 
       
   377     {
       
   378         ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::LocalAll];
       
   379         //description.tagToken = XsdSchemaToken::All;
       
   380         description.optionalAttributes.insert(XsdSchemaToken::Id);
       
   381         description.optionalAttributes.insert(XsdSchemaToken::MaxOccurs);
       
   382         description.optionalAttributes.insert(XsdSchemaToken::MinOccurs);
       
   383     }
       
   384 
       
   385     {
       
   386         ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::Choice];
       
   387         //description.tagToken = XsdSchemaToken::Choice;
       
   388         description.optionalAttributes.insert(XsdSchemaToken::Id);
       
   389     }
       
   390 
       
   391     {
       
   392         ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::LocalChoice];
       
   393         //description.tagToken = XsdSchemaToken::Choice;
       
   394         description.optionalAttributes.insert(XsdSchemaToken::Id);
       
   395         description.optionalAttributes.insert(XsdSchemaToken::MaxOccurs);
       
   396         description.optionalAttributes.insert(XsdSchemaToken::MinOccurs);
       
   397     }
       
   398 
       
   399     {
       
   400         ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::Sequence];
       
   401         //description.tagToken = XsdSchemaToken::Sequence;
       
   402         description.optionalAttributes.insert(XsdSchemaToken::Id);
       
   403     }
       
   404 
       
   405     {
       
   406         ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::LocalSequence];
       
   407         //description.tagToken = XsdSchemaToken::Sequence;
       
   408         description.optionalAttributes.insert(XsdSchemaToken::Id);
       
   409         description.optionalAttributes.insert(XsdSchemaToken::MaxOccurs);
       
   410         description.optionalAttributes.insert(XsdSchemaToken::MinOccurs);
       
   411     }
       
   412 
       
   413     {
       
   414         ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::GlobalAttribute];
       
   415         description.optionalAttributes.reserve(5);
       
   416         //description.tagToken = XsdSchemaToken::Attribute;
       
   417         description.optionalAttributes.insert(XsdSchemaToken::Default);
       
   418         description.optionalAttributes.insert(XsdSchemaToken::Fixed);
       
   419         description.optionalAttributes.insert(XsdSchemaToken::Id);
       
   420         description.requiredAttributes.insert(XsdSchemaToken::Name);
       
   421         description.optionalAttributes.insert(XsdSchemaToken::Type);
       
   422     }
       
   423 
       
   424     {
       
   425         ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::LocalAttribute];
       
   426         description.optionalAttributes.reserve(8);
       
   427         //description.tagToken = XsdSchemaToken::Attribute;
       
   428         description.optionalAttributes.insert(XsdSchemaToken::Default);
       
   429         description.optionalAttributes.insert(XsdSchemaToken::Fixed);
       
   430         description.optionalAttributes.insert(XsdSchemaToken::Form);
       
   431         description.optionalAttributes.insert(XsdSchemaToken::Id);
       
   432         description.optionalAttributes.insert(XsdSchemaToken::Name);
       
   433         description.optionalAttributes.insert(XsdSchemaToken::Ref);
       
   434         description.optionalAttributes.insert(XsdSchemaToken::Type);
       
   435         description.optionalAttributes.insert(XsdSchemaToken::Use);
       
   436     }
       
   437 
       
   438     {
       
   439         ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::NamedAttributeGroup];
       
   440         //description.tagToken = XsdSchemaToken::AttributeGroup;
       
   441         description.optionalAttributes.insert(XsdSchemaToken::Id);
       
   442         description.requiredAttributes.insert(XsdSchemaToken::Name);
       
   443     }
       
   444 
       
   445     {
       
   446         ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::ReferredAttributeGroup];
       
   447         //description.tagToken = XsdSchemaToken::AttributeGroup;
       
   448         description.optionalAttributes.insert(XsdSchemaToken::Id);
       
   449         description.requiredAttributes.insert(XsdSchemaToken::Ref);
       
   450     }
       
   451 
       
   452     {
       
   453         ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::LocalElement];
       
   454         description.optionalAttributes.reserve(11);
       
   455         //description.tagToken = XsdSchemaToken::Element;
       
   456         description.optionalAttributes.insert(XsdSchemaToken::Block);
       
   457         description.optionalAttributes.insert(XsdSchemaToken::Default);
       
   458         description.optionalAttributes.insert(XsdSchemaToken::Fixed);
       
   459         description.optionalAttributes.insert(XsdSchemaToken::Form);
       
   460         description.optionalAttributes.insert(XsdSchemaToken::Id);
       
   461         description.optionalAttributes.insert(XsdSchemaToken::MinOccurs);
       
   462         description.optionalAttributes.insert(XsdSchemaToken::MaxOccurs);
       
   463         description.optionalAttributes.insert(XsdSchemaToken::Name);
       
   464         description.optionalAttributes.insert(XsdSchemaToken::Nillable);
       
   465         description.optionalAttributes.insert(XsdSchemaToken::Ref);
       
   466         description.optionalAttributes.insert(XsdSchemaToken::Type);
       
   467     }
       
   468 
       
   469     {
       
   470         ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::GlobalElement];
       
   471         description.optionalAttributes.reserve(10);
       
   472         //description.tagToken = XsdSchemaToken::Element;
       
   473         description.optionalAttributes.insert(XsdSchemaToken::Abstract);
       
   474         description.optionalAttributes.insert(XsdSchemaToken::Block);
       
   475         description.optionalAttributes.insert(XsdSchemaToken::Default);
       
   476         description.optionalAttributes.insert(XsdSchemaToken::Final);
       
   477         description.optionalAttributes.insert(XsdSchemaToken::Fixed);
       
   478         description.optionalAttributes.insert(XsdSchemaToken::Id);
       
   479         description.requiredAttributes.insert(XsdSchemaToken::Name);
       
   480         description.optionalAttributes.insert(XsdSchemaToken::Nillable);
       
   481         description.optionalAttributes.insert(XsdSchemaToken::SubstitutionGroup);
       
   482         description.optionalAttributes.insert(XsdSchemaToken::Type);
       
   483     }
       
   484 
       
   485     {
       
   486         ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::Unique];
       
   487         //description.tagToken = XsdSchemaToken::Unique;
       
   488         description.optionalAttributes.insert(XsdSchemaToken::Id);
       
   489         description.requiredAttributes.insert(XsdSchemaToken::Name);
       
   490     }
       
   491 
       
   492     {
       
   493         ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::Key];
       
   494         //description.tagToken = XsdSchemaToken::Key;
       
   495         description.optionalAttributes.insert(XsdSchemaToken::Id);
       
   496         description.requiredAttributes.insert(XsdSchemaToken::Name);
       
   497     }
       
   498 
       
   499     {
       
   500         ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::KeyRef];
       
   501         //description.tagToken = XsdSchemaToken::Keyref;
       
   502         description.optionalAttributes.insert(XsdSchemaToken::Id);
       
   503         description.requiredAttributes.insert(XsdSchemaToken::Name);
       
   504         description.requiredAttributes.insert(XsdSchemaToken::Refer);
       
   505     }
       
   506 
       
   507     {
       
   508         ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::Selector];
       
   509         //description.tagToken = XsdSchemaToken::Selector;
       
   510         description.optionalAttributes.insert(XsdSchemaToken::Id);
       
   511         description.requiredAttributes.insert(XsdSchemaToken::Xpath);
       
   512         description.optionalAttributes.insert(XsdSchemaToken::XPathDefaultNamespace);
       
   513     }
       
   514 
       
   515     {
       
   516         ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::Field];
       
   517         //description.tagToken = XsdSchemaToken::Field;
       
   518         description.optionalAttributes.insert(XsdSchemaToken::Id);
       
   519         description.requiredAttributes.insert(XsdSchemaToken::Xpath);
       
   520         description.optionalAttributes.insert(XsdSchemaToken::XPathDefaultNamespace);
       
   521     }
       
   522 
       
   523     {
       
   524         ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::Notation];
       
   525         description.optionalAttributes.reserve(4);
       
   526         //description.tagToken = XsdSchemaToken::Notation;
       
   527         description.optionalAttributes.insert(XsdSchemaToken::Id);
       
   528         description.requiredAttributes.insert(XsdSchemaToken::Name);
       
   529         description.optionalAttributes.insert(XsdSchemaToken::Public);
       
   530         description.optionalAttributes.insert(XsdSchemaToken::System);
       
   531     }
       
   532 
       
   533     {
       
   534         ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::Any];
       
   535         description.optionalAttributes.reserve(7);
       
   536         //description.tagToken = XsdSchemaToken::Any;
       
   537         description.optionalAttributes.insert(XsdSchemaToken::Id);
       
   538         description.optionalAttributes.insert(XsdSchemaToken::MaxOccurs);
       
   539         description.optionalAttributes.insert(XsdSchemaToken::MinOccurs);
       
   540         description.optionalAttributes.insert(XsdSchemaToken::Namespace);
       
   541         description.optionalAttributes.insert(XsdSchemaToken::NotNamespace);
       
   542         description.optionalAttributes.insert(XsdSchemaToken::NotQName);
       
   543         description.optionalAttributes.insert(XsdSchemaToken::ProcessContents);
       
   544     }
       
   545 
       
   546     {
       
   547         ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::AnyAttribute];
       
   548         description.optionalAttributes.reserve(5);
       
   549         //description.tagToken = XsdSchemaToken::AnyAttribute;
       
   550         description.optionalAttributes.insert(XsdSchemaToken::Id);
       
   551         description.optionalAttributes.insert(XsdSchemaToken::Namespace);
       
   552         description.optionalAttributes.insert(XsdSchemaToken::NotNamespace);
       
   553         description.optionalAttributes.insert(XsdSchemaToken::NotQName);
       
   554         description.optionalAttributes.insert(XsdSchemaToken::ProcessContents);
       
   555     }
       
   556 
       
   557     {
       
   558         ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::Alternative];
       
   559         //description.tagToken = XsdSchemaToken::Alternative;
       
   560         description.optionalAttributes.insert(XsdSchemaToken::Id);
       
   561         description.optionalAttributes.insert(XsdSchemaToken::Test);
       
   562         description.optionalAttributes.insert(XsdSchemaToken::Type);
       
   563         description.optionalAttributes.insert(XsdSchemaToken::XPathDefaultNamespace);
       
   564     }
       
   565 
       
   566     {
       
   567         ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::OpenContent];
       
   568         //description.tagToken = XsdSchemaToken::OpenContent;
       
   569         description.optionalAttributes.insert(XsdSchemaToken::Id);
       
   570         description.optionalAttributes.insert(XsdSchemaToken::Mode);
       
   571     }
       
   572 
       
   573     {
       
   574         ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::DefaultOpenContent];
       
   575         //description.tagToken = XsdSchemaToken::DefaultOpenContent;
       
   576         description.optionalAttributes.insert(XsdSchemaToken::AppliesToEmpty);
       
   577         description.optionalAttributes.insert(XsdSchemaToken::Id);
       
   578         description.optionalAttributes.insert(XsdSchemaToken::Mode);
       
   579     }
       
   580 
       
   581     {
       
   582         ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::Assert];
       
   583         //description.tagToken = XsdSchemaToken::Assert;
       
   584         description.optionalAttributes.insert(XsdSchemaToken::Id);
       
   585         description.requiredAttributes.insert(XsdSchemaToken::Test);
       
   586         description.optionalAttributes.insert(XsdSchemaToken::XPathDefaultNamespace);
       
   587     }
       
   588 
       
   589     {
       
   590         ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::Assertion];
       
   591         //description.tagToken = XsdSchemaToken::Assertion;
       
   592         description.optionalAttributes.insert(XsdSchemaToken::Id);
       
   593         description.requiredAttributes.insert(XsdSchemaToken::Test);
       
   594         description.optionalAttributes.insert(XsdSchemaToken::XPathDefaultNamespace);
       
   595     }
       
   596 
       
   597     Q_ASSERT_X(elementDescriptions.count() == ReservedForElements, Q_FUNC_INFO,
       
   598                qPrintable(QString::fromLatin1("Expected is %1, actual is %2.").arg(ReservedForElements).arg(elementDescriptions.count())));
       
   599 
       
   600     return elementDescriptions;
       
   601 }
       
   602 
       
   603 QT_END_NAMESPACE