1 /****************************************************************************
2 **
3 ** Copyright (C) 2015 The Qt Company Ltd.
4 ** Contact: http://www.qt.io/licensing/
5 **
6 ** This file is part of the QtXmlPatterns module of the Qt Toolkit.
7 **
8 ** $QT_BEGIN_LICENSE:LGPL$
9 ** Commercial License Usage
10 ** Licensees holding valid commercial Qt licenses may use this file in
11 ** accordance with the commercial license agreement provided with the
12 ** Software or, alternatively, in accordance with the terms contained in
13 ** a written agreement between you and The Qt Company. For licensing terms
14 ** and conditions see http://www.qt.io/terms-conditions. For further
15 ** information use the contact form at http://www.qt.io/contact-us.
16 **
17 ** GNU Lesser General Public License Usage
18 ** Alternatively, this file may be used under the terms of the GNU Lesser
19 ** General Public License version 2.1 or version 3 as published by the Free
20 ** Software Foundation and appearing in the file LICENSE.LGPLv21 and
21 ** LICENSE.LGPLv3 included in the packaging of this file. Please review the
22 ** following information to ensure the GNU Lesser General Public License
23 ** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
24 ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
25 **
26 ** As a special exception, The Qt Company gives you certain additional
27 ** rights. These rights are described in The Qt Company LGPL Exception
28 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
29 **
30 ** GNU General Public License Usage
31 ** Alternatively, this file may be used under the terms of the GNU
32 ** General Public License version 3.0 as published by the Free Software
33 ** Foundation and appearing in the file LICENSE.GPL included in the
34 ** packaging of this file.  Please review the following information to
35 ** ensure the GNU General Public License version 3.0 requirements will be
36 ** met: http://www.gnu.org/copyleft/gpl.html.
37 **
38 ** $QT_END_LICENSE$
39 **
40 ****************************************************************************/
41 
42 #include "qxsdschemaparsercontext_p.h"
43 
44 QT_BEGIN_NAMESPACE
45 
46 using namespace QPatternist;
47 
XsdSchemaParserContext(const NamePool::Ptr & namePool,const XsdSchemaContext::Ptr & context)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 
namePool() const57 NamePool::Ptr XsdSchemaParserContext::namePool() const
58 {
59     return m_namePool;
60 }
61 
resolver() const62 XsdSchemaResolver::Ptr XsdSchemaParserContext::resolver() const
63 {
64     return m_resolver;
65 }
66 
checker() const67 XsdSchemaChecker::Ptr XsdSchemaParserContext::checker() const
68 {
69     return m_checker;
70 }
71 
schema() const72 XsdSchema::Ptr XsdSchemaParserContext::schema() const
73 {
74     return m_schema;
75 }
76 
elementDescriptions() const77 ElementDescription<XsdSchemaToken, XsdTagScope::Type>::Hash XsdSchemaParserContext::elementDescriptions() const
78 {
79     return m_elementDescriptions;
80 }
81 
createAnonymousName(const QString & targetNamespace) const82 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 
setupElementDescriptions()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
604