NAME
Bio::Event::EventHandlerI - An Event Handler Interface
SYNOPSIS
# do not use this module directly# See Bio::SearchIO::SearchResultEventHandler for an example of# implementation.
DESCRIPTION
This interface describes the basic methods required for EventHandlers. These are essentially SAX methods.
Developer Notes
EventHandlerI implementations are used in the BioPerl IO systems to decouple the task of tokenizing the input stream into data elements and their attributes, which is format-specific, and the task of collecting those elements and attributes into whatever is the result of a parser, which is specific to the kind of result to be produced, such as BioPerl objects, a tabular or array data structure, etc.
You can think of EventHandlerI-compliant parsers as faking a SAX XML parser, making their input (typically a non-XML document) behave as if it were XML. The overhead to do this can be quite substantial, at the gain of not having to duplicate the parsing code in order to change the parsing result, and not having to duplicate the logic of instantiating objects between parsers for different formats that all give rise to the same types of objects. This is perhaps best illustrated by the Bio::SearchIO system, where many different formats exist for sequence similarity and pairwise sequence alignment exist that essentially all result in Bio::Search objects.
The method names and their invocation semantics follow their XML SAX equivalents, see http://www.saxproject.org/apidoc/, especially the org.xml.sax.ContentHandler interface.
FEEDBACK
Mailing Lists
User feedback is an integral part of the evolution of this and other Bioperl modules. Send your comments and suggestions preferably to the Bioperl mailing list. Your participation is much appreciated.
[email protected] - General discussionhttp://bioperl.org/wiki/Mailing_lists - About the mailing lists
Support
Please direct usage questions or support issues to the mailing list:
rather than to the module maintainer directly. Many experienced and reponsive experts will be able look at the problem and quickly address it. Please include a thorough description of the problem with code and data examples if at all possible.
Reporting Bugs
Report bugs to the Bioperl bug tracking system to help us keep track of the bugs and their resolution. Bug reports can be submitted via the web:
https://github.com/bioperl/bioperl-live/issues
AUTHOR - Jason Stajich
Email [email protected]
APPENDIX
The rest of the documentation details each of the object methods. Internal methods are usually preceded with a _
will_handle
Title : will_handleUsage : if( $handler->will_handle($event_type) ) { ... }Function: Tests if this event builder knows how to process a specific eventReturns : booleanArgs : event type name
SAX methods
start_document
Title : start_documentUsage : $resultObj = $parser->start_document();Function: Receive notification of the beginning of a document (theinput file of a parser). The parser will invoke this methodonly once, before any other event callbacks.Usually, a handler will reset any internal state structureswhen this method is called.Returns : noneArgs : none
end_document
Title : end_documentUsage : $parser->end_document();Function: Receive notification of the end of a document (normally theinput file of a parser). The parser will invoke this methodonly once, and it will be the last method invoked duringthe parse of the document. The parser shall not invoke thismethod until it has either abandoned parsing (because of anunrecoverable error) or reached the end of input.Unlike the XML SAX signature of this method, this method isexpected to return the object representing the result ofparsing the document.Returns : The object representing the result of parsing the inputstream between the calls to start_document() and this method.Args : none
start_element
Title : start_elementUsage : $parser->start_elementFunction: Receive notification of the beginning of an element. TheParser will invoke this method at the beginning of everyelement in the input stream; there will be a correspondingend_element() event for every start_element() event (even whenthe element is empty). All of the element's content will bereported, in order, before the corresponding end_element()event.Returns : noneArgs : A hashref with at least 2 keys: 'Data' and 'Name'. The valuefor 'Name' is expected to be the type of element beingencountered; the understood values will depend on the IOparser to which this interface is being applied. Likewise, thevalue for 'Data' will be specific to event handlerimplementions, and the specific data chunking needs of inputformats to be handled efficiently.
end_element
Title : end_elementUsage : $parser->end_elementFunction: Receive notification of the end of an element. The parserwill invoke this method at the end of every element in theinput stream; there will be a corresponding start_element()event for every end_element() event (even when the elementis empty).Returns : noneArgs : hashref with at least 2 keys, 'Data' and 'Name'. The semanticsare the same as for start_element().
in_element
Title : in_elementUsage : if( $handler->in_element($element) ) {}Function: Test if we are in a particular element.Normally, in_element() will test for particular attributes,or nested elements, within a containingelement. Conversely, the containing element can be querieswith within_element(). The names understood as argumentshould be the same as the ones understood for the 'Name'key in start_element() and end_element().Typically, handler implementations will call this methodfrom within the characters() method to determine thecontext of the data that were passed to characters().Returns : booleanArgs : A string, the name of the element (normally an attribute name or nested sub-element name).
within_element
Title : within_elementUsage : if( $handler->within_element($element) ) {}Function: Test if we are within a particular kind of element.Normally, the element type names understood as argumentvalues will be for containing elements or datachunks. Conversely, in_element() can be used to testwhether an attribute or nested element is the ccurrentcontext.Typically, a handler will call this method from within thecharacters() method to determine the context for the datathat were passed to characters().Returns : booleanArgs : string element name
characters
Title : charactersUsage : $parser->characters($str)Function: Receive notification of character data. The parser willcall this method to report values of attributes, or largerdata chunks, depending on the IO subsystem and eventhandler implementation. Values may be whitespace-paddedeven if the whitespace is insignificant for the format.The context of the character data being passed can bedetermined by calling the in_element() and within_element()methods.Returns : noneArgs : string, the character data