BatchMarc معالجة ملفات مارك على الذهاب + شبيبة

كل سمور!
اليوم هو يوم الجمعة ، وهذا يعني الوقت لتقييم!

استمرارًا لموضوعات نادي المكتبات لدينا ، سارعت إلى جعل جميع المشاركين سعداء بعض الشيء: لقد فعلتها!

بعد بحر من الخلايا العصبية المستهلكة ، وبعد جحيم من الوثائق حول تنسيقات مارك ، ومجموعة من العكازات ، ما زلت أجمع محولًا عاقلًا نسبيًا (ولكن لا يزال مع رمز فظيع :)) (+ معالج + كل ما يكفي للخيال) لتنسيقات مارك.

https://github.com/HerzenLibRu/BatchMarc (معالج ، القواعد مكتوبة في js)

https://github.com/t0pep0/marc21 (مكتبة على Go للعمل باستخدام تنسيقات مارك)



يمكنك
تشغيله على النحو التالي : go run main.go inputFile.ldb outputFile.ldb Rules.js

يتم تطبيق القواعد على كل إدخال في الملف.
لم تتم كتابة التوثيق بعد ، ولكن هل ينتظرنا كل شيء؟ =)

بعض الفروق الدقيقة في المكتبة (وبالتالي المحول):
  • يتم تخزين الحقول الفرعية في قائمة مرتبطة مع الفرز عند إضافتها (لم تسمح طلبات محددة من الزملاء باستخدام التجزئة)
  • تسمية أعلام زعيم قد لا تعجبك


ميزات كتابة القواعد:
عندما يبدأ تنفيذ قاعدتك ، هناك بالفعل شيئان: orig و res - orig - السجل الأصلي ، res - ما سيتم كتابته في النهاية إلى ملف الإخراج ، وعندما تبدأ قاعدتك ، يكون res كائنًا فارغًا ، تمت تهيئته للتو ، في بينما يمتلئ orig بالبيانات

  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();


عندما تعمل قواعدك ، ستأخذ Go البيانات من الدقة ، وتكتبها في ملف.

إنتباه! لم يتم تحسين الرمز ، واعتبره أصغر منتج قابل للتطبيق.

يمكن العثور على مثال للقواعد في مستودع BatchMarc.

PullRequest ، IssueRequest - مقبولة من

UPD: يتم اختيار js لكتابة القواعد باعتبارها اللغة الأكثر انتشارًا (في بيئة المكتبة ، بما في ذلك) اللغة

Source: https://habr.com/ru/post/ar395377/


All Articles