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
74QT_BEGIN_NAMESPACE
75
76namespace 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
731QT_END_NAMESPACE
732
733#endif
734

source code of qtxmlpatterns/src/xmlpatterns/schema/qxsdschemaparser_p.h