Parseur Validant SAX avec SCHEMA...possible?

darktonight Messages postés 51 Date d'inscription mardi 4 mars 2003 Statut Membre Dernière intervention 23 juillet 2004 - 19 mars 2003 à 17:35
arnoo59 Messages postés 10 Date d'inscription mardi 12 octobre 2004 Statut Membre Dernière intervention 8 février 2005 - 4 janv. 2005 à 10:01
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

willowman Messages postés 143 Date d'inscription vendredi 5 juillet 2002 Statut Membre Dernière intervention 18 mars 2006 1
19 mars 2003 à 23:53
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 !
0
darktonight Messages postés 51 Date d'inscription mardi 4 mars 2003 Statut Membre Dernière intervention 23 juillet 2004 1
20 mars 2003 à 09:46
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
0
darktonight Messages postés 51 Date d'inscription mardi 4 mars 2003 Statut Membre Dernière intervention 23 juillet 2004 1
25 mars 2003 à 12:18
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());
}
}
0
arnoo59 Messages postés 10 Date d'inscription mardi 12 octobre 2004 Statut Membre Dernière intervention 8 février 2005
4 janv. 2005 à 10:01
Tu y es arrivé ???

nono
0
Rejoignez-nous