Processo BatchMarc marcam arquivos em go + js

Todo castor!
Hoje é sexta-feira, e isso significa tempo para fazer um balanço!

Continuando os temas do nosso clube de bibliotecas, apresso-me a deixar todos os envolvidos um pouco felizes: consegui!

Depois de um mar de células nervosas gastas, depois de muita documentação em formatos de marc e várias muletas, eu ainda monto um conversor relativamente sadio (mas ainda com um código terrível :)) (+ manipulador + tudo o que é suficiente para fantasia) para formatos de marc.

https://github.com/HerzenLibRu/BatchMarc (manipulador, regras escritas em js)

https://github.com/t0pep0/marc21 (biblioteca do Go para trabalhar com formatos de marc)



Você pode executá-lo assim:
vá executar main.go inputFile.ldb outputFile.ldb rules.js As

regras são aplicadas a cada entrada de marc no arquivo.
A documentação ainda não foi escrita, mas está tudo à nossa frente? =)

Algumas das nuances da biblioteca (e, consequentemente, do conversor):
  • subcampos são armazenados em uma lista vinculada com classificação quando adicionados (solicitações específicas de colegas não permitiram o uso de hashmap)
  • Nomeando Bandeiras Líderes que Você Pode Não Gostar


Recursos das regras de gravação:
Quando sua regra começa a ser executada, já existem dois objetos: orig e res - orig - o registro original, res - o que será gravado no arquivo de saída e, quando sua regra iniciar, res é um objeto vazio, apenas inicializado, em enquanto orig é preenchido com dados

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


Quando suas regras funcionam, o Go pega os dados de res e os grava em um arquivo.

Atenção! O código não está otimizado, considere o menor produto viável.

Um exemplo das regras pode ser encontrado no repositório do BatchMarc.

PullRequest, IssueRequest - aceito pelo

UPD: js para escrever regras é selecionado como o idioma mais amplamente distribuído (no ambiente da biblioteca, incluindo)

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


All Articles