je suis en train de chercher à valider un document xml par rapport à un
schéma. Le dit schéma pèse 100Ko.
Le document pèse 3ko.
J'utilise sax puisque je n'ai pas besoin de manipuler le DOM. Le pb est
que à tous les coups, le programme plante :
Exception : java.lang.OutOfMemoryException Java heap space.
J'ai essayé de passer -xm512m et pareil, sauf que c'est plus long à
venir ; forcément :).
Ma question est la suivante : qu'utilisez-vous pour valider du xml avec
un schéma un tant soit peu complexe ?
Je cherche surtout des tutoriaux m'expliquant comment utiliser xerces à
la place du parseur intégré au jdk1.5, des liens qui portent sur ce
problème (Google ne m'a pour l'instant rien donné :() bref, surtout des
ressources à lire !
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Aurel
Personnellement, j'utilise JDOM pour le XML... mais je ne sais pas si ça permet de valider un XML à partir d'un XSD... je te laisse voir... : http://www.jdom.org/
Sinon, si ça peut t'aider, voici un code récupérer sur le site de Sun, mais qui ne fonctionne apparemment qu'avec la JRE 1.5... Je n'ai rien testé, donc je te laisse voir :-)
try { //parse an XML document into a DOM tree DocumentBuilder parser = DocumentBuilderFactory.newInstance().newDocumentBuilder(); Document document = parser.parse(new File("instance.xml"));
// create a SchemaFactory capable of understanding WXS schemas SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
// load a WXS schema, represented by a Schema instance Source schemaFile = new StreamSource(new File("mySchema.xsd")); Schema schema = factory.newSchema(schemaFile);
// create a Validator instance, which can be used to validate an instance document Validator validator = schema.newValidator();
// validate the DOM tree validator.validate(new DOMSource(document)); } catch (ParserConfigurationException e1) { e1.printStackTrace(); } catch (SAXException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }
"Gabriel" a écrit dans le message de news: 41dc6ef7$0$7746$
bonsoir,
je suis en train de chercher à valider un document xml par rapport à un schéma. Le dit schéma pèse 100Ko. Le document pèse 3ko.
J'utilise sax puisque je n'ai pas besoin de manipuler le DOM. Le pb est que à tous les coups, le programme plante : Exception : java.lang.OutOfMemoryException Java heap space.
J'ai essayé de passer -xm512m et pareil, sauf que c'est plus long à venir ; forcément :).
Ma question est la suivante : qu'utilisez-vous pour valider du xml avec un schéma un tant soit peu complexe ?
Je cherche surtout des tutoriaux m'expliquant comment utiliser xerces à la place du parseur intégré au jdk1.5, des liens qui portent sur ce problème (Google ne m'a pour l'instant rien donné :() bref, surtout des ressources à lire !
Merci bcp pour votre temps.
Bonne soirée !
Personnellement, j'utilise JDOM pour le XML... mais je ne sais pas si ça
permet de valider un XML à partir d'un XSD... je te laisse voir... :
http://www.jdom.org/
Sinon, si ça peut t'aider, voici un code récupérer sur le site de Sun, mais
qui ne fonctionne apparemment qu'avec la JRE 1.5...
Je n'ai rien testé, donc je te laisse voir :-)
try {
//parse an XML document into a DOM tree
DocumentBuilder parser =
DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document document = parser.parse(new File("instance.xml"));
// create a SchemaFactory capable of understanding WXS schemas
SchemaFactory factory =
SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
// load a WXS schema, represented by a Schema instance
Source schemaFile = new StreamSource(new File("mySchema.xsd"));
Schema schema = factory.newSchema(schemaFile);
// create a Validator instance, which can be used to validate an
instance document
Validator validator = schema.newValidator();
// validate the DOM tree
validator.validate(new DOMSource(document));
} catch (ParserConfigurationException e1) {
e1.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
"Gabriel" <cy_rainchapeau26@yahoo.fr> a écrit dans le message de news:
41dc6ef7$0$7746$636a15ce@news.free.fr...
bonsoir,
je suis en train de chercher à valider un document xml par rapport à un
schéma. Le dit schéma pèse 100Ko.
Le document pèse 3ko.
J'utilise sax puisque je n'ai pas besoin de manipuler le DOM. Le pb est
que à tous les coups, le programme plante :
Exception : java.lang.OutOfMemoryException Java heap space.
J'ai essayé de passer -xm512m et pareil, sauf que c'est plus long à venir
; forcément :).
Ma question est la suivante : qu'utilisez-vous pour valider du xml avec un
schéma un tant soit peu complexe ?
Je cherche surtout des tutoriaux m'expliquant comment utiliser xerces à la
place du parseur intégré au jdk1.5, des liens qui portent sur ce problème
(Google ne m'a pour l'instant rien donné :() bref, surtout des ressources
à lire !
Personnellement, j'utilise JDOM pour le XML... mais je ne sais pas si ça permet de valider un XML à partir d'un XSD... je te laisse voir... : http://www.jdom.org/
Sinon, si ça peut t'aider, voici un code récupérer sur le site de Sun, mais qui ne fonctionne apparemment qu'avec la JRE 1.5... Je n'ai rien testé, donc je te laisse voir :-)
try { //parse an XML document into a DOM tree DocumentBuilder parser = DocumentBuilderFactory.newInstance().newDocumentBuilder(); Document document = parser.parse(new File("instance.xml"));
// create a SchemaFactory capable of understanding WXS schemas SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
// load a WXS schema, represented by a Schema instance Source schemaFile = new StreamSource(new File("mySchema.xsd")); Schema schema = factory.newSchema(schemaFile);
// create a Validator instance, which can be used to validate an instance document Validator validator = schema.newValidator();
// validate the DOM tree validator.validate(new DOMSource(document)); } catch (ParserConfigurationException e1) { e1.printStackTrace(); } catch (SAXException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }
"Gabriel" a écrit dans le message de news: 41dc6ef7$0$7746$
bonsoir,
je suis en train de chercher à valider un document xml par rapport à un schéma. Le dit schéma pèse 100Ko. Le document pèse 3ko.
J'utilise sax puisque je n'ai pas besoin de manipuler le DOM. Le pb est que à tous les coups, le programme plante : Exception : java.lang.OutOfMemoryException Java heap space.
J'ai essayé de passer -xm512m et pareil, sauf que c'est plus long à venir ; forcément :).
Ma question est la suivante : qu'utilisez-vous pour valider du xml avec un schéma un tant soit peu complexe ?
Je cherche surtout des tutoriaux m'expliquant comment utiliser xerces à la place du parseur intégré au jdk1.5, des liens qui portent sur ce problème (Google ne m'a pour l'instant rien donné :() bref, surtout des ressources à lire !
Merci bcp pour votre temps.
Bonne soirée !
kanari666
[SOLVED] bonjour et merci pour ta réponse. Le bp était en fait que j'avais dans mon schéma un nbre do'occurences d'un élément égal à 10000 et xerces aimait pas : il fallait mettre "unbounded", ce qui ne m'arrange pas du tout. Comme je ne peux pas modifier le schéma, je vais changer le schéma à la volée puis le restaurer à l'issue du traitement :) Cette "issue" était sur le site de xerces après bcp de lecture et de tests :) Je n'ai pas testé ta solution mais je vais le faire, sait-on jamais (mon code était sensiblement identique, sauf que je n'utilisais pas le validator instance)....
Bonne soirée !
[SOLVED]
bonjour et merci pour ta réponse.
Le bp était en fait que j'avais dans mon schéma un nbre do'occurences
d'un élément égal à 10000 et xerces aimait pas : il fallait mettre
"unbounded", ce qui ne m'arrange pas du tout.
Comme je ne peux pas modifier le schéma, je vais changer le schéma à
la volée puis le restaurer à l'issue du traitement :)
Cette "issue" était sur le site de xerces après bcp de lecture et de
tests :)
Je n'ai pas testé ta solution mais je vais le faire, sait-on jamais
(mon code était sensiblement identique, sauf que je n'utilisais pas le
validator instance)....
[SOLVED] bonjour et merci pour ta réponse. Le bp était en fait que j'avais dans mon schéma un nbre do'occurences d'un élément égal à 10000 et xerces aimait pas : il fallait mettre "unbounded", ce qui ne m'arrange pas du tout. Comme je ne peux pas modifier le schéma, je vais changer le schéma à la volée puis le restaurer à l'issue du traitement :) Cette "issue" était sur le site de xerces après bcp de lecture et de tests :) Je n'ai pas testé ta solution mais je vais le faire, sait-on jamais (mon code était sensiblement identique, sauf que je n'utilisais pas le validator instance)....
Bonne soirée !
Aurel
Salut,
peux tu me donner ou expliquer ta solution s'il te plaît ?
Merci d'avance :)
aurel
a écrit dans le message de news:
[SOLVED] bonjour et merci pour ta réponse. Le bp était en fait que j'avais dans mon schéma un nbre do'occurences d'un élément égal à 10000 et xerces aimait pas : il fallait mettre "unbounded", ce qui ne m'arrange pas du tout. Comme je ne peux pas modifier le schéma, je vais changer le schéma à la volée puis le restaurer à l'issue du traitement :) Cette "issue" était sur le site de xerces après bcp de lecture et de tests :) Je n'ai pas testé ta solution mais je vais le faire, sait-on jamais (mon code était sensiblement identique, sauf que je n'utilisais pas le validator instance)....
Bonne soirée !
Salut,
peux tu me donner ou expliquer ta solution s'il te plaît ?
Merci d'avance :)
aurel
<kanari666@yahoo.fr> a écrit dans le message de news:
1105031062.986344.43640@c13g2000cwb.googlegroups.com...
[SOLVED]
bonjour et merci pour ta réponse.
Le bp était en fait que j'avais dans mon schéma un nbre do'occurences
d'un élément égal à 10000 et xerces aimait pas : il fallait mettre
"unbounded", ce qui ne m'arrange pas du tout.
Comme je ne peux pas modifier le schéma, je vais changer le schéma à
la volée puis le restaurer à l'issue du traitement :)
Cette "issue" était sur le site de xerces après bcp de lecture et de
tests :)
Je n'ai pas testé ta solution mais je vais le faire, sait-on jamais
(mon code était sensiblement identique, sauf que je n'utilisais pas le
validator instance)....
peux tu me donner ou expliquer ta solution s'il te plaît ?
Merci d'avance :)
aurel
a écrit dans le message de news:
[SOLVED] bonjour et merci pour ta réponse. Le bp était en fait que j'avais dans mon schéma un nbre do'occurences d'un élément égal à 10000 et xerces aimait pas : il fallait mettre "unbounded", ce qui ne m'arrange pas du tout. Comme je ne peux pas modifier le schéma, je vais changer le schéma à la volée puis le restaurer à l'issue du traitement :) Cette "issue" était sur le site de xerces après bcp de lecture et de tests :) Je n'ai pas testé ta solution mais je vais le faire, sait-on jamais (mon code était sensiblement identique, sauf que je n'utilisais pas le validator instance)....
Bonne soirée !
Gabriel
Aurel wrote:
Salut,
peux tu me donner ou expliquer ta solution s'il te plaît ?
Merci d'avance :)
aurel
OK, elle est pas encore implémentée donc pas de code ;)
Mais voila l'idée :
Chargement du schéma xsd en mémoire avec un sax reader (plus léger que dom), à chaque évènement, je renvoie dans le flux de sortie le même élément sauf si c'est c'est l'élément que je souhaite modifier, auquel cas, je remplace l'attribut nbOccurences="10000" par unbounded.
Le flux de sortie étant donc une version modifiée du fichier xsd. A chaque fois que le schéma changera, je lancerai cette "moulinette" pour avoir le schéma à jour.
A moins que je charge tout en JDOM, je modifie les éléments que je sais devoir modifier et j'écris ( à la réflexion, la charge en mémoire est plus lourde mais bon, je lance pas cette moulinette tous les jours) et c'est moins embêtant à écrire qu'avec un SAXReader....
Voilà.....
Aurel wrote:
Salut,
peux tu me donner ou expliquer ta solution s'il te plaît ?
Merci d'avance :)
aurel
OK, elle est pas encore implémentée donc pas de code ;)
Mais voila l'idée :
Chargement du schéma xsd en mémoire avec un sax reader (plus léger que
dom), à chaque évènement, je renvoie dans le flux de sortie le même
élément sauf si c'est c'est l'élément que je souhaite modifier, auquel
cas, je remplace l'attribut nbOccurences="10000" par unbounded.
Le flux de sortie étant donc une version modifiée du fichier xsd.
A chaque fois que le schéma changera, je lancerai cette "moulinette"
pour avoir le schéma à jour.
A moins que je charge tout en JDOM, je modifie les éléments que je sais
devoir modifier et j'écris ( à la réflexion, la charge en mémoire est
plus lourde mais bon, je lance pas cette moulinette tous les jours) et
c'est moins embêtant à écrire qu'avec un SAXReader....
peux tu me donner ou expliquer ta solution s'il te plaît ?
Merci d'avance :)
aurel
OK, elle est pas encore implémentée donc pas de code ;)
Mais voila l'idée :
Chargement du schéma xsd en mémoire avec un sax reader (plus léger que dom), à chaque évènement, je renvoie dans le flux de sortie le même élément sauf si c'est c'est l'élément que je souhaite modifier, auquel cas, je remplace l'attribut nbOccurences="10000" par unbounded.
Le flux de sortie étant donc une version modifiée du fichier xsd. A chaque fois que le schéma changera, je lancerai cette "moulinette" pour avoir le schéma à jour.
A moins que je charge tout en JDOM, je modifie les éléments que je sais devoir modifier et j'écris ( à la réflexion, la charge en mémoire est plus lourde mais bon, je lance pas cette moulinette tous les jours) et c'est moins embêtant à écrire qu'avec un SAXReader....