Transformation XML vers XSD
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:
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:
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:
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