/* * Copyright 1999-2000,2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /* * $Id: XMLResourceIdentifier.hpp 231514 2005-08-11 20:53:29Z amassari $ */ #ifndef XMLRESOURCEIDENTIFIER_HPP #define XMLRESOURCEIDENTIFIER_HPP XERCES_CPP_NAMESPACE_BEGIN class Locator; /** *
This class is used along with XMLEntityResolver to resolve entities. * Instead of passing publicId and systemId on the resolveEntity call, * as is done with the SAX entity resolver, an object of type XMLResourceIdentifier * is passed. By calling the getResourceIdentifierType() method the user can * determine which data members are available for inspection:
* *| ResourceIdentifierType* | Available Data Members* | 
| SchemaGrammar* | schemaLocation, nameSpace & baseURI (current document)* | 
| SchemaImport* | schemaLocation, nameSpace & baseURI (current document)* | 
| SchemaInclude* | schemaLocation & baseURI (current document)* | 
| SchemaRedefine* | schemaLocation & baseURI (current document)* | 
| ExternalEntity* | systemId, publicId & baseURI (some items may be NULL)* | 
The following resolver would provide the application * with a special character stream for the entity with the system * identifier "http://www.myhost.com/today":
* *
  * #include 
  * #include 
  *
  * class MyResolver : public XMLEntityResolver {
  *  public:
  *   InputSource resolveEntity (XMLResourceIdentifier* xmlri);
  *   ...
  *  };
  *
  *  MyResolver::resolveEntity(XMLResourceIdentifier* xmlri) {
  *   switch(xmlri->getResourceIdentifierType()) {
  *    case XMLResourceIdentifier::SystemId:
  *     if (XMLString::compareString(xmlri->getSystemId(), "http://www.myhost.com/today")) {
  *      MyReader* reader = new MyReader();
  *      return new InputSource(reader);
  *     } else {
  *      return null;
  *     }
  *     break;
  *    default:
  *     return null;
  *   }
  *  }
  *
  * @see SAXParser#setXMLEntityResolver
  * @see InputSource#InputSource
  */
class XMLUTIL_EXPORT XMLResourceIdentifier
{
public:
    /** @name Public Constants */
    //@{
    enum ResourceIdentifierType {
        SchemaGrammar = 0,
        SchemaImport,
        SchemaInclude,
        SchemaRedefine ,
        ExternalEntity,
        UnKnown = 255    
    };
    //@}
   
    /** @name Constructors and Destructor */
    //@{
    /** Constructor */
    XMLResourceIdentifier(const ResourceIdentifierType resourceIdentitiferType
                            , const XMLCh* const  systemId
                            , const XMLCh* const  nameSpace = 0
                            , const XMLCh* const  publicId = 0
                            , const XMLCh* const  baseURI = 0
                            , const Locator*      locator = 0);
    /** Destructor */
    ~XMLResourceIdentifier()
    {
    }
    //@}
    // -----------------------------------------------------------------------
    //  Getter methods
    // -----------------------------------------------------------------------
    /** @name Public Methods */
    //@{
    ResourceIdentifierType getResourceIdentifierType() const;
    const XMLCh* getPublicId()          const;
    const XMLCh* getSystemId()          const;
    const XMLCh* getSchemaLocation()    const;
    const XMLCh* getBaseURI()           const;
    const XMLCh* getNameSpace()         const;
    const Locator* getLocator()         const;
    //@}
private :
    const ResourceIdentifierType    fResourceIdentifierType;
    const XMLCh*                    fPublicId;
    const XMLCh*                    fSystemId;
    const XMLCh*                    fBaseURI;
    const XMLCh*                    fNameSpace;
    const Locator*                  fLocator;
    /* Unimplemented constructors and operators */
    /* Copy constructor */
    XMLResourceIdentifier(const XMLResourceIdentifier&);
    /* Assignment operator */
    XMLResourceIdentifier& operator=(const XMLResourceIdentifier&);
};
inline XMLResourceIdentifier::ResourceIdentifierType XMLResourceIdentifier::getResourceIdentifierType() const 
{
    return fResourceIdentifierType;
}
inline const XMLCh* XMLResourceIdentifier::getPublicId() const
{
    return fPublicId;
}
inline const XMLCh* XMLResourceIdentifier::getSystemId() const
{
    return fSystemId;
}
inline const XMLCh* XMLResourceIdentifier::getSchemaLocation() const
{
    return fSystemId;
}
inline const XMLCh* XMLResourceIdentifier::getBaseURI() const
{
    return fBaseURI;
}
inline const XMLCh* XMLResourceIdentifier::getNameSpace() const
{
    return fNameSpace;
}
inline const Locator* XMLResourceIdentifier::getLocator() const
{
    return fLocator;
}
inline XMLResourceIdentifier::XMLResourceIdentifier(const ResourceIdentifierType resourceIdentifierType
                            , const XMLCh* const  systemId
                            , const XMLCh* const  nameSpace
                            , const XMLCh* const  publicId
                            , const XMLCh* const  baseURI
                            , const Locator*      locator )
    : fResourceIdentifierType(resourceIdentifierType)
    , fPublicId(publicId)
    , fSystemId(systemId)
    , fBaseURI(baseURI)     
    , fNameSpace(nameSpace)
    , fLocator(locator)
{
}
XERCES_CPP_NAMESPACE_END
#endif