SAX - LaBRI

publicité
SAX
Simple
API
for XML
Généralités


API non standard développé par les membres
du forum XML-DEV
Parseur XML
–
–

Orienté événement
Parsing dynamique
SAX existe en Java, Python et C++
Principe de Fonctionnement
Fichier
SAX
Internet
XML
APPLICATIONS
SAX aujourd’hui


Debut des travaux Dec, 1997
SAX 1.0 Mai, 1998
–
–
–

Tim Bray
David Megginson
…
SAX 2.0 Mai, 2000
SAX 2.0

Interfaces
–
–
–
–
–

Classes
–

XMLReader
ContentHandler
DTDHandler
ErrorHandler
…
InputSource
Exceptions
–
–
SAXException
…
org.xml.sax.XMLReader


Classe implantée par tout parser SAX
Méthodes
–
–
–
–
–
public void setContentHandler(ContentHandler handler)
public void setDTDHandler(DTDHandler handler)
public void setErrorHandler(ErrorHandler handler)
public void parse(InputSource input) throws
java.io.IOException, SAXException
…
org.xml.sax.ContentHandler


Handler le plus important. Toutes les applications SAX
doivent implanter un ContentHandler
Méthodes :
–
–
–
–
–
public void startDocument() throws SAXException
public void endDocument() throws SAXException
public void startElement(String nspURI, String localName,
String qName, Attributes atts) throws SAXException
public void characters(char[] ch, int start, int length) throws
SAXException
…
org.xml.sax.DTDHandler


Handler utilisé pour avoir des informations sur
les entitées non parsable.
Méthodes :
–
–
public void notationDecl(String name,
String publicId, String systemId) throws
SAXException
public void unparsedEntityDecl(String name,
String publicId, String systemId,
String notationName) throws SAXException
org.xml.sax.ErrorHandler


Handler utilisé pour effectuer un traitement lors
d’apparition d’erreurs.
Méthodes :
–
–
–
public void warning(SAXParseException exception)
throws SAXException
public void error(SAXParseException exception)
throws SAXException
public void fatalError(SAXParseException
exception) throws SAXException
org.xml.sax.EntityResolver


Handler utilisé pour effectuer un traitement lors
de la résolution d’entité.
Méthode :
–
public InputSource resolveEntity(String publicId,
String systemId) throws SAXException,
java.io.IOException
org.xml.sax.Attributes


Liste d’attributs
Méthodes :
–
–
–
–
public int getLength()
public java.lang.String getLocalName(int index)
public java.lang.String getValue(int index)
…
org.xml.sax.Locator



Utiliser pour connaître la position du parser
dans le fichier
Les parser SAX ne sont pas obligé de fournit
un Locator
Méthodes :
–
–
–
public int getColumnNumber()
public int getLineNumber()
…
org.xml.sax.InputSource


Tout input XML doit être encapsulé dans un
InputSource
Méthodes :
–
–
–
public InputSource(java.io.Reader characterStream)
public InputSource(java.io.InputStream byteStream)
…
Exemple de Programme SAX
package test;
public class ContentTest extends org.xml.sax.helpers.DefaultHandler {
org.xml.sax.Locator _locator;
public void startDocument() {System.out.println("Le document commence"); }
public void endDocument() {System.out.println("Le document finit");}
public void startElement(java.lang.String namespaceURI,
java.lang.String localName,java.lang.String rawName,
org.xml.sax.Attributes atts) throws org.xml.sax.SAXException {
System.out.println("element : "+localName+" commence"+"col = «
+_locator.getColumnNumber()+" ; line ="+_locator.getLineNumber() );}
public void endElement(java.lang.String namespaceURI,java.lang.String localName,
java.lang.String rawName, org.xml.sax.Attributes atts) throws org.xml.sax.SAXException {
System.out.println("element : "+localName+" finit");
}
public void setDocumentLocator(org.xml.sax.Locator locator) {_locator = locator;}
}
Exemple de Programme SAX
package test;
public class DTDTest extends org.xml.sax.helpers.DefaultHandler {
public void notationDecl(java.lang.String name,
java.lang.String publicId,
java.lang.String systemId) throws org.xml.sax.SAXException {
System.out.println("Notation Declaration");
}
public void unparsedEntityDecl(java.lang.String name,
java.lang.String publicId,
java.lang.String systemId,
java.lang.String notationName) throws org.xml.sax.SAXException {
System.out.println("Unparsed entity Decl");
}
}
Exemple de Programme SAX
package test;
public class EntityTest extends org.xml.sax.helpers.DefaultHandler {
public org.xml.sax.InputSource resolveEntity(java.lang.String publicId,
java.lang.String systemId) throws org.xml.sax.SAXException{
System.out.println("resolve an entity");
return null;
}
}
Exemple de Programme SAX
package test;
public class ErrorTest extends org.xml.sax.helpers.DefaultHandler {
public void warning(org.xml.sax.SAXParseException exception)
throws org.xml.sax.SAXException {
System.out.println("Got a Warning");
}
public void error(org.xml.sax.SAXParseException exception)
throws org.xml.sax.SAXException {
System.out.println("Got an Error");
}
public void fatalError(org.xml.sax.SAXParseException exception)
throws org.xml.sax.SAXException {
System.out.println("Got a fatal Error");
}
}
Exemple de programme SAX
package test;
public class Parse {
public static void main(String[] args) {
try {
org.xml.sax.XMLReader parser = (org.xml.sax.XMLReader)Class.forName(«
org.apache.xerces.parsers.SAXParser").newInstance();
ContentTest _content = new ContentTest();
_content.setDocumentLocator(new org.xml.sax.helpers.LocatorImpl());
parser.setContentHandler(_content);
parser.setErrorHandler(new ErrorTest());
parser.setEntityResolver(new EntityTest());
parser.setDTDHandler(new DTDTest());
parser.parse("UML.xml");}
catch (org.xml.sax.SAXParseException spe) {spe.printStackTrace(System.err);}
catch (org.xml.sax.SAXException se) {se.printStackTrace(System.err);}
catch (Exception e) {e.printStackTrace(System.err);}
}
}
Conclusion




Type de Parser XML
Standard « Internet »
Orienté événement
Utilisé par les serveurs Web
Téléchargement