图书信息生成Marc

  1. 大家也可以通过手动拼接的方式实现,这个案例是通过第三方实现,因为我的其他相关的文章很多解析也是通过第三方,比较方便,好维护。

  2. String encoding = “GBK”;这个是因为我的其他地方解析用的用一套编码格式

  3. Leader leader = new LeaderImpl(); leader.unmarshal("00628nam0 2200145 450 ");
    这个是手动随意写进去的,因为这个第三方库是会自动更新,本身这个字符串代表的也是这个整个的Marc的特殊含义。只要写的长度符合要求,一些格式和特殊的字符合基本没有什么问题,这个数值最后也会随着传入的值不一样而不一样。具体的各个字段代表什么意思,可以参照给出的图书规范。每个阶段会不一样。

   public static String BookToMARCConverter(BmBookList book) throws UnsupportedEncodingException {
        String encoding = "GBK";
        if (ObjectUtil.isEmpty(book)) return null;
        Leader leader = new LeaderImpl();
        leader.unmarshal("00628nam0 2200145   450 ");
        String s1 = DateUtils.formatToDay(DateUtils.getNowDate(), DateUtils.YYYYMMDDHHMMSS)+".0";
        ControlField controlField001 = new ControlFieldImpl("001", "010793493"); // 示例控制号
        ControlField controlField005 = new ControlFieldImpl("005", new String(s1.getBytes(encoding), Charset.forName(encoding))); // 示例008字段,需要根据实际情况调整
        Record record = new RecordImpl();
//        record.setLeader(MarcFactory.newInstance().newLeader());
        record.setLeader(leader);
        record.addVariableField(controlField001);
        record.addVariableField(controlField005);

        if (ObjectUtil.isNotEmpty(book.getBoisbnIssn()) || ObjectUtil.isNotEmpty(book.getBoprice())){
            DataField isbnField = new DataFieldImpl("010", ' ', ' ');
            if (ObjectUtil.isNotEmpty(book.getBoisbnIssn())){
                Subfield isbnSubfield = new SubfieldImpl('a',new String( book.getBoisbnIssn().getBytes(encoding), Charset.forName(encoding)));
                isbnField.addSubfield(isbnSubfield);
            }
            if (ObjectUtil.isNotEmpty(book.getBoprice())){
                Subfield isbnSubfield = new SubfieldImpl('d',new String( book.getBoprice().getBytes(encoding), Charset.forName(encoding)));
                isbnField.addSubfield(isbnSubfield);
            }
            record.addVariableField(isbnField);
        }

        if (ObjectUtil.isNotEmpty(book.getBolanguage()) ){
            DataField isbnField = new DataFieldImpl("101", ' ', ' ');
            Subfield isbnSubfield = new SubfieldImpl('a', new String( book.getBolanguage().getBytes(encoding), Charset.forName(encoding)));
            isbnField.addSubfield(isbnSubfield);
            record.addVariableField(isbnField);
        }

//        if (ObjectUtil.isNotEmpty(book.getBoname()) || ObjectUtil.isNotEmpty(book.getBoauthor()) ||
//                ObjectUtil.isNotEmpty(book.getSubtitle()) || ObjectUtil.isNotEmpty(book.getSubtitle()) ||
//        ObjectUtil.isNotEmpty(book.getOtherAuthors()) || ObjectUtil.isNotEmpty(book.getCategoryName()) || ObjectUtil.isNotEmpty(book.getCategoryNumber()) ){
            DataField isbnField2 = new DataFieldImpl("200", ' ', ' ');
            if (ObjectUtil.isNotEmpty(book.getBoname())){
                Subfield isbnSubfield = new SubfieldImpl('a', new String(book.getBoname().getBytes(encoding), Charset.forName(encoding)));
                isbnField2.addSubfield(isbnSubfield);
            }else{
                Subfield isbnSubfield = new SubfieldImpl('a', "书名不详");
                isbnField2.addSubfield(isbnSubfield);
            }
            if (ObjectUtil.isNotEmpty(book.getBoauthor())){
                String str = book.getBoauthor();
                if(ObjectUtil.isNotEmpty(book.getResponsible())){
                    str += ";"+book.getResponsible();
                }
                Subfield isbnSubfield = new SubfieldImpl('f', new String(str.getBytes(encoding), Charset.forName(encoding)));
                isbnField2.addSubfield(isbnSubfield);
            }else if (ObjectUtil.isNotEmpty(book.getResponsible())){
                Subfield isbnSubfield = new SubfieldImpl('f', book.getResponsible());
                isbnField2.addSubfield(isbnSubfield);
            }
            if (ObjectUtil.isNotEmpty(book.getSubtitle())){
                Subfield isbnSubfield = new SubfieldImpl('e',  new String(book.getSubtitle().getBytes(encoding), Charset.forName(encoding)));
                isbnField2.addSubfield(isbnSubfield);
            }

            if (ObjectUtil.isNotEmpty(book.getOtherAuthors())){
                Subfield isbnSubfield = new SubfieldImpl('g', book.getOtherAuthors());
                isbnField2.addSubfield(isbnSubfield);
            }
            if (ObjectUtil.isNotEmpty(book.getOtherResponsible())){
                Subfield isbnSubfield = new SubfieldImpl('g', book.getOtherResponsible());
                isbnField2.addSubfield(isbnSubfield);
            }
            if (ObjectUtil.isNotEmpty(book.getCategoryNumber())){
                Subfield isbnSubfield = new SubfieldImpl('h', book.getCategoryNumber());
                isbnField2.addSubfield(isbnSubfield);
            }

            if (ObjectUtil.isNotEmpty(book.getCategoryName())){
                Subfield isbnSubfield = new SubfieldImpl('i', book.getCategoryName());
                isbnField2.addSubfield(isbnSubfield);
            }
            record.addVariableField(isbnField2);
//        }else{
//            DataField isbnField = new DataFieldImpl("200", ' ', ' ');
//                Subfield isbnSubfield = new SubfieldImpl('a', "书名不详");
//                isbnField.addSubfield(isbnSubfield);
//
//            record.addVariableField(isbnField);
//        }

        if (ObjectUtil.isNotEmpty(book.getBopublish()) || ObjectUtil.isNotEmpty(book.getBopubDate()) || ObjectUtil.isNotEmpty(book.getPlacePublication())){
            DataField isbnField = new DataFieldImpl("210", ' ', ' ');
            if (ObjectUtil.isNotEmpty(book.getPlacePublication())){
                Subfield isbnSubfield = new SubfieldImpl('a',new String( book.getPlacePublication().getBytes(encoding), Charset.forName(encoding)));
                isbnField.addSubfield(isbnSubfield);
            }
            if (ObjectUtil.isNotEmpty(book.getBopublish())){
                Subfield isbnSubfield = new SubfieldImpl('c',new String(  book.getBopublish().getBytes(encoding), Charset.forName(encoding)));
                isbnField.addSubfield(isbnSubfield);
            }
            if (ObjectUtil.isNotEmpty(book.getBopubDate())){
                Subfield isbnSubfield = new SubfieldImpl('d', book.getBopubDate());
                isbnField.addSubfield(isbnSubfield);
            }
            record.addVariableField(isbnField);
        }

        if (ObjectUtil.isNotEmpty(book.getPagination()) || ObjectUtil.isNotEmpty(book.getSize())  || ObjectUtil.isNotEmpty(book.getAttachment())){
            DataField isbnField = new DataFieldImpl("215", ' ', ' ');
            if (ObjectUtil.isNotEmpty(book.getPagination())){
                Subfield isbnSubfield = new SubfieldImpl('a',new String(   book.getPagination().getBytes(encoding), Charset.forName(encoding)));
                isbnField.addSubfield(isbnSubfield);
            }
            if (ObjectUtil.isNotEmpty(book.getSize())){
                Subfield isbnSubfield = new SubfieldImpl('d', new String(  book.getSize().getBytes(encoding), Charset.forName(encoding)));
                isbnField.addSubfield(isbnSubfield);
            }
            if (ObjectUtil.isNotEmpty(book.getAttachment())){
                Subfield isbnSubfield = new SubfieldImpl('e', book.getAttachment());
                isbnField.addSubfield(isbnSubfield);
            }
            record.addVariableField(isbnField);
        }

        if (ObjectUtil.isNotEmpty(book.getGeneralNotes()) ){
            DataField isbnField = new DataFieldImpl("300", ' ', ' ');
            Subfield isbnSubfield = new SubfieldImpl('a',  new String(  book.getGeneralNotes().getBytes(encoding), Charset.forName(encoding)));
            isbnField.addSubfield(isbnSubfield);
            record.addVariableField(isbnField);
        }

        if (ObjectUtil.isNotEmpty(book.getBoabstract()) ){
            DataField isbnField = new DataFieldImpl("330", ' ', ' ');
            Subfield isbnSubfield = new SubfieldImpl('a', new String( book.getBoabstract().getBytes(encoding), Charset.forName(encoding)));
            isbnField.addSubfield(isbnSubfield);
            record.addVariableField(isbnField);
        }

        if (ObjectUtil.isNotEmpty(book.getBosubterm()) ){
            DataField isbnField = new DataFieldImpl("606", ' ', ' ');
            Subfield isbnSubfield = new SubfieldImpl('a',new String(  book.getBosubterm().getBytes(encoding), Charset.forName(encoding)));
            isbnField.addSubfield(isbnSubfield);
            record.addVariableField(isbnField);
        }

        if (ObjectUtil.isNotEmpty(book.getBoclassNo()) ){
            DataField isbnField = new DataFieldImpl("690", ' ', ' ');
            Subfield isbnSubfield = new SubfieldImpl('a',new String(  book.getBoclassNo().getBytes(encoding), Charset.forName(encoding)));
            isbnField.addSubfield(isbnSubfield);
            record.addVariableField(isbnField);
        }


        ByteArrayOutputStream out = new ByteArrayOutputStream();
        MarcStreamWriter writer = new MarcStreamWriter(out,encoding);
        System.out.println("record");
        System.out.println(record.toString());
        writer.write(record);

        // 输出转换后的 Marc 字符串
        String s = new String(out.toByteArray(),encoding);
        return s;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值