java Konverter PDB-Datei CML-Datei Element-Datei [-c]Beim Aufruf des Konverters müssen die Dateinamen des chemischen Ausgangsformats und der entsprechenden Ausgabedatei angegeben werden. Zusätzlich wird noch der Name einer XML-Datei angegeben, in der Informationen zu den einzelnen Atomen, wie z.B. der kovalente Radius oder der Elektronegativitätswert, gespeichert sind. Diese Daten werden u.a. bei der Berechnung fehlender Bindungen benötigt. Sie werden in einer separaten Datei verwaltet, um sie bei der Konvertierung dynamisch verarbeiten zu können. Somit ist die Möglichkeit gegeben, eigene Werte zu verwenden und dadurch Einfluß auf die Berechnung der Bindungen nehmen zu können. Die Daten der Elemente sind in einem speziellen Format abgelegt. Jedem chemischen Element ist ein Element-Element zugeordnet, das alle weiteren Informationen beinhaltet. Durch das Attribut symbol ist jedes Element-Element eindeutig definiert und es lassen sich die enthaltenen Informationen, wie z.B. Siedepunkt und Schmelztemperatur, genau zuordnen. Exemplarisch sind im Quellcode 6.1 zwei Datensätze abgebildet. Die Daten werden in der Java-Klasse PSEHandler mit Hilfe der Schnittstelle Simple Application Programming Interface for XML (SAX) aus der Datei gelesen. Diese Schnittstelle ist unter Java im Paket org.xml.sax deklariert. Die einzelnen Elementinformationen werden in einem eigenen Java-Objekt Element gespeichert, wobei der Aufbau dieses Objektes in etwa dem Aufbau des Elementes aus der XML-Datei entspricht. Die Element-Objekte werden dann in der Klasse PSE, die von der Klasse Hashtable abstammt, gespeichert. Der Schlüssel zu jedem Element-Objekt ist das chemische Elementsymbol.
<Element symbol="N"> <Ordnungszahl value="7"/> <Name value="Stickstoff"/> <Masse value="14.0067"/> <Radius value="0.92"/> <CovRadius value="0.75"/> <Dichte value="1.251"/> <Schmelzpunkt value="63.15"/> <Siedepunkt value="77.34"/> <Elektronenkonfiguration value="[He] 2s2 2p3"/> <EN-Wert value="3.04"/> </Element> <Element symbol="O"> <Ordnungszahl value="8"/> <Name value="Sauerstoff"/> <Masse value="15.9994"/> <Radius value="0.65"/> <CovRadius value="0.73"/> <Dichte value="1.429"/> <Schmelzpunkt value="54.8"/> <Siedepunkt value="90.18"/> <Elektronenkonfiguration value="[He] 2s2 2p4"/> <EN-Wert value="3.44"/> </Element> |
FileReader reader = null; try { reader = new FileReader (args[0]); } catch (FileNotFoundException e) { System.err.println("FileNotFoundException"+e.getMessage()); System.exit (1); } BufferedReader input = new BufferedReader(reader); String classname = "util." + args[0].substring(args[0].indexOf('.') + 1).toUpperCase() + "Handler"; Document document = null; // Die spezielle Klasse des chem. Formats wird dynamisch geladen // Die Methode convert wird anschliessend aufgerufen try { Class clazz = Class.forName(classname); Constructor con = clazz.getConstructor(new Class[] {String[].class}); // restliche Argumente an Handler uebergeben String[] newargs = new String[args.length - 2]; System.arraycopy(args, 2, newargs, 0, args.length - 2); Object handler = con.newInstance(new Object[] {newargs}); Method toDo = clazz.getMethod("convert", new Class[] {BufferedReader.class}); document = (Document) toDo.invoke(handler, new Object[] {input}); } catch (Exception e) {// Fehlerbehandlung} |