Notions Avancées
Définition : Features & Properties
SAX propose aussi un mécanisme pour ajouter des features et des properties depuis sa version 2.0, par exemple l'activation de la validation d'un fichier XML, la gestion des espaces de nommage.
Pour cela, on a les méthode setProperty(), setFeature(), getProperty() et getFeature(). Les setters prennent l'URL de la propriété ou la fonctionnalité et sa valeur.
Toutes les features sont présentées dans ce lien : http://xerces.apache.org/xerces2-j/features.html
Toutes les properties sont présentées dans ce lien : http://xerces.apache.org/xerces2-j/properties.html
Features
Définition : Validation
La validation est un mécanisme très important qui est proposé par SAX, il permet l'activation ou la désactivation de la validation d'un fichier XML, par exemple avec un DTD qui est inclus dans le fichier.
Attention : Validation vs DTD
Ne pas confondre entre la validation et le traitement de la DTD. La validation permet juste de prendre en compte le traitement de la DTD qui est associé au fichier XML, au lieu d'être ignoré.
Si la valeur de la validation est à false, même si vous avez bien un DTD qui est référencé dans le fichier XML, ce dernier sera ignoré lors du traitement de l'analyseur de SAX.
Définition : Namespaces
SAX nous propose le Namespaces feature pour la gestion des espaces de nommage.
Par default, même si votre fichier XML contient des namespaces, l'analyseur ne prendra pas en compte ce dernier, c'est pour cela que l'utilisation de cette fonctionnalité est indispensable quand le fichier XML contient des espaces de nommage.
reader.setFeature("http://xml.org/sax/features/namespaces", true);
reader.setFeature("http://xml.org/sax/features/namespace-prefixes",true);
reader.setFeature("http://xml.org/sax/features/namespaces", true); reader.setFeature("http://xml.org/sax/features/namespace-prefixes",true);
EntityResolve
Définition : Principe
Résoudre les références externes qui sont incluses dans un fichier XML via un publicID ou un systemID. Ils peuvent être soit une référence pour un fichier, un URL ou bien une ressource.
L'interface a pour but de remplacer ces références avec d'autres que le programmeur souhaite intégrer.
Pour implémenter cette interface, il suffit de l'enregistrer dans l'instance du XMLReader avec la méthode setEntityResolver().
public class myEntityResolver implements EntityResolver{
public InputSource resolveEntity(String publicID, String systemID) throws SAXException, IOException {
}
}
public class myEntityResolver implements EntityResolver{ @Override public InputSource resolveEntity(String publicID, String systemID) throws SAXException, IOException { } }
La classe DefaultHandler
Définition : Principe
La classe DefaultHandler implémente les quatre interfaces de l'API SAX, notamment ContentHandler, ErrorHandler, DTDHandler et EntityResolver. Le but de cette classe et de pouvoir proposer au programmeur une classe qui contient l'ensemble de toutes les fonctions que les interfaces proposent, et redéfinir seulement celles qui l'intéressent.
Pour utiliser cette classe, il suffit de faire un héritage (maclasse extends DefaultHandler).