Parseur Validant SAX avec SCHEMA...possible?

Signaler
Messages postés
51
Date d'inscription
mardi 4 mars 2003
Statut
Membre
Dernière intervention
23 juillet 2004
-
Messages postés
10
Date d'inscription
mardi 12 octobre 2004
Statut
Membre
Dernière intervention
8 février 2005
-
Bonjour voila j'ai besoin de parser (avec validation par SCHEMA) via SAX de sun un fichier XML.
Si c'est possible, mon probleme est quelle version de SAX me faut il (1 ou 2?) et quelle version du jdk de SUN (1.3 ou 1.4)

Merci si vous pouvez me répondre c'est trés important.

4 réponses

Messages postés
143
Date d'inscription
vendredi 5 juillet 2002
Statut
Membre
Dernière intervention
18 mars 2006
1
Salut !

Parser un document XML, avec SAX et valider le document en utilisant les XML Schema -> oui c'est possible.

Etant donne l'utilisation de XML Schema, tu devras traiter les URIs et espaces de nommages ! De facto, SAX2 est plus approprie a cette tache, puisque la gestion des Namespace y a ete ameliore ! (XMLReader au lieu de Parser dans la v1)

Un petit jdk 1.3.1 fera l'affaire ;-)

Allez, a pluche !
Messages postés
51
Date d'inscription
mardi 4 mars 2003
Statut
Membre
Dernière intervention
23 juillet 2004
1
Merci,
En fait j'avais déja réalisé un parseur validant avec dtd via SAX de sun (en java), mais ayant besoin de rigueur de validation(format date,taille et type des valeurs) j'ai du passer à xml shema, est ce que je dois tout revoir ou je peux récupérér certaines parties voir toutes (DefaultHandler,SaxFactory,etc...)
Sais tu ou je pourrais trouver de la doc ou des exemples de parseur SAX avec schema, le sujet est bien mince sur le net.
Merci
Messages postés
51
Date d'inscription
mardi 4 mars 2003
Statut
Membre
Dernière intervention
23 juillet 2004
1
Eu tu n'aurais pas un exemple parceque la je vois vraiment pas comment faire , j 'ai trouvé cet exemple mais ca ne marches pas en as tu un qui marche ? merci.
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.SAXParserFactory;
import javax.xml.parsers.SAXParser;
import org.xml.sax.helpers.DefaultHandler;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;

public class Schema1{

//Constants when using XML Schema for SAX parsing.
static final String JAXP_SCHEMA_LANGUAGE =
    	"http://java.sun.com/xml/jaxp/properties/schemaLanguage";
static final String W3C_XML_SCHEMA =
    "http://www.w3.org/2001/XMLSchema"; 
static final String JAXP_SCHEMA_SOURCE =
    	"http://java.sun.com/xml/jaxp/properties/schemaSource";

//main
public static void main(String[] args) {		 
String msg,xml,xsd;
if(args.length!=2){
xml = "letter.xml";
xsd = "letter.xsd";
System.out.println("No arguments found:\nUsage: xmlFile xsdFile" + 
"\nUsing letter.xml letter.xsd");
}else{
xml = args[0];
xsd = args[1];
}

  		if(isValid("letter.xml","letter.xsd")){
  			msg = "File is valid";
  		}else{
  			msg = "ERROR! INVALID FILE";
  		}
  		System.out.println(msg);
  	} 
  
  
//SAX parsing
public static boolean isValid(String source, String schema){
try {
SAXParserFactory spf = SAXParserFactory.newInstance();
        spf.setNamespaceAware(true);
        spf.setValidating(true);
SAXParser sp = spf.newSAXParser();
sp.setProperty(JAXP_SCHEMA_LANGUAGE, W3C_XML_SCHEMA);
sp.setProperty(JAXP_SCHEMA_SOURCE, schema);
MyDefaultHandler dh = new MyDefaultHandler();
sp.parse(source, dh);

return (dh.isValid)?true:false;

    } catch(SAXException se) {
se.printStackTrace();
    	}catch (Exception e) {
  		System.err.println(e);
  	}	  	  
return false;
}

}

//Custom error hanler to print errors and return isValid
class MyDefaultHandler extends DefaultHandler {

//flag to check if the xml document was valid
public boolean isValid = true;

//Receive notification of a recoverable error.
public void error(SAXParseException se) {
setValidity(se);
}

//Receive notification of a non-recoverable error. 
 	public void fatalError(SAXParseException se) {
 		setValidity(se);
    }

//Receive notification of a warning.        
 	public void warning(SAXParseException se) { 
 		setValidity(se);
}

private void setValidity(SAXParseException se){
isValid = false;
    	System.out.println(se.toString());
}
}
Messages postés
10
Date d'inscription
mardi 12 octobre 2004
Statut
Membre
Dernière intervention
8 février 2005

Tu y es arrivé ???

nono