Class | Line # | Actions | ||||
---|---|---|---|---|---|---|
XMLReader | 60 | 0 | 0 | 0 |
1 | // XMLReader.java - read an XML document. | |
2 | // http://www.saxproject.org | |
3 | // Written by David Megginson | |
4 | // NO WARRANTY! This class is in the Public Domain. | |
5 | // $Id: XMLReader.java,v 1.9 2004/04/26 17:34:34 dmegginson Exp $ | |
6 | ||
7 | package org.xml.sax; | |
8 | ||
9 | import java.io.IOException; | |
10 | ||
11 | ||
12 | /** | |
13 | * Interface for reading an XML document using callbacks. | |
14 | * | |
15 | * <blockquote> | |
16 | * <em>This module, both source code and documentation, is in the | |
17 | * Public Domain, and comes with <strong>NO WARRANTY</strong>.</em> | |
18 | * See <a href='http://www.saxproject.org'>http://www.saxproject.org</a> | |
19 | * for further information. | |
20 | * </blockquote> | |
21 | * | |
22 | * <p><strong>Note:</strong> despite its name, this interface does | |
23 | * <em>not</em> extend the standard Java {@link java.io.Reader Reader} | |
24 | * interface, because reading XML is a fundamentally different activity | |
25 | * than reading character data.</p> | |
26 | * | |
27 | * <p>XMLReader is the interface that an XML parser's SAX2 driver must | |
28 | * implement. This interface allows an application to set and | |
29 | * query features and properties in the parser, to register | |
30 | * event handlers for document processing, and to initiate | |
31 | * a document parse.</p> | |
32 | * | |
33 | * <p>All SAX interfaces are assumed to be synchronous: the | |
34 | * {@link #parse parse} methods must not return until parsing | |
35 | * is complete, and readers must wait for an event-handler callback | |
36 | * to return before reporting the next event.</p> | |
37 | * | |
38 | * <p>This interface replaces the (now deprecated) SAX 1.0 {@link | |
39 | * org.xml.sax.Parser Parser} interface. The XMLReader interface | |
40 | * contains two important enhancements over the old Parser | |
41 | * interface (as well as some minor ones):</p> | |
42 | * | |
43 | * <ol> | |
44 | * <li>it adds a standard way to query and set features and | |
45 | * properties; and</li> | |
46 | * <li>it adds Namespace support, which is required for many | |
47 | * higher-level XML standards.</li> | |
48 | * </ol> | |
49 | * | |
50 | * <p>There are adapters available to convert a SAX1 Parser to | |
51 | * a SAX2 XMLReader and vice-versa.</p> | |
52 | * | |
53 | * @since SAX 2.0 | |
54 | * @author David Megginson | |
55 | * @version 2.0.1+ (sax2r3pre1) | |
56 | * @see org.xml.sax.XMLFilter | |
57 | * @see org.xml.sax.helpers.ParserAdapter | |
58 | * @see org.xml.sax.helpers.XMLReaderAdapter | |
59 | */ | |
60 | public interface XMLReader | |
61 | { | |
62 | ||
63 | ||
64 | //////////////////////////////////////////////////////////////////// | |
65 | // Configuration. | |
66 | //////////////////////////////////////////////////////////////////// | |
67 | ||
68 | ||
69 | /** | |
70 | * Look up the value of a feature flag. | |
71 | * | |
72 | * <p>The feature name is any fully-qualified URI. It is | |
73 | * possible for an XMLReader to recognize a feature name but | |
74 | * temporarily be unable to return its value. | |
75 | * Some feature values may be available only in specific | |
76 | * contexts, such as before, during, or after a parse. | |
77 | * Also, some feature values may not be programmatically accessible. | |
78 | * (In the case of an adapter for SAX1 {@link Parser}, there is no | |
79 | * implementation-independent way to expose whether the underlying | |
80 | * parser is performing validation, expanding external entities, | |
81 | * and so forth.) </p> | |
82 | * | |
83 | * <p>All XMLReaders are required to recognize the | |
84 | * http://xml.org/sax/features/namespaces and the | |
85 | * http://xml.org/sax/features/namespace-prefixes feature names.</p> | |
86 | * | |
87 | * <p>Typical usage is something like this:</p> | |
88 | * | |
89 | * <pre> | |
90 | * XMLReader r = new MySAXDriver(); | |
91 | * | |
92 | * // try to activate validation | |
93 | * try { | |
94 | * r.setFeature("http://xml.org/sax/features/validation", true); | |
95 | * } catch (SAXException e) { | |
96 | * System.err.println("Cannot activate validation."); | |
97 | * } | |
98 | * | |
99 | * // register event handlers | |
100 | * r.setContentHandler(new MyContentHandler()); | |
101 | * r.setErrorHandler(new MyErrorHandler()); | |
102 | * | |
103 | * // parse the first document | |
104 | * try { | |
105 | * r.parse("http://www.foo.com/mydoc.xml"); | |
106 | * } catch (IOException e) { | |
107 | * System.err.println("I/O exception reading XML document"); | |
108 | * } catch (SAXException e) { | |
109 | * System.err.println("XML exception reading document."); | |
110 | * } | |
111 | * </pre> | |
112 | * | |
113 | * <p>Implementors are free (and encouraged) to invent their own features, | |
114 | * using names built on their own URIs.</p> | |
115 | * | |
116 | * @param name The feature name, which is a fully-qualified URI. | |
117 | * @return The current value of the feature (true or false). | |
118 | * @exception org.xml.sax.SAXNotRecognizedException If the feature | |
119 | * value can't be assigned or retrieved. | |
120 | * @exception org.xml.sax.SAXNotSupportedException When the | |
121 | * XMLReader recognizes the feature name but | |
122 | * cannot determine its value at this time. | |
123 | * @see #setFeature | |
124 | */ | |
125 | public boolean getFeature (String name) | |
126 | throws SAXNotRecognizedException, SAXNotSupportedException; | |
127 | ||
128 | ||
129 | /** | |
130 | * Set the value of a feature flag. | |
131 | * | |
132 | * <p>The feature name is any fully-qualified URI. It is | |
133 | * possible for an XMLReader to expose a feature value but | |
134 | * to be unable to change the current value. | |
135 | * Some feature values may be immutable or mutable only | |
136 | * in specific contexts, such as before, during, or after | |
137 | * a parse.</p> | |
138 | * | |
139 | * <p>All XMLReaders are required to support setting | |
140 | * http://xml.org/sax/features/namespaces to true and | |
141 | * http://xml.org/sax/features/namespace-prefixes to false.</p> | |
142 | * | |
143 | * @param name The feature name, which is a fully-qualified URI. | |
144 | * @param value The requested value of the feature (true or false). | |
145 | * @exception org.xml.sax.SAXNotRecognizedException If the feature | |
146 | * value can't be assigned or retrieved. | |
147 | * @exception org.xml.sax.SAXNotSupportedException When the | |
148 | * XMLReader recognizes the feature name but | |
149 | * cannot set the requested value. | |
150 | * @see #getFeature | |
151 | */ | |
152 | public void setFeature (String name, boolean value) | |
153 | throws SAXNotRecognizedException, SAXNotSupportedException; | |
154 | ||
155 | ||
156 | /** | |
157 | * Look up the value of a property. | |
158 | * | |
159 | * <p>The property name is any fully-qualified URI. It is | |
160 | * possible for an XMLReader to recognize a property name but | |
161 | * temporarily be unable to return its value. | |
162 | * Some property values may be available only in specific | |
163 | * contexts, such as before, during, or after a parse.</p> | |
164 | * | |
165 | * <p>XMLReaders are not required to recognize any specific | |
166 | * property names, though an initial core set is documented for | |
167 | * SAX2.</p> | |
168 | * | |
169 | * <p>Implementors are free (and encouraged) to invent their own properties, | |
170 | * using names built on their own URIs.</p> | |
171 | * | |
172 | * @param name The property name, which is a fully-qualified URI. | |
173 | * @return The current value of the property. | |
174 | * @exception org.xml.sax.SAXNotRecognizedException If the property | |
175 | * value can't be assigned or retrieved. | |
176 | * @exception org.xml.sax.SAXNotSupportedException When the | |
177 | * XMLReader recognizes the property name but | |
178 | * cannot determine its value at this time. | |
179 | * @see #setProperty | |
180 | */ | |
181 | public Object getProperty (String name) | |
182 | throws SAXNotRecognizedException, SAXNotSupportedException; | |
183 | ||
184 | ||
185 | /** | |
186 | * Set the value of a property. | |
187 | * | |
188 | * <p>The property name is any fully-qualified URI. It is | |
189 | * possible for an XMLReader to recognize a property name but | |
190 | * to be unable to change the current value. | |
191 | * Some property values may be immutable or mutable only | |
192 | * in specific contexts, such as before, during, or after | |
193 | * a parse.</p> | |
194 | * | |
195 | * <p>XMLReaders are not required to recognize setting | |
196 | * any specific property names, though a core set is defined by | |
197 | * SAX2.</p> | |
198 | * | |
199 | * <p>This method is also the standard mechanism for setting | |
200 | * extended handlers.</p> | |
201 | * | |
202 | * @param name The property name, which is a fully-qualified URI. | |
203 | * @param value The requested value for the property. | |
204 | * @exception org.xml.sax.SAXNotRecognizedException If the property | |
205 | * value can't be assigned or retrieved. | |
206 | * @exception org.xml.sax.SAXNotSupportedException When the | |
207 | * XMLReader recognizes the property name but | |
208 | * cannot set the requested value. | |
209 | */ | |
210 | public void setProperty (String name, Object value) | |
211 | throws SAXNotRecognizedException, SAXNotSupportedException; | |
212 | ||
213 | ||
214 | ||
215 | //////////////////////////////////////////////////////////////////// | |
216 | // Event handlers. | |
217 | //////////////////////////////////////////////////////////////////// | |
218 | ||
219 | ||
220 | /** | |
221 | * Allow an application to register an entity resolver. | |
222 | * | |
223 | * <p>If the application does not register an entity resolver, | |
224 | * the XMLReader will perform its own default resolution.</p> | |
225 | * | |
226 | * <p>Applications may register a new or different resolver in the | |
227 | * middle of a parse, and the SAX parser must begin using the new | |
228 | * resolver immediately.</p> | |
229 | * | |
230 | * @param resolver The entity resolver. | |
231 | * @see #getEntityResolver | |
232 | */ | |
233 | public void setEntityResolver (EntityResolver resolver); | |
234 | ||
235 | ||
236 | /** | |
237 | * Return the current entity resolver. | |
238 | * | |
239 | * @return The current entity resolver, or null if none | |
240 | * has been registered. | |
241 | * @see #setEntityResolver | |
242 | */ | |
243 | public EntityResolver getEntityResolver (); | |
244 | ||
245 | ||
246 | /** | |
247 | * Allow an application to register a DTD event handler. | |
248 | * | |
249 | * <p>If the application does not register a DTD handler, all DTD | |
250 | * events reported by the SAX parser will be silently ignored.</p> | |
251 | * | |
252 | * <p>Applications may register a new or different handler in the | |
253 | * middle of a parse, and the SAX parser must begin using the new | |
254 | * handler immediately.</p> | |
255 | * | |
256 | * @param handler The DTD handler. | |
257 | * @see #getDTDHandler | |
258 | */ | |
259 | public void setDTDHandler (DTDHandler handler); | |
260 | ||
261 | ||
262 | /** | |
263 | * Return the current DTD handler. | |
264 | * | |
265 | * @return The current DTD handler, or null if none | |
266 | * has been registered. | |
267 | * @see #setDTDHandler | |
268 | */ | |
269 | public DTDHandler getDTDHandler (); | |
270 | ||
271 | ||
272 | /** | |
273 | * Allow an application to register a content event handler. | |
274 | * | |
275 | * <p>If the application does not register a content handler, all | |
276 | * content events reported by the SAX parser will be silently | |
277 | * ignored.</p> | |
278 | * | |
279 | * <p>Applications may register a new or different handler in the | |
280 | * middle of a parse, and the SAX parser must begin using the new | |
281 | * handler immediately.</p> | |
282 | * | |
283 | * @param handler The content handler. | |
284 | * @see #getContentHandler | |
285 | */ | |
286 | public void setContentHandler (ContentHandler handler); | |
287 | ||
288 | ||
289 | /** | |
290 | * Return the current content handler. | |
291 | * | |
292 | * @return The current content handler, or null if none | |
293 | * has been registered. | |
294 | * @see #setContentHandler | |
295 | */ | |
296 | public ContentHandler getContentHandler (); | |
297 | ||
298 | ||
299 | /** | |
300 | * Allow an application to register an error event handler. | |
301 | * | |
302 | * <p>If the application does not register an error handler, all | |
303 | * error events reported by the SAX parser will be silently | |
304 | * ignored; however, normal processing may not continue. It is | |
305 | * highly recommended that all SAX applications implement an | |
306 | * error handler to avoid unexpected bugs.</p> | |
307 | * | |
308 | * <p>Applications may register a new or different handler in the | |
309 | * middle of a parse, and the SAX parser must begin using the new | |
310 | * handler immediately.</p> | |
311 | * | |
312 | * @param handler The error handler. | |
313 | * @see #getErrorHandler | |
314 | */ | |
315 | public void setErrorHandler (ErrorHandler handler); | |
316 | ||
317 | ||
318 | /** | |
319 | * Return the current error handler. | |
320 | * | |
321 | * @return The current error handler, or null if none | |
322 | * has been registered. | |
323 | * @see #setErrorHandler | |
324 | */ | |
325 | public ErrorHandler getErrorHandler (); | |
326 | ||
327 | ||
328 | ||
329 | //////////////////////////////////////////////////////////////////// | |
330 | // Parsing. | |
331 | //////////////////////////////////////////////////////////////////// | |
332 | ||
333 | /** | |
334 | * Parse an XML document. | |
335 | * | |
336 | * <p>The application can use this method to instruct the XML | |
337 | * reader to begin parsing an XML document from any valid input | |
338 | * source (a character stream, a byte stream, or a URI).</p> | |
339 | * | |
340 | * <p>Applications may not invoke this method while a parse is in | |
341 | * progress (they should create a new XMLReader instead for each | |
342 | * nested XML document). Once a parse is complete, an | |
343 | * application may reuse the same XMLReader object, possibly with a | |
344 | * different input source. | |
345 | * Configuration of the XMLReader object (such as handler bindings and | |
346 | * values established for feature flags and properties) is unchanged | |
347 | * by completion of a parse, unless the definition of that aspect of | |
348 | * the configuration explicitly specifies other behavior. | |
349 | * (For example, feature flags or properties exposing | |
350 | * characteristics of the document being parsed.) | |
351 | * </p> | |
352 | * | |
353 | * <p>During the parse, the XMLReader will provide information | |
354 | * about the XML document through the registered event | |
355 | * handlers.</p> | |
356 | * | |
357 | * <p>This method is synchronous: it will not return until parsing | |
358 | * has ended. If a client application wants to terminate | |
359 | * parsing early, it should throw an exception.</p> | |
360 | * | |
361 | * @param input The input source for the top-level of the | |
362 | * XML document. | |
363 | * @exception org.xml.sax.SAXException Any SAX exception, possibly | |
364 | * wrapping another exception. | |
365 | * @exception java.io.IOException An IO exception from the parser, | |
366 | * possibly from a byte stream or character stream | |
367 | * supplied by the application. | |
368 | * @see org.xml.sax.InputSource | |
369 | * @see #parse(java.lang.String) | |
370 | * @see #setEntityResolver | |
371 | * @see #setDTDHandler | |
372 | * @see #setContentHandler | |
373 | * @see #setErrorHandler | |
374 | */ | |
375 | public void parse (InputSource input) | |
376 | throws IOException, SAXException; | |
377 | ||
378 | ||
379 | /** | |
380 | * Parse an XML document from a system identifier (URI). | |
381 | * | |
382 | * <p>This method is a shortcut for the common case of reading a | |
383 | * document from a system identifier. It is the exact | |
384 | * equivalent of the following:</p> | |
385 | * | |
386 | * <pre> | |
387 | * parse(new InputSource(systemId)); | |
388 | * </pre> | |
389 | * | |
390 | * <p>If the system identifier is a URL, it must be fully resolved | |
391 | * by the application before it is passed to the parser.</p> | |
392 | * | |
393 | * @param systemId The system identifier (URI). | |
394 | * @exception org.xml.sax.SAXException Any SAX exception, possibly | |
395 | * wrapping another exception. | |
396 | * @exception java.io.IOException An IO exception from the parser, | |
397 | * possibly from a byte stream or character stream | |
398 | * supplied by the application. | |
399 | * @see #parse(org.xml.sax.InputSource) | |
400 | */ | |
401 | public void parse (String systemId) | |
402 | throws IOException, SAXException; | |
403 | ||
404 | } |