Bonsoir
voilà je voudrais faire une transformation d'un fichier XML en XSD. Je sais que ça apparaît abhérent mais au fait il se trouve que dans mon fichier XML il ya toute la description du schema XML correspondant. Pour être plus exhaustive voilà mon fichier xml par exemple:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<?xml version="1.0" encoding="UTF-8"?>
<schema>
    <element>
       <name>EXEMPLE</name>
      <complexType>
   <sequence>
    <element>
        <name>TEST1</name>
        <type>xsd:string</type>
        <minOccurs>1</minOccurs>
        <maxOccurs>1</maxOccurs>
    </element>
    <element>
        <name>TEST2</name>
        <type>xsd:string</type>
        <minOccurs>1</minOccurs>
        <maxOccurs>1</maxOccurs>
    </element>
    <element>
        <name>TEST3</name>
        <type>xsd:string</type>
        <minOccurs>0</minOccurs>
        <maxOccurs>unbounded</maxOccurs>
    </element>
    <element>
        <name>TEST4</name>
        <type>xsd:string</type>
        <minOccurs>1</minOccurs>
        <maxOccurs>unbounded</maxOccurs>
    </element>
</sequence>
</complexType>
</element>
</schema>
et je devrais finir par avoir un fichier XSD ressemblant à ça :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="EXEMPLE">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="TEST1" type="xsd:string">
 
</xsd:element>
<xsd:element name="TEST2" type="xsd:string">
 
</xsd:element>
<xsd:element maxOccurs="unbounded" name="TEST3" type="xsd:string">
 
</xsd:element>
<xsd:element maxOccurs="unbounded" name="TEST4" type="xsd:string">
 
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
J'arrive à lire mon fichier xml et à l'analyser grâce à SAX, mais là où j'ai une difficulté c'est comment construire le XSD correspondant.
Je vous donne ici mon fichier java. Vous constaterez que j'arrive bien à lire mon fichier xml puisque j'arrive à l'afficher mais pour l'instant j'ai réussi à reconstituer juste l'en-tête du xsd que j'arrive à afficher aussi:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
package tests; 
import java.io.*;
 
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
 
import org.jdom.*;
import org.jdom.output.*;
import org.xml.sax.*;
import org.xml.sax.helpers.DefaultHandler;
 
 
 
public class XlmXsd
{
public static void main(String[] args)throws IOException {
	//analyse sax
	//Si l'utilisateur a oublié de passer
    //le nom du fichier XML en parametre => erreur
    if (args.length != 1) {
        System.err.println("Usage: AnalyseSAX fichierSourceXML");
        System.exit (1);
    }
    //on lance l'analyseur avec le fichier XML en parametre
    DefaultHandler handler = new AnalyseSAX();
    SAXParserFactory factory = SAXParserFactory.newInstance();
    try {
        SAXParser saxParser = factory.newSAXParser();
        saxParser.parse( new File(args[0]), handler );
    } catch (Throwable t) {
        //Si on a une erreur pendant l'analyse
        //t.printStackTrace ();
     //   System.exit (1);
    }
   // System.exit (0);   
 
//	Crée un espace de nom avec préfixe
	Namespace espaceNomctg = Namespace.getNamespace("xsd", 
"http://www.w3.org/2001/XMLSchema");
	XlmXsd tuto = new XlmXsd();
	Element racine = new Element("schema",espaceNomctg);
	Document document = new Document(racine);
 
	// si on veut afficher le fichier XML sur écran
	try {
		XMLOutputter sortie = new XMLOutputter(" ", true);
		sortie.output(document, System.out);
		}
		catch (java.io.IOException e){
		e.printStackTrace();
		}
	}
 
public void error(SAXParseException e) throws SAXParseException{
    throw e;
}
 
 
public void ajoutElement(Element titre, String element, String texte) {
	Element elementAjoute = new Element(element);
	elementAjoute.setText(texte);
	titre.addContent(elementAjoute);
	}
 
}
Merci d'avance

Sabrina