JabRef bietet Ihnen die Möglichkeit, ganz ähnlich den Standard-Importern, eigene Importer zu definieren und zu benutzen. Man definiert einen Importer durch eine oder mehrere Java Klassen, die Dateinhalte aus einem sogenannten Input stream lesen und daraus BibTex-Einträge erzeugen. Sie können vorkompilierte Importer einbinden, die Sie vielleicht von SourceForge erhalten haben (siehe "Ihre Arbeit anderen zur Verfügung stellen"). Sie können auch mit Grundkenntnissen der Java-Programmierung eigene Importer für für Sie wichtige Referenzquellen erstellen oder neue, verbesserte Versionen existierender Importer einbinden, ohne JabRef neu zu kompilieren.
Externe Importfilter haben Vorrang vor Standard-Importern. So können Sie mit Ihren Importern die existierenden in der automatischen Formaterkennung und an der Kommandozeile in JabRef überschreiben. Externe Importfilter selbst sind dann nach Namen sortiert.
Stellen Sie sicher, dass Sie den Importer in kompilierter Form haben (eine oder mehrere
.class
Dateien) und dass die Klassendateien
in einer Verzeichnisstruktur entsprechend ihrer Package-Struktur liegen.
Um einen neuen externen Importfilter hinzuzufügen, öffnen Sie den Dialog
Optionen -> Verwalte externe Importfilter, und klicken Sie auf
Aus Klassenpfad hinzufügen. Ein Dateiauswahl-Fenster erscheint,
mit dem Sie den Klassenpfad des Importers wählen, dass heißt den obersten Ordner,
in dem die Package-Struktur Ihres Importers beginnt. In einem zweiten Dateiauswahl-Fenster
wählen Sie die .class-Datei Ihres Importers, die von ImportFormat
abgeleitet
ist. Wenn Sie Klasse auswählen klicken, erscheint Ihr neuer Importer
in der Liste der externen Importfilter. Alle externen Importfilter erscheinen in den
JabRef-Submenüs Datei -> Importieren -> Externe Importfilter und
Datei -> Importieren und Anhängen -> Externe Importfilter.
Bitte beachten Sie: wenn Sie die Klassen in ein anderes Verzeichnis verschieben, müssen Sie den Importer entfernen und neu hinzufügen. Wenn Sie einen Importfilter mit einem bereits vorhandenen Namen registrieren, ersetzt JabRef den vorhandenen externen Importfilter. Auch wenn es in manchen Fällen möglich ist, einen schon registrierten Importer zu aktualisieren ohne JabRef neu zu starten (nämlich dann, wenn der Importer nicht im Klassenpfad von JabRef ist), empfehlen wir, grundsätzlich JabRef neu zu starten, wenn Sie ein Update eines externen Importers durchgeführt haben. Sie können auch Importer aus ZIP- oder JAR-Archiven registrieren, wählen Sie einfach Aus Archiv-Datei hinzufügen, dann das ZIP- oder JAR-Archiv und dann den Eintrag (Klassendatei), der den neuen Importer darstellt.
Angenommen, wir wollen Dateien der folgenden Form importieren:
1936;John Maynard Keynes;The General Theory of Employment, Interest and Money 2003;Boldrin & Levine;Case Against Intellectual Monopoly 2004;ROBERT HUNT AND JAMES BESSEN;The Software Patent Experiment
Erzeugen Sie in einem Text-Editor eine von ImportFormat
abgeleitete Klasse,
die die Methoden getFormatName()
, isRecognizedFormat()
und importEntries()
implementiert. Hier ein Beispiel:
import java.io.*; import java.util.*; import net.sf.jabref.*; import net.sf.jabref.imports.ImportFormat; import net.sf.jabref.imports.ImportFormatReader; public class SimpleCsvImporter extends ImportFormat { public String getFormatName() { return "Simple CSV Importer"; } public boolean isRecognizedFormat(InputStream stream) throws IOException { return true; // this is discouraged except for demonstration purposes } public List importEntries(InputStream stream) throws IOException { ArrayList bibitems = new ArrayList(); BufferedReader in = new BufferedReader(ImportFormatReader.getReaderDefaultEncoding(stream)); String line = in.readLine(); while (line != null) { if (!"".equals(line.trim())) { String[] fields = line.split(";"); BibtexEntry be = new BibtexEntry(Util.createNeutralId()); be.setType(BibtexEntryType.getType("techreport")); be.setField("year", fields[0]); be.setField("author", fields[1]); be.setField("title", fields[2]); bibitems.add(be); line = in.readLine(); } } return bibitems; } }
Beachten Sie, dass die Beispielklasse im Default-Package liegt. Angenommen, Sie haben
sie unter /meinpfad/SimpleCsvImporter.java
gespeichert. Nehmen wir weiter an,
die Datei JabRef-2.0.jar ist im gleichen Verzeichnis wie
SimpleCsvImporter.java
und Java ist in Ihrem Kommandopfad.
Kompilieren Sie die Klasse mit JSDK 1.4 zum Beispiel mit folgendem Kommandozeilen-Aufruf:
javac -classpath JabRef-2.0.jar SimpleCsvImporter.javaNun sollte dort auch eine Datei
/mypath/SimpleCsvImporter.class
liegen.
Öffnen Sie in JabRef Optionen -> Verwaltung externer Importfilter und klicken Sie
auf Aus Klassenpfad hinzufügen. Navigieren Sie nach /meinpfad
und
klicken Sie Klassenpfad auswählen. Wählen Sie dann SimpleCsvImporter.class
und klicken Sie Klasse auswählen. Ihr Importfilter sollte nun in der Liste der
externen Importfilter unter dem Namen "Simple CSV Importer" erscheinen, und,
sobald Sie Schließen gewählt haben, auch in den Untermenüs Datei -> Importieren ->
Externe Importfilter und Datei -> Importieren und Anhängen -> Externe Importfilter
des JabRef-Hauptfensters.