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