/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You 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 527149 2007-04-10 14:56:39Z amassari $ */ #if !defined(XERCESC_INCLUDE_GUARD_XMLRESOURCEIDENTIFIER_HPP) #define XERCESC_INCLUDE_GUARD_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