通过z39.50协议用YAZ软件获取Marc数据(JAVA版)
通过z39.50协议用YAZ软件获取Marc数据(JAVA版)
目前网上没有找到相关正式可用的例子,于是自己花了一星期去看文档和前人写的例子(都是10多年前的帖子和资源),分享给大家,希望后来的和我一样的菜鸟能用到
- 配置环境:安装yaz软件。官网:https://www.indexdata.com/resources/software/yaz/下载对应的版本后无脑安装就可以了。
- 创建java项目,导入jar包,安装好的YAZ目录下有一个java文件项,里面有jar包。
- 编写类就可以了。
1.创建连接对象:需要地址和端口
2.设置连接的一些参数:密码,用户名,数据库名,查询方式
3.定义查询语句
4.连接(查询语句)
5.接收结果
6.取出内容
7.关闭连接
public List<String> CNmarc(String host,int port,String username,String password,String datebase){Connection c=null; //声明连接Query q=null; //声明查询int n=0; // 声明尝试次数List<String> list =new ArrayList<String>(); // 返回的集合
try {c=new Connection(host, port);//possibly set some options 可能设置一些选项c.option("elementSetName","F"); //设置简单或者复杂数据查询: B or F -- 简单 or 复杂c.setDatabaseName(datebase);c.setUsername(username);c.setPassword(password);c.setSyntax("Unimarc");//数据格式c.connect(); //establishes connection 建立连接//查询语句StringBuilder queryBuilder = new StringBuilder();queryBuilder.append("@attr 1=7 ");//isbn 号 带不带 - 都可以(自己测试的结果)//978-7-5463-4045-6 西游记的 //9787508690254 行为设计学的queryBuilder.append("\"" +"9787508690254"+ "\"");Query query =new PrefixQuery(queryBuilder.toString());//创建查询类型和语句填充ResultSet set=c.search(query);//查询,并接收查询结果集/*测试时: 单取第一条byte[] b=set.getRecord(0).getContent();//取第一条结果集String st1 =new String(b,"gbk");//以gbk编码格式展示// String st2=set.getRecord(0).render();//取出结果集第一条并断句展示(但是格式默认是gbk(或者获取的默认编码),无法再转码,如果你的程序是utf-8或者其他编码格式,会出现乱码)System.out.println("共:"+set.getHitCount()+"条");System.out.println("结果:"+st1);*/for(int i =0; i<set.getHitCount();i++){byte[] b=set.getRecord(i).getContent();String st1;try {st1 = new String(b,"gbk");list.add(st1);} catch (UnsupportedEncodingException e) { //编码转化失败}}}catch (ZoomException e) {//handle any protocol- or network-level errors//连接时有时会超时异常,解决办法:再次调用,并计数,超次数返回 空集合if(n<5) {n=n+1;//计数一次CNmarc(host,port,username,password,datebase);}else {return list;}} finally {c.close(); //close the socket 关闭连接}return list;
不会可以下载我的例子看(例子也差不多,类就是这个类)
分享一下文档:
资料参考:
http://zoom.z3950.org/api/zoom-1.4.html zoom文档
https://www.indexdata.com/resources/software/yaz/ YAZ官网
https://software.indexdata.com/yaz4j/site/apidocs/index.html jar文档
https://software.indexdata.com/yaz/doc/ YAZ文档
(外国兄弟文档写的真的烂…我tm读了一星期都没看懂什么玩意)
通过z39.50协议用YAZ软件获取Marc数据(JAVA版)相关推荐
- Z39.50客户端源代码(C#)
再VB.Delphi时代,实现z39.50客户端有一个yaz vbzoom的工具包,利用第三方开发包我们可以很快的实现.本文介绍如何使用c#实现Z39.50客户端,当然是纯源码方式不依赖第三方.如果您 ...
- Marc数据解析和拼接(java版)
解析marc数据: marc数据分为三部分:标识区.目次区.数据记录区.详情请仔细查找资料,本文不多介绍,直接上代码 import java.util.ArrayList; import java.u ...
- Z39.50 图书信息检索
Z39.50图书信息检索协议 ISO图书信息检索协议 https://www.loc.gov/z3950/agency/ Z39.50相关资源 开放的免费服务器和相关相关程序配置等 http://zo ...
- marc数据个人心得
最近在做一个实习的图书馆系统,因为涉及到书城,自然会涉及到marc数据的编码与解码,研究了下GB/T 20163-2006的中国档案机读目录格式(在中国国家标准网里可以查到)里面涉及到很多的分段符号, ...
- GK309协议电子工牌数据模拟器+Socket数据发送 JAVA版-源码
GK309协议电子工牌数据模拟器+Socket数据发送 JAVA版-源码 说明 源码 EXE执行文件 说明 单JAVA文件,直接运行main方法即可. 只做了GK309的基础位置数据模拟: 0x01 ...
- 网页marc数据采集器(国图marc数据批量下载)
在国内CNMARC又分为国图格式.CALIS格式.而国图数据最权威的机构当属国家图书馆OPAC.国图页面提供机读格式,可以通过技术手段获取到完整marc数据.本软件使用自己开发的html解析器,无内存 ...
- C#高效编程:改进C#代码的50个行之有效的办法(第2版)(奋斗的小鸟)_PDF 电子书
下载地址:http://pan.baidu.com/share/link?shareid=1689099661&uk=721744522 QQ:2864670220 (提供电子书提取密码) ...
- RTMP协议推流,助力视频数据轻松上云
近年来,在平安城市.雪亮工程.智安小区等政策的扶持下,视频监控逐渐成为市场的新增长点.而云计算.大数据.智能AI等技术,也为视频监控领域的技术提升.智能化改革提供了强大的支持. 视频监控数据一般存储在 ...
- 串口调试助手源代码 qt编写 带协议解析 帧判断 通信数据保存等功能
串口调试助手源代码 qt编写 带协议解析 帧判断 通信数据保存等功能 使用说明介绍 1.功能介绍: 采用Qt编写的串口调试助手工具,功能齐全,除了具备十六进制收发及文件保存等基本功能外,还具有以下功能 ...
最新文章
- 数据不平衡(class_weight、评估方法、上采样、下采样)、详解及实战
- 27.能否在构造函数中抛出异常?析构函数呢?
- Vue——组件化开发DEMO
- java无权图求最短路径_求有权图和无权图的最短路径
- mysql磁盘io高是什么造成_FAQ | 是什么导致MySQL数据库服务器磁盘I/O高(本文章来自知数堂)...
- 深入理解分布式系统原理与设计
- Java 3D编程实践_Java 3D编程实践——网络上的三维动画[学习笔记]
- 2020 年百度之星·程序设计大赛 - 测试赛1001 度度熊保护村庄
- 从C#到Nodejs,从windowns到mac
- 软件测试的金字塔体系--从1个中心到5个要素
- 基于jsp java的员工绩效考核管理系统
- php 车牌号 正则,php正则验证车牌格式的函数
- 计算机硬件故障照片,计算机硬件故障的识别与处理
- 【简写】编程领域简写
- Q3净利同比下滑超30%,脱离小米的“云米们”还能长大吗?
- Anaconda使用总结
- java如何保证一个方法只能执行一次
- 工厂应该怎样规划生产品质管理?
- python实战爬虫有道翻译与解决{“errorCode”:50}反爬虫问题
- 哔哩下载姬 - DownKyi