blob: 3909b633fdca722966180d73f28de626a6f1ab00 [file] [log] [blame]
// SAX entity resolver.
// http://www.saxproject.org
// No warranty; no copyright -- use this as you will.
// $Id: EntityResolver.java,v 1.10 2002/01/30 21:13:44 dbrownell Exp $
using System.IO;
namespace Sax
{
/// <summary>
/// Basic interface for resolving entities.
/// </summary>
/// <remarks>
/// <em>This module, both source code and documentation, is in the
/// Public Domain, and comes with<strong> NO WARRANTY</strong>.</em>
/// See<a href='http://www.saxproject.org'>http://www.saxproject.org</a>
/// for further information.
/// <para/>
/// If a SAX application needs to implement customized handling
/// for external entities, it must implement this interface and
/// register an instance with the SAX driver using the
/// <see cref="IXMLReader.EntityResolver"/>
/// property.
/// <para/>
/// The XML reader will then allow the application to intercept any
/// external entities(including the external DTD subset and external
/// parameter entities, if any) before including them.
/// <para/>
/// Many SAX applications will not need to implement this interface,
/// but it will be especially useful for applications that build
/// XML documents from databases or other specialised input sources,
/// or for applications that use URI types other than URLs.
/// <para/>
/// The following resolver would provide the application
/// with a special character stream for the entity with the system
/// identifier "http://www.myhost.com/today":
///
/// <code>
/// public class MyResolver : IEntityResolver
/// {
/// public InputSource ResolveEntity (string publicId, string systemId)
/// {
/// if (systemId.Equals("http://www.myhost.com/today", StringComparison.Ordinal))
/// {
/// // return a special input source
/// MyReader reader = new MyReader();
/// return new InputSource(reader);
/// }
/// else
/// {
/// // use the default behaviour
/// return null;
/// }
/// }
/// }
/// </code>
/// <para/>
/// The application can also use this interface to redirect system
/// identifiers to local URIs or to look up replacements in a catalog
/// (possibly by using the public identifier).
/// </remarks>
/// <author>David Megginson</author>
/// <version>2.0.1 (sax2r2)</version>
/// <since>SAX 1.0</since>
/// <seealso cref="IXMLReader.EntityResolver"/>
/// <seealso cref="InputSource"/>
public interface IEntityResolver
{
/// <summary>
/// Allow the application to resolve external entities.
/// </summary>
/// <remarks>
/// The parser will call this method before opening any external
/// entity except the top-level document entity.Such entities include
/// the external DTD subset and external parameter entities referenced
/// within the DTD(in either case, only if the parser reads external
/// parameter entities), and external general entities referenced
/// within the document element(if the parser reads external general
/// entities). The application may request that the parser locate
/// the entity itself, that it use an alternative URI, or that it
/// use data provided by the application(as a character or byte
/// input stream).
/// <para/>
/// Application writers can use this method to redirect external
/// system identifiers to secure and/or local URIs, to look up
/// public identifiers in a catalogue, or to read an entity from a
/// database or other input source(including, for example, a dialog
/// box). Neither XML nor SAX specifies a preferred policy for using
/// public or system IDs to resolve resources.However, SAX specifies
/// how to interpret any InputSource returned by this method, and that
/// if none is returned, then the system ID will be dereferenced as
/// a URL.
/// <para/>
/// If the system identifier is a URL, the SAX parser must
/// resolve it fully before reporting it to the application.
/// </remarks>
/// <param name="publicId">The public identifier of the external entity
/// being referenced, or null if none was supplied.</param>
/// <param name="systemId">The system identifier of the external entity
/// being referenced.</param>
/// <returns>An InputSource object describing the new input source,
/// or null to request that the parser open a regular
/// URI connection to the system identifier.</returns>
/// <exception cref="SAXException">Any SAX exception, possibly wrapping another exception.</exception>
/// <exception cref="IOException">A .NET-specific IO exception, possibly the result of creating
/// a new <see cref="Stream"/> or <see cref="TextReader"/> for the <see cref="InputSource"/>.</exception>
/// <seealso cref="InputSource"/>
InputSource ResolveEntity(string publicId,
string systemId);
}
}