cargilld    2004/09/27 19:14:14

  Modified:    c/src/xercesc/framework MemBufInputSource.cpp
                        MemBufInputSource.hpp
               c/src/xercesc/framework/psvi XSAnnotation.cpp
               c/src/xercesc/internal XMLScanner.cpp XMLScanner.hpp
               c/src/xercesc/parsers AbstractDOMParser.cpp
                        AbstractDOMParser.hpp DOMBuilderImpl.cpp
                        SAX2XMLReaderImpl.cpp SAXParser.cpp SAXParser.hpp
               c/src/xercesc/util XMLUni.cpp XMLUni.hpp
               c/src/xercesc/validators/schema SchemaGrammar.hpp
                        TraverseSchema.cpp TraverseSchema.hpp
  Log:
  Add support for validating annotations.
  
  Revision  Changes    Path
  1.7       +9 -0      xml-xerces/c/src/xercesc/framework/MemBufInputSource.cpp
  
  Index: MemBufInputSource.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/src/xercesc/framework/MemBufInputSource.cpp,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- MemBufInputSource.cpp     8 Sep 2004 13:55:57 -0000       1.6
  +++ MemBufInputSource.cpp     28 Sep 2004 02:14:13 -0000      1.7
  @@ -16,6 +16,9 @@
   
   /**
    * $Log$
  + * Revision 1.7  2004/09/28 02:14:13  cargilld
  + * Add support for validating annotations.
  + *
    * Revision 1.6  2004/09/08 13:55:57  peiyongz
    * Apache License Version 2.0
    *
  @@ -93,6 +96,12 @@
           delete [] (XMLByte*)fSrcBytes;
   }
   
  +void MemBufInputSource::resetMemBufInputSource(const   XMLByte* const  srcDocBytes
  +                                , const unsigned int    byteCount)
  +{
  +    fByteCount = byteCount;
  +    fSrcBytes  = srcDocBytes;
  +}
   
   // ---------------------------------------------------------------------------
   //  MemBufInputSource: InputSource interface implementation
  
  
  
  1.9       +14 -0     xml-xerces/c/src/xercesc/framework/MemBufInputSource.hpp
  
  Index: MemBufInputSource.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/src/xercesc/framework/MemBufInputSource.hpp,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- MemBufInputSource.hpp     8 Sep 2004 13:55:57 -0000       1.8
  +++ MemBufInputSource.hpp     28 Sep 2004 02:14:13 -0000      1.9
  @@ -16,6 +16,9 @@
   
   /*
    * $Log$
  + * Revision 1.9  2004/09/28 02:14:13  cargilld
  + * Add support for validating annotations.
  + *
    * Revision 1.8  2004/09/08 13:55:57  peiyongz
    * Apache License Version 2.0
    *
  @@ -217,6 +220,17 @@
         */
       void setCopyBufToStream(const bool newState);
   
  +    /**
  +      * This methods allows the MemBufInputSource to be used for more than
  +      * one input source, instead of destructing/constructing another
  +      * MemBufInputSource.
  +      *
  +      * @param  srcDocBytes     The actual data buffer to be parsed from.
  +      * @param  byteCount       The count of bytes (not characters, bytes!)
  +      *                         in the buffer.     
  +      */
  +    void resetMemBufInputSource(const   XMLByte* const  srcDocBytes
  +                                , const unsigned int    byteCount);
       //@}
   
   
  
  
  
  1.11      +5 -0      xml-xerces/c/src/xercesc/framework/psvi/XSAnnotation.cpp
  
  Index: XSAnnotation.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/src/xercesc/framework/psvi/XSAnnotation.cpp,v
  retrieving revision 1.10
  retrieving revision 1.11
  diff -u -r1.10 -r1.11
  --- XSAnnotation.cpp  8 Sep 2004 13:56:07 -0000       1.10
  +++ XSAnnotation.cpp  28 Sep 2004 02:14:13 -0000      1.11
  @@ -16,6 +16,9 @@
   
   /*
    * $Log$
  + * Revision 1.11  2004/09/28 02:14:13  cargilld
  + * Add support for validating annotations.
  + *
    * Revision 1.10  2004/09/08 13:56:07  peiyongz
    * Apache License Version 2.0
    *
  @@ -114,6 +117,7 @@
           , fMemoryManager
       );
       memBufIS->setEncoding(XMLUni::fgXMLChEncodingString);
  +    memBufIS->setCopyBufToStream(false);
   
       try
       {        
  @@ -148,6 +152,7 @@
           , fMemoryManager
       );
       memBufIS->setEncoding(XMLUni::fgXMLChEncodingString);
  +    memBufIS->setCopyBufToStream(false);
   
       try
       {        
  
  
  
  1.70      +3 -1      xml-xerces/c/src/xercesc/internal/XMLScanner.cpp
  
  Index: XMLScanner.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/src/xercesc/internal/XMLScanner.cpp,v
  retrieving revision 1.69
  retrieving revision 1.70
  diff -u -r1.69 -r1.70
  --- XMLScanner.cpp    23 Sep 2004 01:09:55 -0000      1.69
  +++ XMLScanner.cpp    28 Sep 2004 02:14:13 -0000      1.70
  @@ -141,6 +141,7 @@
       , fLoadExternalDTD(true)
       , fNormalizeData(true)
       , fGenerateSyntheticAnnotations(false)
  +    , fValidateAnnotations(false)
       , fErrorCount(0)
       , fEntityExpansionLimit(0)
       , fEntityExpansionCount(0)
  @@ -220,6 +221,7 @@
        , fLoadExternalDTD(true)
       , fNormalizeData(true)
       , fGenerateSyntheticAnnotations(false)
  +    , fValidateAnnotations(false)
       , fErrorCount(0)
       , fEntityExpansionLimit(0)
       , fEntityExpansionCount(0)
  
  
  
  1.39      +16 -0     xml-xerces/c/src/xercesc/internal/XMLScanner.hpp
  
  Index: XMLScanner.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/src/xercesc/internal/XMLScanner.hpp,v
  retrieving revision 1.38
  retrieving revision 1.39
  diff -u -r1.38 -r1.39
  --- XMLScanner.hpp    23 Sep 2004 01:09:55 -0000      1.38
  +++ XMLScanner.hpp    28 Sep 2004 02:14:13 -0000      1.39
  @@ -16,6 +16,9 @@
   
   /*
    * $Log$
  + * Revision 1.39  2004/09/28 02:14:13  cargilld
  + * Add support for validating annotations.
  + *
    * Revision 1.38  2004/09/23 01:09:55  cargilld
    * Add support for generating synthetic XSAnnotations.  When a schema component has 
non-schema attributes and no child attributes create a synthetic XSAnnotation (under 
feature control) so the non-schema attributes can be recovered under PSVI.
    *
  @@ -517,6 +520,7 @@
       const XMLCh* getPrefixForId(unsigned int prefId) const;
   
       bool getGenerateSyntheticAnnotations() const;
  +    bool getValidateAnnotations() const;
   
       // -----------------------------------------------------------------------
       //  Getter methods
  @@ -612,6 +616,7 @@
       void setStandardUriConformant(const bool newValue);
   
       void setGenerateSyntheticAnnotations(const bool newValue);
  +    void setValidateAnnotations(const bool newValue);
   
       // -----------------------------------------------------------------------
       //  Mutator methods
  @@ -965,6 +970,7 @@
       bool                        fLoadExternalDTD;
       bool                        fNormalizeData;
       bool                        fGenerateSyntheticAnnotations;
  +    bool                        fValidateAnnotations;
       int                         fErrorCount;
       unsigned int                fEntityExpansionLimit;
       unsigned int                fEntityExpansionCount;
  @@ -1315,6 +1321,11 @@
       return fGenerateSyntheticAnnotations;
   }
   
  +inline bool XMLScanner::getValidateAnnotations() const
  +{
  +    return fValidateAnnotations;
  +}
  +
   // ---------------------------------------------------------------------------
   //  XMLScanner: Setter methods
   // ---------------------------------------------------------------------------
  @@ -1471,6 +1482,11 @@
   inline void XMLScanner::setGenerateSyntheticAnnotations(const bool newValue)
   {
       fGenerateSyntheticAnnotations = newValue;
  +}
  +
  +inline void XMLScanner::setValidateAnnotations(const bool newValue)
  +{
  +    fValidateAnnotations = newValue;
   }
   
   // ---------------------------------------------------------------------------
  
  
  
  1.68      +11 -1     xml-xerces/c/src/xercesc/parsers/AbstractDOMParser.cpp
  
  Index: AbstractDOMParser.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/src/xercesc/parsers/AbstractDOMParser.cpp,v
  retrieving revision 1.67
  retrieving revision 1.68
  diff -u -r1.67 -r1.68
  --- AbstractDOMParser.cpp     23 Sep 2004 01:09:55 -0000      1.67
  +++ AbstractDOMParser.cpp     28 Sep 2004 02:14:13 -0000      1.68
  @@ -235,6 +235,11 @@
       return fScanner->getGenerateSyntheticAnnotations();
   }
   
  +bool AbstractDOMParser::getValidateAnnotations() const
  +{
  +    return fScanner->getValidateAnnotations();
  +}
  +
   bool AbstractDOMParser::getExitOnFirstFatalError() const
   {
       return fScanner->getExitOnFirstFatal();
  @@ -331,6 +336,11 @@
   void AbstractDOMParser::setGenerateSyntheticAnnotations(const bool newState)
   {
       fScanner->setGenerateSyntheticAnnotations(newState);
  +}
  +
  +void AbstractDOMParser::setValidateAnnotations(const bool newState)
  +{
  +    fScanner->setValidateAnnotations(newState);
   }
   
   void AbstractDOMParser::setExitOnFirstFatalError(const bool newState)
  
  
  
  1.35      +21 -3     xml-xerces/c/src/xercesc/parsers/AbstractDOMParser.hpp
  
  Index: AbstractDOMParser.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/src/xercesc/parsers/AbstractDOMParser.hpp,v
  retrieving revision 1.34
  retrieving revision 1.35
  diff -u -r1.34 -r1.35
  --- AbstractDOMParser.hpp     23 Sep 2004 01:09:55 -0000      1.34
  +++ AbstractDOMParser.hpp     28 Sep 2004 02:14:14 -0000      1.35
  @@ -408,7 +408,7 @@
         */
       bool  getCreateSchemaInfo() const;
   
  -    /** Get the 'generate synthetic validations' flag
  +    /** Get the 'generate synthetic annotations' flag
         *    
         * @return true, if the parser is currently configured to
         *         generate synthetic annotations, false otherwise.
  @@ -421,6 +421,15 @@
         */
       bool getGenerateSyntheticAnnotations() const;
   
  +    /** Get the 'validate annotations' flag
  +      *    
  +      * @return true, if the parser is currently configured to
  +      *         validate annotations, false otherwise.
  +      *
  +      * @see #setValidateAnnotations
  +      */
  +    bool getValidateAnnotations() const;
  +
       //@}
   
   
  @@ -430,7 +439,7 @@
   
       /** @name Setter methods */
       //@{
  -    /** set the 'generate synthetic validations' flag
  +    /** set the 'generate synthetic annotations' flag
         *    
         * @param newValue The value for specifying whether Synthetic Annotations
         *        should be generated or not.
  @@ -442,6 +451,15 @@
         * @see #getGenerateSyntheticAnnotations
         */
       void setGenerateSyntheticAnnotations(const bool newValue);
  +
  +    /** set the 'validlate annotations' flag
  +      *    
  +      * @param newValue The value for specifying whether Annotations
  +      *        should be validated or not.
  +      *
  +      * @see #getValidateAnnotations
  +      */
  +    void setValidateAnnotations(const bool newValue);
   
       /** Set the 'do namespaces' flag
         *
  
  
  
  1.40      +9 -1      xml-xerces/c/src/xercesc/parsers/DOMBuilderImpl.cpp
  
  Index: DOMBuilderImpl.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/src/xercesc/parsers/DOMBuilderImpl.cpp,v
  retrieving revision 1.39
  retrieving revision 1.40
  diff -u -r1.39 -r1.40
  --- DOMBuilderImpl.cpp        23 Sep 2004 01:09:55 -0000      1.39
  +++ DOMBuilderImpl.cpp        28 Sep 2004 02:14:14 -0000      1.40
  @@ -235,6 +235,10 @@
       {
           getScanner()->setGenerateSyntheticAnnotations(state);
       }
  +    else if (XMLString::compareIString(name, XMLUni::fgXercesValidateAnnotations) 
== 0)
  +    {
  +        getScanner()->setValidateAnnotations(state);
  +    }
       else {
           throw DOMException(DOMException::NOT_FOUND_ERR, 0, getMemoryManager());
       }
  @@ -328,6 +332,10 @@
       else if (XMLString::compareIString(name, 
XMLUni::fgXercesGenerateSyntheticAnnotations) == 0)
       {
           return getScanner()->getGenerateSyntheticAnnotations();
  +    }
  +    else if (XMLString::compareIString(name, XMLUni::fgXercesValidateAnnotations) 
== 0)
  +    {
  +        return getScanner()->getValidateAnnotations();
       }
       else {
           throw DOMException(DOMException::NOT_FOUND_ERR, 0, getMemoryManager());
  
  
  
  1.37      +9 -0      xml-xerces/c/src/xercesc/parsers/SAX2XMLReaderImpl.cpp
  
  Index: SAX2XMLReaderImpl.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/src/xercesc/parsers/SAX2XMLReaderImpl.cpp,v
  retrieving revision 1.36
  retrieving revision 1.37
  diff -u -r1.36 -r1.37
  --- SAX2XMLReaderImpl.cpp     23 Sep 2004 01:09:55 -0000      1.36
  +++ SAX2XMLReaderImpl.cpp     28 Sep 2004 02:14:14 -0000      1.37
  @@ -16,6 +16,9 @@
   
   /*
    * $Log$
  + * Revision 1.37  2004/09/28 02:14:14  cargilld
  + * Add support for validating annotations.
  + *
    * Revision 1.36  2004/09/23 01:09:55  cargilld
    * Add support for generating synthetic XSAnnotations.  When a schema component has 
non-schema attributes and no child attributes create a synthetic XSAnnotation (under 
feature control) so the non-schema attributes can be recovered under PSVI.
    *
  @@ -1564,6 +1567,10 @@
       {
           fScanner->setGenerateSyntheticAnnotations(value);
       }
  +    else if (XMLString::compareIString(name, XMLUni::fgXercesValidateAnnotations) 
== 0)
  +    {
  +        fScanner->setValidateAnnotations(value);
  +    }
       else
          throw SAXNotRecognizedException("Unknown Feature", fMemoryManager);
   }
  @@ -1600,6 +1607,8 @@
           return fScanner->getStandardUriConformant();
       else if (XMLString::compareIString(name, 
XMLUni::fgXercesGenerateSyntheticAnnotations) == 0)
           return fScanner->getGenerateSyntheticAnnotations();
  +    else if (XMLString::compareIString(name, XMLUni::fgXercesValidateAnnotations) 
== 0)
  +        return fScanner->getValidateAnnotations();
       else
          throw SAXNotRecognizedException("Unknown Feature", fMemoryManager);
   
  
  
  
  1.35      +13 -0     xml-xerces/c/src/xercesc/parsers/SAXParser.cpp
  
  Index: SAXParser.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/src/xercesc/parsers/SAXParser.cpp,v
  retrieving revision 1.34
  retrieving revision 1.35
  diff -u -r1.34 -r1.35
  --- SAXParser.cpp     23 Sep 2004 01:09:55 -0000      1.34
  +++ SAXParser.cpp     28 Sep 2004 02:14:14 -0000      1.35
  @@ -16,6 +16,9 @@
   
   /*
    * $Log$
  + * Revision 1.35  2004/09/28 02:14:14  cargilld
  + * Add support for validating annotations.
  + *
    * Revision 1.34  2004/09/23 01:09:55  cargilld
    * Add support for generating synthetic XSAnnotations.  When a schema component has 
non-schema attributes and no child attributes create a synthetic XSAnnotation (under 
feature control) so the non-schema attributes can be recovered under PSVI.
    *
  @@ -454,6 +457,11 @@
       return fScanner->getGenerateSyntheticAnnotations();
   }
   
  +bool SAXParser::getValidateAnnotations() const
  +{
  +    return fScanner->getValidateAnnotations();
  +}
  +
   bool SAXParser::getExitOnFirstFatalError() const
   {
       return fScanner->getExitOnFirstFatal();
  @@ -568,6 +576,11 @@
   void SAXParser::setGenerateSyntheticAnnotations(const bool newState)
   {
       fScanner->setGenerateSyntheticAnnotations(newState);
  +}
  +
  +void SAXParser::setValidateAnnotations(const bool newState)
  +{
  +    fScanner->setValidateAnnotations(newState);
   }
   
   void SAXParser::setExitOnFirstFatalError(const bool newState)
  
  
  
  1.34      +23 -2     xml-xerces/c/src/xercesc/parsers/SAXParser.hpp
  
  Index: SAXParser.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/src/xercesc/parsers/SAXParser.hpp,v
  retrieving revision 1.33
  retrieving revision 1.34
  diff -u -r1.33 -r1.34
  --- SAXParser.hpp     23 Sep 2004 01:09:55 -0000      1.33
  +++ SAXParser.hpp     28 Sep 2004 02:14:14 -0000      1.34
  @@ -16,6 +16,9 @@
   
   /*
    * $Log$
  + * Revision 1.34  2004/09/28 02:14:14  cargilld
  + * Add support for validating annotations.
  + *
    * Revision 1.33  2004/09/23 01:09:55  cargilld
    * Add support for generating synthetic XSAnnotations.  When a schema component has 
non-schema attributes and no child attributes create a synthetic XSAnnotation (under 
feature control) so the non-schema attributes can be recovered under PSVI.
    *
  @@ -645,7 +648,7 @@
        */
       unsigned int getSrcOffset() const;
   
  -    /** Get the 'generate synthetic validations' flag
  +    /** Get the 'generate synthetic annotations' flag
         *    
         * @return true, if the parser is currently configured to
         *         generate synthetic annotations, false otherwise.
  @@ -658,6 +661,15 @@
         */
       bool getGenerateSyntheticAnnotations() const;
   
  +    /** Get the 'validate annotations' flag
  +      *    
  +      * @return true, if the parser is currently configured to
  +      *         validate annotations, false otherwise.
  +      *
  +      * @see #setValidateAnnotations
  +      */
  +    bool getValidateAnnotations() const;
  +
       //@}
   
   
  @@ -667,7 +679,7 @@
   
       /** @name Setter methods */
       //@{
  -    /** set the 'generate synthetic validations' flag
  +    /** set the 'generate synthetic annotations' flag
         *    
         * @param newValue The value for specifying whether Synthetic Annotations
         *        should be generated or not.
  @@ -678,6 +690,15 @@
         * @see #getGenerateSyntheticAnnotations
         */
       void setGenerateSyntheticAnnotations(const bool newValue);
  +
  +    /** set the 'validate annotations' flag
  +      *    
  +      * @param newValue The value for specifying whether annotations
  +      *        should be validate or not.
  +      *
  +      * @see #getValidateAnnotations
  +      */
  +    void setValidateAnnotations(const bool newValue);
   
       /**
         * This method allows users to enable or disable the parser's
  
  
  
  1.45      +22 -1     xml-xerces/c/src/xercesc/util/XMLUni.cpp
  
  Index: XMLUni.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/src/xercesc/util/XMLUni.cpp,v
  retrieving revision 1.44
  retrieving revision 1.45
  diff -u -r1.44 -r1.45
  --- XMLUni.cpp        23 Sep 2004 01:09:56 -0000      1.44
  +++ XMLUni.cpp        28 Sep 2004 02:14:14 -0000      1.45
  @@ -683,6 +683,13 @@
       ,   chLatin_c, chLatin_a, chLatin_n, chLatin_n, chLatin_e, chLatin_r, chNull
   };
   
  +const XMLCh XMLUni::fgXSAXMLScanner[] =
  +{
  +        chLatin_X, chLatin_S, chLatin_A
  +    ,   chLatin_X, chLatin_M, chLatin_L, chLatin_S
  +    ,   chLatin_c, chLatin_a, chLatin_n, chLatin_n, chLatin_e, chLatin_r, chNull
  +};
  +
   const XMLCh XMLUni::fgCDataStart[] =
   {
           chOpenAngle, chBang, chOpenSquare, chLatin_C, chLatin_D
  @@ -1106,6 +1113,20 @@
       ,   chForwardSlash, chLatin_g, chLatin_e, chLatin_n, chLatin_e, chLatin_r
       ,   chLatin_a, chLatin_t, chLatin_e, chDash, chLatin_s, chLatin_y, chLatin_n
       ,   chLatin_t, chLatin_h, chLatin_e, chLatin_t, chLatin_i, chLatin_c, chDash 
  +    ,   chLatin_a, chLatin_n, chLatin_n, chLatin_o, chLatin_t, chLatin_a, chLatin_t
  +    ,   chLatin_i, chLatin_o, chLatin_n, chLatin_s, chNull
  +};
  +
  +const XMLCh XMLUni::fgXercesValidateAnnotations[] =
  +//Xerces: http://apache.org/xml/features/validate-annotations
  +{
  +        chLatin_h, chLatin_t, chLatin_t, chLatin_p, chColon, chForwardSlash
  +    ,   chForwardSlash, chLatin_a, chLatin_p, chLatin_a, chLatin_c, chLatin_h
  +    ,   chLatin_e, chPeriod, chLatin_o, chLatin_r, chLatin_g, chForwardSlash
  +    ,   chLatin_x, chLatin_m, chLatin_l, chForwardSlash, chLatin_f, chLatin_e
  +    ,   chLatin_a, chLatin_t, chLatin_u, chLatin_r, chLatin_e, chLatin_s
  +    ,   chForwardSlash, chLatin_v, chLatin_a, chLatin_l, chLatin_i, chLatin_d
  +    ,   chLatin_a, chLatin_t, chLatin_e, chDash
       ,   chLatin_a, chLatin_n, chLatin_n, chLatin_o, chLatin_t, chLatin_a, chLatin_t
       ,   chLatin_i, chLatin_o, chLatin_n, chLatin_s, chNull
   };
  
  
  
  1.40      +4 -1      xml-xerces/c/src/xercesc/util/XMLUni.hpp
  
  Index: XMLUni.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/src/xercesc/util/XMLUni.hpp,v
  retrieving revision 1.39
  retrieving revision 1.40
  diff -u -r1.39 -r1.40
  --- XMLUni.hpp        23 Sep 2004 01:09:56 -0000      1.39
  +++ XMLUni.hpp        28 Sep 2004 02:14:14 -0000      1.40
  @@ -164,6 +164,7 @@
       static const XMLCh fgIGXMLScanner[];
       static const XMLCh fgSGXMLScanner[];
       static const XMLCh fgDGXMLScanner[];
  +    static const XMLCh fgXSAXMLScanner[];
       static const XMLCh fgCDataStart[];
       static const XMLCh fgCDataEnd[];
   
  @@ -221,6 +222,8 @@
       static const XMLCh fgXercesStandardUriConformant[];
       static const XMLCh fgXercesDOMHasPSVIInfo[];
       static const XMLCh fgXercesGenerateSyntheticAnnotations[];
  +    static const XMLCh fgXercesValidateAnnotations[];
  +
   
       // SAX2 features/properties names
       static const XMLCh fgSAX2CoreValidation[];
  
  
  
  1.17      +18 -0     xml-xerces/c/src/xercesc/validators/schema/SchemaGrammar.hpp
  
  Index: SchemaGrammar.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/src/xercesc/validators/schema/SchemaGrammar.hpp,v
  retrieving revision 1.16
  retrieving revision 1.17
  diff -u -r1.16 -r1.17
  --- SchemaGrammar.hpp 8 Sep 2004 13:56:56 -0000       1.16
  +++ SchemaGrammar.hpp 28 Sep 2004 02:14:14 -0000      1.17
  @@ -16,6 +16,9 @@
   
   /*
    * $Log$
  + * Revision 1.17  2004/09/28 02:14:14  cargilld
  + * Add support for validating annotations.
  + *
    * Revision 1.16  2004/09/08 13:56:56  peiyongz
    * Apache License Version 2.0
    *
  @@ -325,6 +328,12 @@
       XSAnnotation* getAnnotation();
       const XSAnnotation* getAnnotation() const;
   
  +    /** 
  +      * Get annotation hash table, to enumerate through them
  +      */
  +    RefHashTableOf<XSAnnotation>*  getAnnotations();
  +    const RefHashTableOf<XSAnnotation>*  getAnnotations() const;
  +
       /***
        * Support for Serialization/De-serialization
        ***/
  @@ -508,6 +517,15 @@
       return fAnnotations->get(this);
   }
   
  +inline RefHashTableOf<XSAnnotation>* SchemaGrammar::getAnnotations()
  +{
  +    return fAnnotations;
  +}
  +
  +inline const RefHashTableOf<XSAnnotation>* SchemaGrammar::getAnnotations() const
  +{
  +    return fAnnotations;
  +}
   // -----------------------------------------------------------------------
   //  Setter methods
   // -----------------------------------------------------------------------
  
  
  
  1.118     +140 -19   xml-xerces/c/src/xercesc/validators/schema/TraverseSchema.cpp
  
  Index: TraverseSchema.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/src/xercesc/validators/schema/TraverseSchema.cpp,v
  retrieving revision 1.117
  retrieving revision 1.118
  diff -u -r1.117 -r1.118
  --- TraverseSchema.cpp        23 Sep 2004 11:25:17 -0000      1.117
  +++ TraverseSchema.cpp        28 Sep 2004 02:14:14 -0000      1.118
  @@ -56,6 +56,8 @@
   #include <xercesc/util/XMLEntityResolver.hpp>
   #include <xercesc/util/XMLUri.hpp>
   #include <xercesc/framework/psvi/XSAnnotation.hpp>
  +#include <xercesc/framework/MemBufInputSource.hpp>
  +#include <xercesc/internal/XSAXMLScanner.hpp>
   
   XERCES_CPP_NAMESPACE_BEGIN
   
  @@ -141,19 +143,6 @@
       SchemaSymbols::fgELT_KEYREF
   };
   
  -const XMLCh fgAnnotation[] =
  -{
  -    chLatin_a, chLatin_n, chLatin_n, chLatin_o, chLatin_t, chLatin_a, chLatin_t
  -    ,   chLatin_i, chLatin_o, chLatin_n, chNull
  -};
  -
  -const XMLCh fgDocumentation[] =
  -{
  -    chLatin_d, chLatin_o, chLatin_c, chLatin_u, chLatin_m, chLatin_e
  -    ,   chLatin_n, chLatin_t, chLatin_a, chLatin_t
  -    ,   chLatin_i, chLatin_o, chLatin_n, chNull
  -};
  -
   const XMLCh fgSynthetic_Annotation[] =
   {
       chLatin_S, chLatin_y, chLatin_n, chLatin_t, chLatin_h, chLatin_e, chLatin_t
  @@ -293,6 +282,10 @@
           }
       }
   
  +    if (fScanner->getValidateAnnotations() && 
!fSchemaGrammar->getAnnotations()->isEmpty())
  +    {
  +        validateAnnotations();
  +    }
       fSchemaInfo->setProcessed();
   }
   
  @@ -4655,7 +4648,7 @@
       } // for each child node
   
   
  -    if (fSchemaInfo->getNonXSAttList()->size() && !sawAnnotation)
  +    if (fScanner->getGenerateSyntheticAnnotations() && 
fSchemaInfo->getNonXSAttList()->size() && !sawAnnotation)
       {
           // synthesize a global annotation here.
           fSchemaGrammar->addAnnotation(
  @@ -8743,7 +8736,7 @@
           fBuffer.append(prefix);
           fBuffer.append(chColon);
       }
  -    fBuffer.append(fgAnnotation);
  +    fBuffer.append(SchemaSymbols::fgELT_ANNOTATION);
   
       // next is the nonXSAttList names & values
       unsigned int nonXSAttSize = nonXSAttList->size();
  @@ -8841,7 +8834,7 @@
           fBuffer.append(prefix);
           fBuffer.append(chColon);
       }
  -    fBuffer.append(fgDocumentation);
  +    fBuffer.append(SchemaSymbols::fgELT_DOCUMENTATION);
       fBuffer.append(chCloseAngle);
       fBuffer.append(fgSynthetic_Annotation);
       fBuffer.append(chOpenAngle);
  @@ -8851,7 +8844,7 @@
           fBuffer.append(prefix);
           fBuffer.append(chColon);
       }
  -    fBuffer.append(fgDocumentation);
  +    fBuffer.append(SchemaSymbols::fgELT_DOCUMENTATION);
       fBuffer.append(chCloseAngle);
       fBuffer.append(chLF);
       fBuffer.append(chOpenAngle);
  @@ -8861,7 +8854,7 @@
           fBuffer.append(prefix);
           fBuffer.append(chColon);
       }
  -    fBuffer.append(fgAnnotation);
  +    fBuffer.append(SchemaSymbols::fgELT_ANNOTATION);
       fBuffer.append(chCloseAngle);
   
       XSAnnotation* annot = new (fGrammarPoolMemoryManager) 
XSAnnotation(fBuffer.getRawBuffer(), fGrammarPoolMemoryManager);    
  @@ -8869,6 +8862,134 @@
                        , ((XSDElementNSImpl*)elem)->getColumnNo() );
       annot->setSystemId(fSchemaInfo->getCurrentSchemaURL());
       return annot;
  +}
  +
  +void TraverseSchema::validateAnnotations() {
  +           
  +    MemoryManager  *memMgr = fMemoryManager;
  +    RefHashTableOfEnumerator<XSAnnotation> xsAnnotationEnum = 
RefHashTableOfEnumerator<XSAnnotation> (fSchemaGrammar->getAnnotations(), false, 
memMgr);    
  +    XSAnnotation& xsAnnot = xsAnnotationEnum.nextElement();
  +
  +    // create schema grammar
  +    SchemaGrammar  *grammar = new (memMgr) SchemaGrammar(memMgr);
  +    NamespaceScope *nsScope;
  +    grammar->setComplexTypeRegistry(new (memMgr) 
RefHashTableOf<ComplexTypeInfo>(29, memMgr));
  +    grammar->setGroupInfoRegistry(new (memMgr) RefHashTableOf<XercesGroupInfo>(13, 
memMgr));
  +    grammar->setAttGroupInfoRegistry(new (memMgr) 
RefHashTableOf<XercesAttGroupInfo>(13, memMgr));
  +    grammar->setAttributeDeclRegistry(new (memMgr) RefHashTableOf<XMLAttDef>(29, 
memMgr));
  +    nsScope = new (memMgr) NamespaceScope(memMgr);
  +    nsScope->reset(fEmptyNamespaceURI);
  +    grammar->setNamespaceScope(nsScope);
  +    grammar->setValidSubstitutionGroups(new (memMgr) 
RefHash2KeysTableOf<ElemVector>(29, memMgr));
  +    grammar->setTargetNamespace(SchemaSymbols::fgURI_SCHEMAFORSCHEMA);
  +    XMLSchemaDescription* gramDesc = (XMLSchemaDescription*) 
grammar->getGrammarDescription();
  +    gramDesc->setTargetNamespace(SchemaSymbols::fgURI_SCHEMAFORSCHEMA);
  +
  +    // setup components of annotation grammar
  +    SchemaElementDecl* annotElemDecl = new (memMgr) SchemaElementDecl
  +    (
  +        XMLUni::fgZeroLenString , SchemaSymbols::fgELT_ANNOTATION
  +        , fURIStringPool->addOrFind(SchemaSymbols::fgURI_SCHEMAFORSCHEMA)
  +        , SchemaElementDecl::Mixed_Complex, Grammar::TOP_LEVEL_SCOPE , memMgr
  +    );
  +    annotElemDecl->setCreateReason(XMLElementDecl::Declared);
  +    grammar->putElemDecl(annotElemDecl);    
  +      
  +    ComplexTypeInfo* complexType = new (memMgr) ComplexTypeInfo(memMgr);
  +    complexType->setAnonymous();
  +    complexType->setContentType(SchemaElementDecl::Mixed_Complex);
  +    annotElemDecl->setComplexTypeInfo(complexType);
  +
  +    // Revisit: is this okay for a key?
  +    fBuffer.set(SchemaSymbols::fgURI_SCHEMAFORSCHEMA);
  +    fBuffer.append(chComma);
  +    fBuffer.append(chLatin_C);
  +    fBuffer.append(chDigit_0);        
  +    grammar->getComplexTypeRegistry()->put((void*) fBuffer.getRawBuffer(), 
complexType);
  +
  +    SchemaElementDecl* appInfoElemDecl = new (memMgr) SchemaElementDecl
  +    (
  +        XMLUni::fgZeroLenString , SchemaSymbols::fgELT_APPINFO
  +        , fURIStringPool->addOrFind(SchemaSymbols::fgURI_SCHEMAFORSCHEMA)
  +        , SchemaElementDecl::Any, Grammar::TOP_LEVEL_SCOPE , memMgr
  +    );
  +        
  +    appInfoElemDecl->setCreateReason(XMLElementDecl::Declared);
  +    appInfoElemDecl->setAttWildCard
  +    (
  +        new (memMgr) SchemaAttDef
  +        (
  +            XMLUni::fgZeroLenString, XMLUni::fgZeroLenString,
  +            fEmptyNamespaceURI, XMLAttDef::Any_Any,
  +            XMLAttDef::ProcessContents_Lax, memMgr
  +        )
  +    );
  +    grammar->putElemDecl(appInfoElemDecl);
  +    complexType->addElement(appInfoElemDecl);
  +
  +    SchemaElementDecl* docElemDecl = new (memMgr) SchemaElementDecl
  +    (
  +        XMLUni::fgZeroLenString , SchemaSymbols::fgELT_DOCUMENTATION
  +        , fURIStringPool->addOrFind(SchemaSymbols::fgURI_SCHEMAFORSCHEMA)
  +        , SchemaElementDecl::Any, Grammar::TOP_LEVEL_SCOPE , memMgr
  +    );
  +        
  +    docElemDecl->setCreateReason(XMLElementDecl::Declared);
  +    docElemDecl->setAttWildCard
  +    (
  +        new (memMgr) SchemaAttDef
  +        (
  +            XMLUni::fgZeroLenString, XMLUni::fgZeroLenString,
  +            fEmptyNamespaceURI, XMLAttDef::Any_Any,
  +            XMLAttDef::ProcessContents_Lax, memMgr
  +        )
  +    );
  +    grammar->putElemDecl(docElemDecl);
  +    complexType->addElement(docElemDecl);
  +
  +    ContentSpecNode* left  = new (memMgr) ContentSpecNode(appInfoElemDecl, memMgr);
  +    ContentSpecNode* right = new (memMgr) ContentSpecNode(docElemDecl, memMgr);
  +    ContentSpecNode* root  = new (memMgr) 
ContentSpecNode(ContentSpecNode::ModelGroupChoice
  +                                            , left
  +                                            , right
  +                                            , true
  +                                            , true
  +                                            , memMgr);
  +    root->setMinOccurs(0);
  +    root->setMaxOccurs(SchemaSymbols::XSD_UNBOUNDED);
  +    complexType->setContentSpec(root);
  +
  +    // create input source to scan
  +    MemBufInputSource* memBufIS = new (memMgr) MemBufInputSource
  +    (
  +        (const XMLByte*)xsAnnot.getAnnotationString()
  +        , XMLString::stringLen(xsAnnot.getAnnotationString())*sizeof(XMLCh)       
  +        , SchemaSymbols::fgELT_ANNOTATION
  +        , false
  +        , memMgr
  +        );
  +    memBufIS->setEncoding(XMLUni::fgXMLChEncodingString);
  +    memBufIS->setCopyBufToStream(false);    
  +
  +    XSAXMLScanner *scanner = new (memMgr) XSAXMLScanner
  +    (
  +        fGrammarResolver, fURIStringPool, grammar, memMgr
  +    );
  +
  +    scanner->setErrorReporter(fErrorReporter);
  +
  +    scanner->scanDocument(*memBufIS);
  +
  +    while (xsAnnotationEnum.hasMoreElements())
  +    {
  +        XSAnnotation& xsAnnot = xsAnnotationEnum.nextElement();
  +        memBufIS->resetMemBufInputSource((const 
XMLByte*)xsAnnot.getAnnotationString()
  +                                        , 
XMLString::stringLen(xsAnnot.getAnnotationString())*sizeof(XMLCh));
  +        //scanner->scanDocument(*memBufIS);
  +    }
  +    
  +    delete scanner;
  +    delete memBufIS;
   }
   
   XERCES_CPP_NAMESPACE_END
  
  
  
  1.37      +5 -1      xml-xerces/c/src/xercesc/validators/schema/TraverseSchema.hpp
  
  Index: TraverseSchema.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/src/xercesc/validators/schema/TraverseSchema.hpp,v
  retrieving revision 1.36
  retrieving revision 1.37
  diff -u -r1.36 -r1.37
  --- TraverseSchema.hpp        23 Sep 2004 01:09:56 -0000      1.36
  +++ TraverseSchema.hpp        28 Sep 2004 02:14:14 -0000      1.37
  @@ -686,6 +686,10 @@
       // routine to generate synthetic annotations
       XSAnnotation* generateSyntheticAnnotation(const DOMElement* const elem
                                                , ValueVectorOf<DOMNode*>* 
nonXSAttList);
  +
  +    // routine to validate annotations
  +    void validateAnnotations();
  +
       // -----------------------------------------------------------------------
       //  Private constants
       // -----------------------------------------------------------------------
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to