src/xmlpatterns/schema/qxsdschemaparser.cpp
changeset 19 fcece45ef507
parent 18 2f34d5167611
equal deleted inserted replaced
18:2f34d5167611 19:fcece45ef507
   262 
   262 
   263     setupStateMachines();
   263     setupStateMachines();
   264     setupBuiltinTypeNames();
   264     setupBuiltinTypeNames();
   265 }
   265 }
   266 
   266 
       
   267 void XsdSchemaParser::addIncludedSchemas(const NamespaceSet &schemas)
       
   268 {
       
   269     m_includedSchemas += schemas;
       
   270 }
       
   271 
   267 void XsdSchemaParser::setIncludedSchemas(const NamespaceSet &schemas)
   272 void XsdSchemaParser::setIncludedSchemas(const NamespaceSet &schemas)
   268 {
   273 {
   269     m_includedSchemas = schemas;
   274     m_includedSchemas = schemas;
   270 }
   275 }
   271 
   276 
       
   277 void XsdSchemaParser::addImportedSchemas(const NamespaceSet &schemas)
       
   278 {
       
   279     m_importedSchemas += schemas;
       
   280 }
       
   281 
   272 void XsdSchemaParser::setImportedSchemas(const NamespaceSet &schemas)
   282 void XsdSchemaParser::setImportedSchemas(const NamespaceSet &schemas)
   273 {
   283 {
   274     m_importedSchemas = schemas;
   284     m_importedSchemas = schemas;
       
   285 }
       
   286 
       
   287 void XsdSchemaParser::addRedefinedSchemas(const NamespaceSet &schemas)
       
   288 {
       
   289     m_redefinedSchemas += schemas;
   275 }
   290 }
   276 
   291 
   277 void XsdSchemaParser::setRedefinedSchemas(const NamespaceSet &schemas)
   292 void XsdSchemaParser::setRedefinedSchemas(const NamespaceSet &schemas)
   278 {
   293 {
   279     m_redefinedSchemas = schemas;
   294     m_redefinedSchemas = schemas;
   295     m_documentURI = uri;
   310     m_documentURI = uri;
   296 
   311 
   297     // prevent to get included/imported/redefined twice
   312     // prevent to get included/imported/redefined twice
   298     m_includedSchemas.insert(uri);
   313     m_includedSchemas.insert(uri);
   299     m_importedSchemas.insert(uri);
   314     m_importedSchemas.insert(uri);
       
   315     m_redefinedSchemas.insert(uri);
   300 }
   316 }
   301 
   317 
   302 QUrl XsdSchemaParser::documentURI() const
   318 QUrl XsdSchemaParser::documentURI() const
   303 {
   319 {
   304     return m_documentURI;
   320     return m_documentURI;
   592             parser.setDocumentURI(url);
   608             parser.setDocumentURI(url);
   593             parser.setTargetNamespaceExtended(m_targetNamespace);
   609             parser.setTargetNamespaceExtended(m_targetNamespace);
   594             parser.setIncludedSchemas(m_includedSchemas);
   610             parser.setIncludedSchemas(m_includedSchemas);
   595             parser.setImportedSchemas(m_importedSchemas);
   611             parser.setImportedSchemas(m_importedSchemas);
   596             parser.setRedefinedSchemas(m_redefinedSchemas);
   612             parser.setRedefinedSchemas(m_redefinedSchemas);
   597             if (!parser.parse(XsdSchemaParser::IncludeParser))
   613             if (!parser.parse(XsdSchemaParser::IncludeParser)) {
   598                 return;
   614                 return;
       
   615             } else {
       
   616                 // add indirectly loaded schemas to the list of already loaded ones
       
   617                 addIncludedSchemas(parser.m_includedSchemas);
       
   618                 addImportedSchemas(parser.m_importedSchemas);
       
   619                 addRedefinedSchemas(parser.m_redefinedSchemas);
       
   620             }
   599         }
   621         }
   600     }
   622     }
   601 
   623 
   602     validateIdAttribute("include");
   624     validateIdAttribute("include");
   603 
   625 
   682                 parser.setDocumentURI(url);
   704                 parser.setDocumentURI(url);
   683                 parser.setTargetNamespace(importNamespace);
   705                 parser.setTargetNamespace(importNamespace);
   684                 parser.setIncludedSchemas(m_includedSchemas);
   706                 parser.setIncludedSchemas(m_includedSchemas);
   685                 parser.setImportedSchemas(m_importedSchemas);
   707                 parser.setImportedSchemas(m_importedSchemas);
   686                 parser.setRedefinedSchemas(m_redefinedSchemas);
   708                 parser.setRedefinedSchemas(m_redefinedSchemas);
   687                 if (!parser.parse(XsdSchemaParser::ImportParser))
   709                 if (!parser.parse(XsdSchemaParser::ImportParser)) {
   688                     return;
   710                     return;
       
   711                 } else {
       
   712                     // add indirectly loaded schemas to the list of already loaded ones
       
   713                     addIncludedSchemas(parser.m_includedSchemas);
       
   714                     addImportedSchemas(parser.m_importedSchemas);
       
   715                     addRedefinedSchemas(parser.m_redefinedSchemas);
       
   716                 }
   689             }
   717             }
   690         }
   718         }
   691     } else {
   719     } else {
   692         // check whether it is a known namespace we have a builtin schema for
   720         // check whether it is a known namespace we have a builtin schema for
   693         if (!importNamespace.isEmpty()) {
   721         if (!importNamespace.isEmpty()) {
   700                     parser.setDocumentURI(importNamespace);
   728                     parser.setDocumentURI(importNamespace);
   701                     parser.setTargetNamespace(importNamespace);
   729                     parser.setTargetNamespace(importNamespace);
   702                     parser.setIncludedSchemas(m_includedSchemas);
   730                     parser.setIncludedSchemas(m_includedSchemas);
   703                     parser.setImportedSchemas(m_importedSchemas);
   731                     parser.setImportedSchemas(m_importedSchemas);
   704                     parser.setRedefinedSchemas(m_redefinedSchemas);
   732                     parser.setRedefinedSchemas(m_redefinedSchemas);
   705                     if (!parser.parse(XsdSchemaParser::ImportParser))
   733                     if (!parser.parse(XsdSchemaParser::ImportParser)) {
   706                         return;
   734                         return;
       
   735                     } else {
       
   736                         // add indirectly loaded schemas to the list of already loaded ones
       
   737                         addIncludedSchemas(parser.m_includedSchemas);
       
   738                         addImportedSchemas(parser.m_importedSchemas);
       
   739                         addRedefinedSchemas(parser.m_redefinedSchemas);
       
   740                     }
   707                 }
   741                 }
   708             }
   742             }
   709         } else {
   743         } else {
   710             // we don't import anything... that is valid according to the schema
   744             // we don't import anything... that is valid according to the schema
   711         }
   745         }
   837             parser.setDocumentURI(url);
   871             parser.setDocumentURI(url);
   838             parser.setTargetNamespaceExtended(m_targetNamespace);
   872             parser.setTargetNamespaceExtended(m_targetNamespace);
   839             parser.setIncludedSchemas(m_includedSchemas);
   873             parser.setIncludedSchemas(m_includedSchemas);
   840             parser.setImportedSchemas(m_importedSchemas);
   874             parser.setImportedSchemas(m_importedSchemas);
   841             parser.setRedefinedSchemas(m_redefinedSchemas);
   875             parser.setRedefinedSchemas(m_redefinedSchemas);
   842             if (!parser.parse(XsdSchemaParser::RedefineParser))
   876             if (!parser.parse(XsdSchemaParser::RedefineParser)) {
   843                 return;
   877                 return;
       
   878             } else {
       
   879                 // add indirectly loaded schemas to the list of already loaded ones
       
   880                 addIncludedSchemas(parser.m_includedSchemas);
       
   881                 addImportedSchemas(parser.m_importedSchemas);
       
   882                 addRedefinedSchemas(parser.m_redefinedSchemas);
       
   883             }
   844 
   884 
   845             delete reply;
   885             delete reply;
   846         }
   886         }
   847     }
   887     }
   848 
   888