You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xerces.apache.org by am...@apache.org on 2009/08/14 17:01:37 UTC

svn commit: r804249 - in /xerces/c/trunk/src/xercesc/validators/schema: SchemaInfo.cpp SchemaInfo.hpp TraverseSchema.cpp TraverseSchema.hpp

Author: amassari
Date: Fri Aug 14 15:01:36 2009
New Revision: 804249

URL: http://svn.apache.org/viewvc?rev=804249&view=rev
Log:
Move the list with the imported targetNamespace in TraverseSchema, so that a schema can "see" what an imported schema imports (XERCESC-1249)

Modified:
    xerces/c/trunk/src/xercesc/validators/schema/SchemaInfo.cpp
    xerces/c/trunk/src/xercesc/validators/schema/SchemaInfo.hpp
    xerces/c/trunk/src/xercesc/validators/schema/TraverseSchema.cpp
    xerces/c/trunk/src/xercesc/validators/schema/TraverseSchema.hpp

Modified: xerces/c/trunk/src/xercesc/validators/schema/SchemaInfo.cpp
URL: http://svn.apache.org/viewvc/xerces/c/trunk/src/xercesc/validators/schema/SchemaInfo.cpp?rev=804249&r1=804248&r2=804249&view=diff
==============================================================================
--- xerces/c/trunk/src/xercesc/validators/schema/SchemaInfo.cpp (original)
+++ xerces/c/trunk/src/xercesc/validators/schema/SchemaInfo.cpp Fri Aug 14 15:01:36 2009
@@ -55,7 +55,6 @@
     , fImportedInfoList(0)
     , fImportingInfoList(0)
     , fFailedRedefineList(0)
-    , fImportedNSList(0)
     , fRecursingAnonTypes(0)
     , fRecursingTypeNames(0)
     , fNonXSAttList(0)
@@ -93,7 +92,6 @@
         delete fIncludeInfoList;
 
     delete fImportingInfoList;
-    delete fImportedNSList;
     delete fFailedRedefineList;
     delete fRecursingAnonTypes;
     delete fRecursingTypeNames;

Modified: xerces/c/trunk/src/xercesc/validators/schema/SchemaInfo.hpp
URL: http://svn.apache.org/viewvc/xerces/c/trunk/src/xercesc/validators/schema/SchemaInfo.hpp?rev=804249&r1=804248&r2=804249&view=diff
==============================================================================
--- xerces/c/trunk/src/xercesc/validators/schema/SchemaInfo.hpp (original)
+++ xerces/c/trunk/src/xercesc/validators/schema/SchemaInfo.hpp Fri Aug 14 15:01:36 2009
@@ -131,8 +131,6 @@
     bool circularImportExist(const unsigned int nameSpaceURI);
     bool isFailedRedefine(const DOMElement* const anElem);
     void addFailedRedefine(const DOMElement* const anElem);
-    bool isImportingNS(const int namespaceURI);
-    void addImportedNS(const int namespaceURI);
     void addRecursingType(const DOMElement* const elem, const XMLCh* const name);
 
 private:
@@ -164,7 +162,6 @@
     RefVectorOf<SchemaInfo>*          fImportedInfoList;
     RefVectorOf<SchemaInfo>*          fImportingInfoList;
     ValueVectorOf<const DOMElement*>* fFailedRedefineList;
-    ValueVectorOf<int>*               fImportedNSList;
     ValueVectorOf<const DOMElement*>* fRecursingAnonTypes;
     ValueVectorOf<const XMLCh*>*      fRecursingTypeNames;
     RefHashTableOf<DOMElement>*       fTopLevelComponents[C_Count];
@@ -279,16 +276,6 @@
 // ---------------------------------------------------------------------------
 //  SchemaInfo: Access methods
 // ---------------------------------------------------------------------------
-inline void SchemaInfo::addImportedNS(const int namespaceURI) {
-
-    if (!fImportedNSList) {
-        fImportedNSList = new (fMemoryManager) ValueVectorOf<int>(4, fMemoryManager);
-    }
-
-    if (!fImportedNSList->containsElement(namespaceURI))
-        fImportedNSList->addElement(namespaceURI);
-}
-
 inline void SchemaInfo::addSchemaInfo(SchemaInfo* const toAdd,
                                       const ListType aListType) {
 
@@ -300,7 +287,6 @@
         if (!fImportedInfoList->containsElement(toAdd)) {
 
             fImportedInfoList->addElement(toAdd);
-            addImportedNS(toAdd->getTargetNSURI());
             toAdd->updateImportingInfo(this);
         }
     }
@@ -407,14 +393,6 @@
     fFailedRedefineList->addElement(anElem);
 }
 
-inline bool SchemaInfo::isImportingNS(const int namespaceURI) {
-
-    if (!fImportedNSList)
-        return false;
-
-    return (fImportedNSList->containsElement(namespaceURI));
-}
-
 inline void SchemaInfo::addRecursingType(const DOMElement* const elem,
                                          const XMLCh* const name) {
 

Modified: xerces/c/trunk/src/xercesc/validators/schema/TraverseSchema.cpp
URL: http://svn.apache.org/viewvc/xerces/c/trunk/src/xercesc/validators/schema/TraverseSchema.cpp?rev=804249&r1=804248&r2=804249&view=diff
==============================================================================
--- xerces/c/trunk/src/xercesc/validators/schema/TraverseSchema.cpp (original)
+++ xerces/c/trunk/src/xercesc/validators/schema/TraverseSchema.cpp Fri Aug 14 15:01:36 2009
@@ -193,6 +193,7 @@
     , fDeclStack(0)
     , fGlobalDeclarations(0)
     , fNonXSAttList(0)
+    , fImportedNSList(0)
     , fIC_NodeListNS(0)
     , fNotationRegistry(0)
     , fRedefineComponents(0)
@@ -364,6 +365,7 @@
         // Add mapping for the xml prefix
         currInfo->getNamespaceScope()->addPrefix(XMLUni::fgXMLString, fURIStringPool->addOrFind(XMLUni::fgXMLURIName));
     }
+    addImportedNS(currInfo->getTargetNSURI());
 
     fSchemaInfo = currInfo;
     fSchemaInfoList->put((void*) fSchemaInfo->getCurrentSchemaURL(), fSchemaInfo->getTargetNSURI(), fSchemaInfo);
@@ -758,7 +760,7 @@
     bool grammarFound = (aGrammar && (aGrammar->getGrammarType() == Grammar::SchemaGrammarType));
 
     if (grammarFound) {
-        fSchemaInfo->addImportedNS(fURIStringPool->addOrFind(nameSpace));
+        addImportedNS(fURIStringPool->addOrFind(nameSpace));
     }
 
     // ------------------------------------------------------------------
@@ -787,7 +789,7 @@
     // Nothing to do
     if (!srcToFill) {
         if (!grammarFound && nameSpace) {
-            fSchemaInfo->addImportedNS(fURIStringPool->addOrFind(nameSpace));
+            addImportedNS(fURIStringPool->addOrFind(nameSpace));
         }
 
         return;
@@ -805,6 +807,7 @@
     if (importSchemaInfo) {
 
         fSchemaInfo->addSchemaInfo(importSchemaInfo, SchemaInfo::IMPORT);
+        addImportedNS(importSchemaInfo->getTargetNSURI());
         return;
     }
 
@@ -2961,7 +2964,7 @@
         // http://www.w3.org/TR/xmlschema-1/#src-resolve
         unsigned int uriId = fURIStringPool->addOrFind(uriStr);
 
-        if (!fSchemaInfo->isImportingNS(uriId)) {
+        if (!isImportingNS(uriId)) {
 
             reportSchemaError(elem, XMLUni::fgXMLErrDomain, XMLErrs::InvalidNSReference, uriStr);
             return 0;
@@ -5012,7 +5015,7 @@
             // http://www.w3.org/TR/xmlschema-1/#src-resolve
             unsigned int uriId = fURIStringPool->addOrFind(uri);
 
-            if (!fSchemaInfo->isImportingNS(uriId)) {
+            if (!isImportingNS(uriId)) {
 
                 reportSchemaError(elem, XMLUni::fgXMLErrDomain, XMLErrs::InvalidNSReference, uri);
                 return 0;
@@ -5283,7 +5286,7 @@
         // http://www.w3.org/TR/xmlschema-1/#src-resolve
         unsigned int uriId = fURIStringPool->addOrFind(otherSchemaURI);
 
-        if (!fSchemaInfo->isImportingNS(uriId)) {
+        if (!isImportingNS(uriId)) {
 
             reportSchemaError(elem, XMLUni::fgXMLErrDomain, XMLErrs::InvalidNSReference, otherSchemaURI);
             return 0;
@@ -5361,7 +5364,7 @@
         // http://www.w3.org/TR/xmlschema-1/#src-resolve
         unsigned int uriId = fURIStringPool->addOrFind(typeURI);
 
-        if (!fSchemaInfo->isImportingNS(uriId)) {
+        if (!isImportingNS(uriId)) {
 
             reportSchemaError(elem, XMLUni::fgXMLErrDomain, XMLErrs::InvalidNSReference, typeURI);
             return 0;
@@ -5427,7 +5430,7 @@
         // http://www.w3.org/TR/xmlschema-1/#src-resolve
         unsigned int uriId = fURIStringPool->addOrFind(typeURI);
 
-        if (!fSchemaInfo->isImportingNS(uriId))
+        if (!isImportingNS(uriId))
             return 0;
 
         Grammar* aGrammar = fGrammarResolver->getGrammar(typeURI);
@@ -5499,7 +5502,7 @@
         // Make sure that we have an explicit import statement.
         // Clause 4 of Schema Representation Constraint:
         // http://www.w3.org/TR/xmlschema-1/#src-resolve
-        if (!fSchemaInfo->isImportingNS(uriId))
+        if (!isImportingNS(uriId))
         {
             reportSchemaError(elem, XMLUni::fgXMLErrDomain, XMLErrs::InvalidNSReference, nameURI);
             return 0;
@@ -5760,7 +5763,7 @@
         // http://www.w3.org/TR/xmlschema-1/#src-resolve
         unsigned int uriId = fURIStringPool->addOrFind(uriStr);
 
-        if (!fSchemaInfo->isImportingNS(uriId)) {
+        if (!isImportingNS(uriId)) {
 
             reportSchemaError(elem, XMLUni::fgXMLErrDomain, XMLErrs::InvalidNSReference, uriStr);
             return;
@@ -6410,7 +6413,7 @@
             // http://www.w3.org/TR/xmlschema-1/#src-resolve
             unsigned int uriId = fURIStringPool->addOrFind(uriStr);
 
-            if (!fSchemaInfo->isImportingNS(uriId)) {
+            if (!isImportingNS(uriId)) {
 
                 reportSchemaError(elem, XMLUni::fgXMLErrDomain, XMLErrs::InvalidNSReference, uriStr);
                 throw TraverseSchema::InvalidComplexTypeInfo;
@@ -7097,7 +7100,7 @@
         // http://www.w3.org/TR/xmlschema-1/#src-resolve
         unsigned int uriId = fURIStringPool->addOrFind(uriStr);
 
-        if (!fSchemaInfo->isImportingNS(uriId)) {
+        if (!isImportingNS(uriId)) {
 
             reportSchemaError(elem, XMLUni::fgXMLErrDomain, XMLErrs::InvalidNSReference, uriStr);
             return 0;
@@ -7196,7 +7199,7 @@
         // http://www.w3.org/TR/xmlschema-1/#src-resolve
         unsigned int uriId = fURIStringPool->addOrFind(uriStr);
 
-        if (!fSchemaInfo->isImportingNS(uriId)) {
+        if (!isImportingNS(uriId)) {
 
             reportSchemaError(elem, XMLUni::fgXMLErrDomain, XMLErrs::InvalidNSReference, uriStr);
             return 0;
@@ -8657,6 +8660,7 @@
     }
 
     delete fNonXSAttList;
+    delete fImportedNSList;
     delete fNotationRegistry;
     delete fRedefineComponents;
     delete fIdentityConstraintNames;

Modified: xerces/c/trunk/src/xercesc/validators/schema/TraverseSchema.hpp
URL: http://svn.apache.org/viewvc/xerces/c/trunk/src/xercesc/validators/schema/TraverseSchema.hpp?rev=804249&r1=804248&r2=804249&view=diff
==============================================================================
--- xerces/c/trunk/src/xercesc/validators/schema/TraverseSchema.hpp (original)
+++ xerces/c/trunk/src/xercesc/validators/schema/TraverseSchema.hpp Fri Aug 14 15:01:36 2009
@@ -237,6 +237,12 @@
     //  Private Helper methods
     // -----------------------------------------------------------------------
     /**
+      * Keep track of the xs:import found
+      */
+    bool isImportingNS(const int namespaceURI);
+    void addImportedNS(const int namespaceURI);
+
+    /**
       * Retrived the Namespace mapping from the schema element
       */
     bool retrieveNamespaceMapping(const DOMElement* const elem);
@@ -756,6 +762,7 @@
     ValueVectorOf<const DOMElement*>*              fDeclStack;
     ValueVectorOf<unsigned int>**                  fGlobalDeclarations;
     ValueVectorOf<DOMNode*>*                       fNonXSAttList;
+    ValueVectorOf<int>*                            fImportedNSList;
     RefHashTableOf<ValueVectorOf<DOMElement*>, PtrHasher>* fIC_NodeListNS;
     RefHash2KeysTableOf<XMLCh>*                    fNotationRegistry;
     RefHash2KeysTableOf<XMLCh>*                    fRedefineComponents;
@@ -916,6 +923,24 @@
     }
 }
 
+inline bool TraverseSchema::isImportingNS(const int namespaceURI) {
+
+    if (!fImportedNSList)
+        return false;
+
+    return (fImportedNSList->containsElement(namespaceURI));
+}
+
+inline void TraverseSchema::addImportedNS(const int namespaceURI) {
+
+    if (!fImportedNSList) {
+        fImportedNSList = new (fMemoryManager) ValueVectorOf<int>(4, fMemoryManager);
+    }
+
+    if (!fImportedNSList->containsElement(namespaceURI))
+        fImportedNSList->addElement(namespaceURI);
+}
+
 XERCES_CPP_NAMESPACE_END
 
 #endif



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@xerces.apache.org
For additional commands, e-mail: commits-help@xerces.apache.org