1 /****************************************************************************
2 **
3 ** Copyright (C) 2016 The Qt Company Ltd.
4 ** Contact: https://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 https://www.qt.io/terms-conditions. For further
15 ** information use the contact form at https://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 3 as published by the Free Software
20 ** Foundation and appearing in the file LICENSE.LGPL3 included in the
21 ** packaging of this file. Please review the following information to
22 ** ensure the GNU Lesser General Public License version 3 requirements
23 ** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
24 **
25 ** GNU General Public License Usage
26 ** Alternatively, this file may be used under the terms of the GNU
27 ** General Public License version 2.0 or (at your option) the GNU General
28 ** Public license version 3 or any later version approved by the KDE Free
29 ** Qt Foundation. The licenses are as published by the Free Software
30 ** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
31 ** included in the packaging of this file. Please review the following
32 ** information to ensure the GNU General Public License requirements will
33 ** be met: https://www.gnu.org/licenses/gpl-2.0.html and
34 ** https://www.gnu.org/licenses/gpl-3.0.html.
35 **
36 ** $QT_END_LICENSE$
37 **
38 ****************************************************************************/
39 
40 //
41 //  W A R N I N G
42 //  -------------
43 //
44 // This file is not part of the Qt API.  It exists purely as an
45 // implementation detail.  This header file may change from version to
46 // version without notice, or even be removed.
47 //
48 // We mean it.
49 
50 #ifndef Patternist_XsdSchemaParser_H
51 #define Patternist_XsdSchemaParser_H
52 
53 #include <private/qnamespacesupport_p.h>
54 #include <private/qxsdalternative_p.h>
55 #include <private/qxsdattribute_p.h>
56 #include <private/qxsdattributegroup_p.h>
57 #include <private/qxsdattributeterm_p.h>
58 #include <private/qxsdcomplextype_p.h>
59 #include <private/qxsdelement_p.h>
60 #include <private/qxsdidcache_p.h>
61 #include <private/qxsdmodelgroup_p.h>
62 #include <private/qxsdnotation_p.h>
63 #include <private/qxsdsimpletype_p.h>
64 #include <private/qxsdschemacontext_p.h>
65 #include <private/qxsdschemaparsercontext_p.h>
66 #include <private/qxsdstatemachine_p.h>
67 
68 #include <QtCore/QHash>
69 #include <QtCore/QSet>
70 #include <QtCore/QUrl>
71 #include <QtCore/QXmlStreamReader>
72 #include <QtXmlPatterns/QXmlNamePool>
73 
74 QT_BEGIN_NAMESPACE
75 
76 namespace QPatternist
77 {
78     /**
79      * @short Implements the parsing of XML schema file.
80      *
81      * This class parses a XML schema in XML presentation from an QIODevice
82      * and returns object representation as XsdSchema.
83      *
84      * @ingroup Patternist_schema
85      * @author Tobias Koenig <tobias.koenig@nokia.com>
86      */
87     class XsdSchemaParser : public MaintainingReader<XsdSchemaToken, XsdTagScope::Type>
88     {
89         friend class ElementNamespaceHandler;
90         friend class TagValidationHandler;
91 
92         public:
93             enum ParserType
94             {
95                 TopLevelParser,
96                 IncludeParser,
97                 ImportParser,
98                 RedefineParser
99             };
100 
101             /**
102              * Creates a new schema parser object.
103              */
104             XsdSchemaParser(const XsdSchemaContext::Ptr &context, const XsdSchemaParserContext::Ptr &parserContext, QIODevice *device);
105 
106             /**
107              * Parses the XML schema file.
108              *
109              * @return @c true on success, @c false if the schema is somehow invalid.
110              */
111             bool parse(ParserType parserType = TopLevelParser);
112 
113             /**
114              * Describes a set of namespace URIs
115              */
116             typedef QSet<QUrl> NamespaceSet;
117 
118             /**
119              * Adds @p schemas to the list of already included schemas, so the parser
120              * can detect multiple includes of the same schema.
121              */
122             void addIncludedSchemas(const NamespaceSet &schemas);
123 
124             /**
125              * Sets which @p schemas have been included already, so the parser
126              * can detect multiple includes of the same schema.
127              */
128             void setIncludedSchemas(const NamespaceSet &schemas);
129 
130             /**
131              * Adds @p schemas to the list of already imported schemas, so the parser
132              * can detect multiple imports of the same schema.
133              */
134             void addImportedSchemas(const NamespaceSet &schemas);
135 
136             /**
137              * Sets which @p schemas have been imported already, so the parser
138              * can detect circular imports.
139              */
140             void setImportedSchemas(const NamespaceSet &schemas);
141 
142             /**
143              * Adds @p schemas to the list of already redefined schemas, so the parser
144              * can detect multiple redefines of the same schema.
145              */
146             void addRedefinedSchemas(const NamespaceSet &schemas);
147 
148             /**
149              * Sets which @p schemas have been redefined already, so the parser
150              * can detect multiple redefines of the same schema.
151              */
152             void setRedefinedSchemas(const NamespaceSet &schemas);
153 
154             /**
155              * Sets the target namespace of the schema to parse.
156              */
157             void setTargetNamespace(const QString &targetNamespace);
158 
159             /**
160              * Sets the document URI of the schema to parse.
161              */
162             void setDocumentURI(const QUrl &uri);
163 
164             /**
165              * Returns the document URI of the schema to parse.
166              */
167             QUrl documentURI() const;
168 
169             /**
170              * Reimplemented from MaintainingReader, always returns @c false.
171              */
172             bool isAnyAttributeAllowed() const;
173 
174         private:
175             /**
176              * Used internally to report any kind of parsing error or
177              * schema inconsistency.
178              */
179             virtual void error(const QString &msg);
180 
181             void attributeContentError(const char *attributeName, const char *elementName, const QString &value, const SchemaType::Ptr &type = SchemaType::Ptr());
182 
183             /**
184              * Sets the target namespace of the schema to parse.
185              */
186             void setTargetNamespaceExtended(const QString &targetNamespace);
187 
188             /**
189              * This method is called for parsing the top-level <em>schema</em> object.
190              */
191             void parseSchema(ParserType parserType);
192 
193             /**
194              * This method is called for parsing any top-level <em>include</em> object.
195              */
196             void parseInclude();
197 
198             /**
199              * This method is called for parsing any top-level <em>import</em> object.
200              */
201             void parseImport();
202 
203             /**
204              * This method is called for parsing any top-level <em>redefine</em> object.
205              */
206             void parseRedefine();
207 
208             /**
209              * This method is called for parsing any <em>annotation</em> object everywhere
210              * in the schema.
211              */
212             XsdAnnotation::Ptr parseAnnotation();
213 
214             /**
215              * This method is called for parsing an <em>appinfo</em> object as child of
216              * an <em>annotation</em> object.
217              */
218             XsdApplicationInformation::Ptr parseAppInfo();
219 
220             /**
221              * This method is called for parsing a <em>documentation</em> object as child of
222              * an <em>annotation</em> object.
223              */
224             XsdDocumentation::Ptr parseDocumentation();
225 
226             /**
227              * This method is called for parsing a <em>defaultOpenContent</em> object.
228              */
229             void parseDefaultOpenContent();
230 
231             /**
232              * This method is called for parsing any top-level <em>simpleType</em> object.
233              */
234             XsdSimpleType::Ptr parseGlobalSimpleType();
235 
236             /**
237              * This method is called for parsing any <em>simpleType</em> object as descendant
238              * of an <em>element</em> or <em>complexType</em> object.
239              */
240             XsdSimpleType::Ptr parseLocalSimpleType();
241 
242             /**
243              * This method is called for parsing a <em>restriction</em> object as child
244              * of a <em>simpleType</em> object.
245              */
246             void parseSimpleRestriction(const XsdSimpleType::Ptr &ptr);
247 
248             /**
249              * This method is called for parsing a <em>list</em> object as child
250              * of a <em>simpleType</em> object.
251              */
252             void parseList(const XsdSimpleType::Ptr &ptr);
253 
254             /**
255              * This method is called for parsing a <em>union</em> object as child
256              * of a <em>simpleType</em> object.
257              */
258             void parseUnion(const XsdSimpleType::Ptr &ptr);
259 
260             /**
261              * This method is called for parsing a <em>minExclusive</em> object as child
262              * of a <em>restriction</em> object.
263              */
264             XsdFacet::Ptr parseMinExclusiveFacet();
265 
266             /**
267              * This method is called for parsing a <em>minInclusive</em> object as child
268              * of a <em>restriction</em> object.
269              */
270             XsdFacet::Ptr parseMinInclusiveFacet();
271 
272             /**
273              * This method is called for parsing a <em>maxExclusive</em> object as child
274              * of a <em>restriction</em> object.
275              */
276             XsdFacet::Ptr parseMaxExclusiveFacet();
277 
278             /**
279              * This method is called for parsing a <em>maxInclusive</em> object as child
280              * of a <em>restriction</em> object.
281              */
282             XsdFacet::Ptr parseMaxInclusiveFacet();
283 
284             /**
285              * This method is called for parsing a <em>totalDigits</em> object as child
286              * of a <em>restriction</em> object.
287              */
288             XsdFacet::Ptr parseTotalDigitsFacet();
289 
290             /**
291              * This method is called for parsing a <em>fractionDigits</em> object as child
292              * of a <em>restriction</em> object.
293              */
294             XsdFacet::Ptr parseFractionDigitsFacet();
295 
296             /**
297              * This method is called for parsing a <em>length</em> object as child
298              * of a <em>restriction</em> object.
299              */
300             XsdFacet::Ptr parseLengthFacet();
301 
302             /**
303              * This method is called for parsing a <em>minLength</em> object as child
304              * of a <em>restriction</em> object.
305              */
306             XsdFacet::Ptr parseMinLengthFacet();
307 
308             /**
309              * This method is called for parsing a <em>maxLength</em> object as child
310              * of a <em>restriction</em> object.
311              */
312             XsdFacet::Ptr parseMaxLengthFacet();
313 
314             /**
315              * This method is called for parsing an <em>enumeration</em> object as child
316              * of a <em>restriction</em> object.
317              */
318             XsdFacet::Ptr parseEnumerationFacet();
319 
320             /**
321              * This method is called for parsing a <em>whiteSpace</em> object as child
322              * of a <em>restriction</em> object.
323              */
324             XsdFacet::Ptr parseWhiteSpaceFacet();
325 
326             /**
327              * This method is called for parsing a <em>pattern</em> object as child
328              * of a <em>restriction</em> object.
329              */
330             XsdFacet::Ptr parsePatternFacet();
331 
332             /**
333              * This method is called for parsing an <em>assertion</em> object as child
334              * of a <em>restriction</em> object.
335              */
336             XsdFacet::Ptr parseAssertionFacet();
337 
338             /**
339              * This method is called for parsing any top-level <em>complexType</em> object.
340              */
341             XsdComplexType::Ptr parseGlobalComplexType();
342 
343             /**
344              * This method is called for parsing any <em>complexType</em> object as descendant
345              * of an <em>element</em> object.
346              */
347             XsdComplexType::Ptr parseLocalComplexType();
348 
349             /**
350              * This method resolves the content type of the @p complexType for the given
351              * @p effectiveMixed value.
352              */
353             void resolveComplexContentType(const XsdComplexType::Ptr &complexType, bool effectiveMixed);
354 
355             /**
356              * This method is called for parsing a <em>simpleContent</em> object as child
357              * of a <em>complexType</em> object.
358              */
359             void parseSimpleContent(const XsdComplexType::Ptr &complexType);
360 
361             /**
362              * This method is called for parsing a <em>restriction</em> object as child
363              * of a <em>simpleContent</em> object.
364              */
365             void parseSimpleContentRestriction(const XsdComplexType::Ptr &complexType);
366 
367             /**
368              * This method is called for parsing an <em>extension</em> object as child
369              * of a <em>simpleContent</em> object.
370              */
371             void parseSimpleContentExtension(const XsdComplexType::Ptr &complexType);
372 
373             /**
374              * This method is called for parsing a <em>complexContent</em> object as child
375              * of a <em>complexType</em> object.
376              *
377              * @param complexType The complex type the complex content belongs to.
378              * @param mixed The output parameter for the mixed value.
379              */
380             void parseComplexContent(const XsdComplexType::Ptr &complexType, bool *mixed);
381 
382             /**
383              * This method is called for parsing a <em>restriction</em> object as child
384              * of a <em>complexContent</em> object.
385              */
386             void parseComplexContentRestriction(const XsdComplexType::Ptr &complexType);
387 
388             /**
389              * This method is called for parsing an <em>extension</em> object as child
390              * of a <em>complexContent</em> object.
391              */
392             void parseComplexContentExtension(const XsdComplexType::Ptr &complexType);
393 
394             /**
395              * This method is called for parsing an <em>assert</em> object as child
396              * of a <em>complexType</em> or parsing a <em>assertion</em> facet object as
397              * child of a <em>simpleType</em>.
398              *
399              * @param nodeName Either XsdSchemaToken::Assert or XsdSchemaToken::Assertion.
400              * @param tag Either XsdTagScope::Assert or XsdTagScope::Assertion.
401              */
402             XsdAssertion::Ptr parseAssertion(const XsdSchemaToken::NodeName &nodeName, const XsdTagScope::Type &tag);
403 
404             /**
405              * This method is called for parsing an <em>openContent</em> object.
406              */
407             XsdComplexType::OpenContent::Ptr parseOpenContent();
408 
409             /**
410              * This method is called for parsing a top-level <em>group</em> object.
411              */
412             XsdModelGroup::Ptr parseNamedGroup();
413 
414             /**
415              * This method is called for parsing a non-top-level <em>group</em> object
416              * that contains a <em>ref</em> attribute.
417              */
418             XsdTerm::Ptr parseReferredGroup(const XsdParticle::Ptr &particle);
419 
420             /**
421              * This method is called for parsing an <em>all</em> object as child
422              * of a top-level <em>group</em> object.
423              *
424              * @param parent The schema component the <em>all</em> object is part of.
425              */
426             XsdModelGroup::Ptr parseAll(const NamedSchemaComponent::Ptr &parent);
427 
428             /**
429              * This method is called for parsing an <em>all</em> object as descendant
430              * of a <em>complexType</em> object.
431              *
432              * @param particle The particle the <em>all</em> object belongs to.
433              * @param parent The schema component the <em>all</em> object is part of.
434              */
435             XsdModelGroup::Ptr parseLocalAll(const XsdParticle::Ptr &particle, const NamedSchemaComponent::Ptr &parent);
436 
437             /**
438              * This method is called for parsing a <em>choice</em> object as child
439              * of a top-level <em>group</em> object.
440              *
441              * @param parent The schema component the <em>choice</em> object is part of.
442              */
443             XsdModelGroup::Ptr parseChoice(const NamedSchemaComponent::Ptr &parent);
444 
445             /**
446              * This method is called for parsing a <em>choice</em> object as descendant
447              * of a <em>complexType</em> object or a <em>choice</em> object.
448              *
449              * @param particle The particle the <em>choice</em> object belongs to.
450              * @param parent The schema component the <em>choice</em> object is part of.
451              */
452             XsdModelGroup::Ptr parseLocalChoice(const XsdParticle::Ptr &particle, const NamedSchemaComponent::Ptr &parent);
453 
454             /**
455              * This method is called for parsing a <em>sequence</em> object as child
456              * of a top-level <em>group</em> object.
457              *
458              * @param parent The schema component the <em>sequence</em> object is part of.
459              */
460             XsdModelGroup::Ptr parseSequence(const NamedSchemaComponent::Ptr &parent);
461 
462             /**
463              * This method is called for parsing a <em>sequence</em> object as descendant
464              * of a <em>complexType</em> object or a <em>sequence</em> object.
465              *
466              * @param particle The particle the <em>sequence</em> object belongs to.
467              * @param parent The schema component the <em>sequence</em> object is part of.
468              */
469             XsdModelGroup::Ptr parseLocalSequence(const XsdParticle::Ptr &particle, const NamedSchemaComponent::Ptr &parent);
470 
471             /**
472              * A helper method that parses the minOccurs and maxOccurs constraints for
473              * the given @p particle that has the given @p tagName.
474              */
475             bool parseMinMaxConstraint(const XsdParticle::Ptr &particle, const char* tagName);
476 
477             /**
478              * This method is called for parsing any top-level <em>attribute</em> object.
479              */
480             XsdAttribute::Ptr parseGlobalAttribute();
481 
482             /**
483              * This method is called for parsing any non-top-level <em>attribute</em> object as a
484              * descendant of a <em>complexType</em> object or an <em>attributeGroup</em> object.
485              *
486              * @param parent The parent component the <em>attribute</em> object is part of.
487              */
488             XsdAttributeUse::Ptr parseLocalAttribute(const NamedSchemaComponent::Ptr &parent);
489 
490             /**
491              * This method is called for parsing a top-level <em>attributeGroup</em> object.
492              */
493             XsdAttributeGroup::Ptr parseNamedAttributeGroup();
494 
495             /**
496              * This method is called for parsing a non-top-level <em>attributeGroup</em> object
497              * that contains a <em>ref</em> attribute.
498              */
499             XsdAttributeUse::Ptr parseReferredAttributeGroup();
500 
501             /**
502              * This method is called for parsing any top-level <em>element</em> object.
503              */
504             XsdElement::Ptr parseGlobalElement();
505 
506             /**
507              * This method is called for parsing any non-top-level <em>element</em> object as a
508              * descendant of a <em>complexType</em> object or a <em>group</em> object.
509              *
510              * @param particle The particle the <em>element</em> object belongs to.
511              * @param parent The parent component the <em>element</em> object is part of.
512              */
513             XsdTerm::Ptr parseLocalElement(const XsdParticle::Ptr &particle, const NamedSchemaComponent::Ptr &parent);
514 
515             /**
516              * This method is called for parsing a <em>unique</em> object as child of an <em>element</em> object.
517              */
518             XsdIdentityConstraint::Ptr parseUnique();
519 
520             /**
521              * This method is called for parsing a <em>key</em> object as child of an <em>element</em> object.
522              */
523             XsdIdentityConstraint::Ptr parseKey();
524 
525             /**
526              * This method is called for parsing a <em>keyref</em> object as child of an <em>element</em> object.
527              */
528             XsdIdentityConstraint::Ptr parseKeyRef(const XsdElement::Ptr &element);
529 
530             /**
531              * This method is called for parsing a <em>selector</em> object as child of an <em>unique</em> object,
532              * <em>key</em> object or <em>keyref</em> object,
533              *
534              * @param ptr The identity constraint it belongs to.
535              */
536             void parseSelector(const XsdIdentityConstraint::Ptr &ptr);
537 
538             /**
539              * This method is called for parsing a <em>field</em> object as child of an <em>unique</em> object,
540              * <em>key</em> object or <em>keyref</em> object,
541              *
542              * @param ptr The identity constraint it belongs to.
543              */
544             void parseField(const XsdIdentityConstraint::Ptr &ptr);
545 
546             /**
547              * This method is called for parsing an <em>alternative</em> object inside an <em>element</em> object.
548              */
549             XsdAlternative::Ptr parseAlternative();
550 
551             /**
552              * This method is called for parsing a top-level <em>notation</em> object.
553              */
554             XsdNotation::Ptr parseNotation();
555 
556             /**
557              * This method is called for parsing an <em>any</em> object somewhere in
558              * the schema.
559              *
560              * @param particle The particle the <em>any</em> object belongs to.
561              */
562             XsdWildcard::Ptr parseAny(const XsdParticle::Ptr &particle);
563 
564             /**
565              * This method is called for parsing an <em>anyAttribute</em> object somewhere in
566              * the schema.
567              */
568             XsdWildcard::Ptr parseAnyAttribute();
569 
570             /**
571              * This method is called for parsing unknown object as descendant of the <em>annotation</em> object.
572              */
573             void parseUnknownDocumentation();
574 
575             /**
576              * This method is called for parsing unknown object in the schema.
577              */
578             void parseUnknown();
579 
580             /**
581              * Returnes an source location for the current position.
582              */
583             QSourceLocation currentSourceLocation() const;
584 
585             /**
586              * Converts a @p qualified name into a QXmlName @p name and does some error handling.
587              */
588             void convertName(const QString &qualified, NamespaceSupport::NameType type, QXmlName &name);
589 
590             /**
591              * A helper method that reads in a 'name' attribute and checks it for syntactic errors.
592              */
593             inline QString readNameAttribute(const char *elementName);
594 
595             /**
596              * A helper method that reads in an attribute that contains an QName and
597              * checks it for syntactic errors.
598              */
599             inline QString readQNameAttribute(const QString &typeAttribute, const char *elementName);
600 
601             /**
602              * A helper method that reads in a namespace attribute and checks for syntactic errors.
603              */
604             inline QString readNamespaceAttribute(const QString &attributeName, const char *elementName);
605 
606             /**
607              * A helper method that reads the final attribute and does correct handling of schema default definitions.
608              */
609             inline SchemaType::DerivationConstraints readDerivationConstraintAttribute(const SchemaType::DerivationConstraints &allowedConstraints, const char *elementName);
610 
611             /**
612              * A helper method that reads the block attribute and does correct handling of schema default definitions.
613              */
614             inline NamedSchemaComponent::BlockingConstraints readBlockingConstraintAttribute(const NamedSchemaComponent::BlockingConstraints &allowedConstraints, const char *elementName);
615 
616             /**
617              * A helper method that reads all components for a xpath expression for the current scope.
618              */
619             XsdXPathExpression::Ptr readXPathExpression(const char *elementName);
620 
621             /**
622              * Describes the type of XPath that is allowed by the readXPathAttribute method.
623              */
624             enum XPathType {
625                 XPath20,
626                 XPathSelector,
627                 XPathField
628             };
629 
630             /**
631              * A helper method that reads an attribute that represents a xpath query and does basic
632              * validation.
633              */
634             QString readXPathAttribute(const QString &attributeName, XPathType type, const char *elementName);
635 
636             /**
637              * A helper method that reads in an "id" attribute, checks it for syntactic errors
638              * and tests whether a component with the same id has already been parsed.
639              */
640             inline void validateIdAttribute(const char *elementName);
641 
642             /**
643              * Adds an @p element to the schema and checks for duplicated entries.
644              */
645             void addElement(const XsdElement::Ptr &element);
646 
647             /**
648              * Adds an @p attribute to the schema and checks for duplicated entries.
649              */
650             void addAttribute(const XsdAttribute::Ptr &attribute);
651 
652             /**
653              * Adds a @p type to the schema and checks for duplicated entries.
654              */
655             void addType(const SchemaType::Ptr &type);
656 
657             /**
658              * Adds an anonymous @p type to the schema and checks for duplicated entries.
659              */
660             void addAnonymousType(const SchemaType::Ptr &type);
661 
662             /**
663              * Adds an attribute @p group to the schema and checks for duplicated entries.
664              */
665             void addAttributeGroup(const XsdAttributeGroup::Ptr &group);
666 
667             /**
668              * Adds an element @p group to the schema and checks for duplicated entries.
669              */
670             void addElementGroup(const XsdModelGroup::Ptr &group);
671 
672             /**
673              * Adds a @p notation to the schema and checks for duplicated entries.
674              */
675             void addNotation(const XsdNotation::Ptr &notation);
676 
677             /**
678              * Adds an identity @p constraint to the schema and checks for duplicated entries.
679              */
680             void addIdentityConstraint(const XsdIdentityConstraint::Ptr &constraint);
681 
682             /**
683              * Adds the @p facet to the list of @p facets for @p type and checks for duplicates.
684              */
685             void addFacet(const XsdFacet::Ptr &facet, XsdFacet::Hash &facets, const SchemaType::Ptr &type);
686 
687             /**
688              * Sets up the state machines for validating the right occurrence of xml elements.
689              */
690             void setupStateMachines();
691 
692             /**
693              * Sets up a list of names of known builtin types.
694              */
695             void setupBuiltinTypeNames();
696 
697             /**
698              * Checks whether the given @p tag is equal to the given @p token and
699              * the given @p namespaceToken is the XML Schema namespace.
700              */
701             inline bool isSchemaTag(XsdSchemaToken::NodeName tag, XsdSchemaToken::NodeName token, XsdSchemaToken::NodeName namespaceToken) const;
702 
703             XsdSchemaContext::Ptr                                                m_context;
704             XsdSchemaParserContext::Ptr                                          m_parserContext;
705             NamePool::Ptr                                                        m_namePool;
706             NamespaceSupport                                                     m_namespaceSupport;
707             XsdSchemaResolver::Ptr                                               m_schemaResolver;
708             XsdSchema::Ptr                                                       m_schema;
709 
710             QString                                                              m_targetNamespace;
711             QString                                                              m_attributeFormDefault;
712             QString                                                              m_elementFormDefault;
713             QString                                                              m_blockDefault;
714             QString                                                              m_finalDefault;
715             QString                                                              m_xpathDefaultNamespace;
716             QXmlName                                                             m_defaultAttributes;
717             XsdComplexType::OpenContent::Ptr                                     m_defaultOpenContent;
718             bool                                                                 m_defaultOpenContentAppliesToEmpty;
719 
720             NamespaceSet                                                         m_includedSchemas;
721             NamespaceSet                                                         m_importedSchemas;
722             NamespaceSet                                                         m_redefinedSchemas;
723             QUrl                                                                 m_documentURI;
724             XsdIdCache::Ptr                                                      m_idCache;
725             QHash<XsdTagScope::Type, XsdStateMachine<XsdSchemaToken::NodeName> > m_stateMachines;
726             ComponentLocationHash                                                m_componentLocationHash;
727             QSet<QXmlName>                                                       m_builtinTypeNames;
728     };
729 }
730 
731 QT_END_NAMESPACE
732 
733 #endif
734