Alles Biber!Heute ist Freitag, und das bedeutet Zeit für eine Bestandsaufnahme!Ich setze die Themen unseres Bibliotheksclubs fort und beeile mich, alle Beteiligten ein bisschen glücklich zu machen: Ich habe es geschafft!Nach einem Meer verbrauchter Nervenzellen, einer Menge Dokumentation über Tresterformate und ein paar Krücken habe ich immer noch einen relativ vernünftigen (aber immer noch mit einem schrecklichen Code :)) Konverter (+ Handler + alles, was für die Fantasie ausreicht) für Tresterformate zusammengestellt.https://github.com/HerzenLibRu/BatchMarc (Handler, Regeln sind in js geschrieben)https://github.com/t0pep0/marc21 (Bibliothek auf Go für die Arbeit mit Marc-Formaten)Sie können esfolgendermaßen ausführen : Führen Sie main.go inputFile.ldb outputFile.ldb rules.js aus.Regeln werden auf jeden Marc-Eintrag in der Datei angewendet.Die Dokumentation wurde noch nicht geschrieben, aber liegt alles vor uns? =)Einige Nuancen der Bibliothek (und dementsprechend des Konverters):- Unterfelder werden in einer verknüpften Liste mit Sortierung beim Hinzufügen gespeichert (bestimmte Anfragen von Kollegen erlaubten die Verwendung von Hashmap nicht).
- Leader Flags benennen, die Sie vielleicht nicht mögen
Funktionen zum Schreiben von Regeln:Wenn Ihre Regel ausgeführt wird, gibt es bereits zwei Objekte: orig und res - orig - der ursprüngliche Datensatz, res - was schließlich in die Ausgabedatei geschrieben wird, und wenn Ihre Regel startet, ist res ein leeres Objekt, das gerade initialisiert wurde während orig mit Daten gefüllt ist function VariableSubField(name, data){
this.Name = name;
this.Data = data;
}
function VariableField(tag, indicatorOne, indicatorTwo) {
this.Tag = tag;
this.IndicatorOne = indicatorOne;
this.IndicatorTwo = indicatorTwo;
this.RawData = [];
this.SubField = [];
}
function Leader() {
this.Status = "";
this.Type = "";
this.BibLevel = "";
this.ControlType = "";
this.CharacterEncoding = "";
this.IndicatorCount = "";
this.SubfieldCodeCount = "";
this.EncodingLevel = "";
this.CatalogingForm = "";
this.MultipartLevel = "";
this.LengthOFFieldPort = "";
this.StartCharPos = "";
this.LengthImplemenDefine = "";
this.Undefine = "";
}
function MarcRecord(){
this.Leader = new Leader()
this.VariableField = []
};
orig = new MarcRecord();
res = new MarcRecord();
Wenn Ihre Regeln funktionieren, nimmt Go die Daten aus res und schreibt sie in eine Datei.Achtung! Der Code ist nicht optimiert. Betrachten Sie ihn als das kleinste brauchbare Produkt.Ein Beispiel für die Regeln finden Sie im BatchMarc-Repository.PullRequest, IssueRequest - vonUPD akzeptiert : js zum Schreiben von Regeln wird als die am weitesten verbreitete Sprache (in der Bibliotheksumgebung, einschließlich) ausgewählt