001: // SAX entity resolver.
002: // http://www.saxproject.org
003: // No warranty; no copyright -- use this as you will.
004: // $Id: EntityResolver.java,v 1.1.1.1 2002/05/03 23:29:40 yuvalo Exp $
005:
006: package org.xml.sax;
007:
008: import java.io.IOException;
009:
010: /**
011: * Basic interface for resolving entities.
012: *
013: * <blockquote>
014: * <em>This module, both source code and documentation, is in the
015: * Public Domain, and comes with <strong>NO WARRANTY</strong>.</em>
016: * See <a href='http://www.saxproject.org'>http://www.saxproject.org</a>
017: * for further information.
018: * </blockquote>
019: *
020: * <p>If a SAX application needs to implement customized handling
021: * for external entities, it must implement this interface and
022: * register an instance with the SAX driver using the
023: * {@link org.xml.sax.XMLReader#setEntityResolver setEntityResolver}
024: * method.</p>
025: *
026: * <p>The XML reader will then allow the application to intercept any
027: * external entities (including the external DTD subset and external
028: * parameter entities, if any) before including them.</p>
029: *
030: * <p>Many SAX applications will not need to implement this interface,
031: * but it will be especially useful for applications that build
032: * XML documents from databases or other specialised input sources,
033: * or for applications that use URI types other than URLs.</p>
034: *
035: * <p>The following resolver would provide the application
036: * with a special character stream for the entity with the system
037: * identifier "http://www.myhost.com/today":</p>
038: *
039: * <pre>
040: * import org.xml.sax.EntityResolver;
041: * import org.xml.sax.InputSource;
042: *
043: * public class MyResolver implements EntityResolver {
044: * public InputSource resolveEntity (String publicId, String systemId)
045: * {
046: * if (systemId.equals("http://www.myhost.com/today")) {
047: * // return a special input source
048: * MyReader reader = new MyReader();
049: * return new InputSource(reader);
050: * } else {
051: * // use the default behaviour
052: * return null;
053: * }
054: * }
055: * }
056: * </pre>
057: *
058: * <p>The application can also use this interface to redirect system
059: * identifiers to local URIs or to look up replacements in a catalog
060: * (possibly by using the public identifier).</p>
061: *
062: * @since SAX 1.0
063: * @author David Megginson
064: * @version 2.0.1 (sax2r2)
065: * @see org.xml.sax.XMLReader#setEntityResolver
066: * @see org.xml.sax.InputSource
067: */
068: public interface EntityResolver {
069:
070: /**
071: * Allow the application to resolve external entities.
072: *
073: * <p>The parser will call this method before opening any external
074: * entity except the top-level document entity. Such entities include
075: * the external DTD subset and external parameter entities referenced
076: * within the DTD (in either case, only if the parser reads external
077: * parameter entities), and external general entities referenced
078: * within the document element (if the parser reads external general
079: * entities). The application may request that the parser locate
080: * the entity itself, that it use an alternative URI, or that it
081: * use data provided by the application (as a character or byte
082: * input stream).</p>
083: *
084: * <p>Application writers can use this method to redirect external
085: * system identifiers to secure and/or local URIs, to look up
086: * public identifiers in a catalogue, or to read an entity from a
087: * database or other input source (including, for example, a dialog
088: * box). Neither XML nor SAX specifies a preferred policy for using
089: * public or system IDs to resolve resources. However, SAX specifies
090: * how to interpret any InputSource returned by this method, and that
091: * if none is returned, then the system ID will be dereferenced as
092: * a URL. </p>
093: *
094: * <p>If the system identifier is a URL, the SAX parser must
095: * resolve it fully before reporting it to the application.</p>
096: *
097: * @param publicId The public identifier of the external entity
098: * being referenced, or null if none was supplied.
099: * @param systemId The system identifier of the external entity
100: * being referenced.
101: * @return An InputSource object describing the new input source,
102: * or null to request that the parser open a regular
103: * URI connection to the system identifier.
104: * @exception org.xml.sax.SAXException Any SAX exception, possibly
105: * wrapping another exception.
106: * @exception java.io.IOException A Java-specific IO exception,
107: * possibly the result of creating a new InputStream
108: * or Reader for the InputSource.
109: * @see org.xml.sax.InputSource
110: */
111: public abstract InputSource resolveEntity(String publicId,
112: String systemId) throws SAXException, IOException;
113:
114: }
115:
116: // end of EntityResolver.java
|