Projektowanie systemów informatycznych
Rysunek 2. Model SAX
Kiedy SAX rozpoczyna parsowanie (wywołuje metodę parse) urządzenie czytające (ang. reader) wywołuje jedną lub kilka metod zdefiniowanych w interfejsach ContentHandler, ErrorHandler, DTDHandler, EntityResolver.
Obiekt SAXParserFactory otrzymujemy wywołując statyczną metodę newlnstance {) tejże klasy. Możemy go skonfigurować za pomocą następujących metod :
• setFeature - ustawia poszczególne cechy przez podanie ich nazwy i wartości
• setNamespaceAware - wyszczególnia, że parser dostarczy wsparcia dla mechanizmu przestrzeni nazw
• setValidating - wyszczególnia, że parsowane dokumenty zostaną poddane walidacji Argumentem wszystkich powyższych metod z wyjątkiem setFeature jest tylko typ logiczny.
Obiekt SAXParser otrzymujemy przez wywołanie metody newSAXParser () na rzecz SAXParserFactory. Instancja klasy SAXParser definiuje kilka różnych metod parse. Przetwarzane dane XML mogą pochodzić z wielu źródeł wejściowych. Przykładami takich obiektów są InputStream, File, URL. Zawartość XML jest parsowana za pomocą metod zdefiniowanych wHandlerBase lub DefaultHandler.
Obiekt ContentHandler jest głównym interfejsem, którego implementuje większość aplikacji korzystających z SAX, gdyż dostarcza informacji o podstawowych zdarzeniach. Metody takie jak startDocument, endDocument, startElement, endElement są wywoływane kiedy rozpoznawany jest znacznik XML (odpowiednio rozpoczynający, kończący dokument, rozpoczynający, kończący element). Interfejs definiuje również metody characters i processinglnstruction, które są wywoływane gdy parser napotka odpowiednio element XML zawierający tekst, włączone do dokumentu instrukcje przetwarzania.
Interfejs ErrorHandler jest przeznaczony do obsługi błędów parsera. Jego metody error, f atalError, warning są wywoływane w odpowiedzi na różne błędy parsowania. Domyślny obiekt obsługujący błędy zwraca wyjątki tylko dla błędów krytycznych, a wszystkie inne ignoruje. Jeżeli zachodzi konieczność obsługi wszystkich błędów, to należy dostarczyć parserowi
Michał Bleja
Uniwersytet Łódzki