欢迎您来到 数字平台。 您尚未登录。[登录] [注册新用户]
当前位置: 论坛首页 / 栏目 产品与服务 / 文章 756

点击:12437[回复顶层] [树状] [简明]


文章数: 301
积分: 3010
注册时间: 2005/9/5
[回复留言] [回复(需要先登录)] [引用(需要先登录)]普通文章第 1 楼
文章id: 756
数据浏览功能的添加与配置



dp2 V2版本中,OPAC环境中具备数据浏览功能。所谓数据浏览,是指系统根据一定的规则,在OPAC环境中提供特定链接锚点,直接向访问者展示相关数据。数据浏览功能其实也是一种“检索”功能,只不过,它将检索条件固化到特定链接锚点中,除了降低访问者检索词输入成本外,更主要是可以由系统有针对性地、直观地将某些数据展现到访问者面前。

所以,数据浏览功能是常规“检索”功能的补充和扩展。

当前,dp2OPAC服务安装后,并没有提供数据浏览功能配置,需要系统管理员手工添加相关配置文件,才能实现数据浏览功能的添加。

下面将提供一个配置样例并作相应说明:

一、配置样例可点击此处下载。解压后,得到一个名为"browse"的文件夹。将此文件夹拷贝到dp2OPAC系统数据目录下(与"opac.xml文件同级")。重启IIS或回收一下dp2OPAC的应用程序池后,OPAC环境中即具备了浏览功能。

二、访问OPAC页面,可以看到有一个"浏览"栏目,点击它,切换到"浏览"环境,可以看到有"分类浏览"、"新书通报"、"馆藏浏览"、"读者荐购"四个二级栏目。

这些二级栏目,可以自定义扩展,它受控于dp2OPAC系统数据目录下browse文件夹中的"browse_sidebar.xml"文件。用记事本程序或文本编辑程序打开它,就可以看出端倪:

<?xml version="1.0" encoding="gb2312"?>
<root>
 <item url="./browse.aspx?sidebar=browse_sidebar.xml&amp;datafile=browse.xml">
  <caption lang="zh-CN">分类浏览</caption>
  <caption lang="en-US">Browse Class</caption>
 </item>
 <item url="./browse.aspx?sidebar=browse_sidebar.xml&amp;datafile=newbook.xml">
  <caption lang="zh-CN">新书通报</caption>
  <caption lang="en-US">New Books</caption>
 </item>
 <item url="./browse.aspx?sidebar=browse_sidebar.xml&amp;datafile=holdingBrowse.xml">
  <caption lang="zh-CN">馆藏浏览</caption>
  <caption lang="en-US">Holding Browse</caption>
 </item>
 <item url="./browse.aspx?sidebar=recommend_sidebar.xml&amp;datafile=recommend.xml">
  <caption lang="zh-CN">读者荐购</caption>
  <caption lang="en-US">Reader Recommend</caption>
 </item>
</root>

即样例中的四个二级栏目,就是上述配置文件中的四个<itme>元素,其中的<caption>元素,可以定义多种语种的栏目名,通过lang属性值区分。而<itme>的url属性值,就是一个页面调用的链接。其中后部诸如"datafile=browse.xml"的定义,指明了不同栏目的调用配置文件。

再打开dp2OPAC系统数据目录下browse文件夹中的"browse.xml"文件:

<?xml version="1.0" encoding="gb2312"?>
<root name="中图法分类导航" command="~hidelist~" default="matchstyle=left,dbname=&lt;全部&gt;,from=分类号" description="提供中图法分类导航。可扩展出其它分类导航" rssDefault="enable=on,maxcount=100" build="autoUpdate=perhour" >
  <class name="A 马克思主义、列宁主义、毛泽东思想、邓小平理论" command="word=A">
    <class name="A1 马克思、恩格斯著作"/>
    <class name="A2 列宁著作"/>
    <class name="A3 斯大林著作"/>
    <class name="A4 毛泽东著作"/>
    <class name="A49 邓小平著作"/>
    <class name="A5 马克思、恩格斯、列宁、斯大林、毛泽东、邓小平著作汇编 "/>
    <class name="A7 马克思、恩格斯、列宁、斯大林、毛泽东、邓小平生平和传记" />
    <class name="A8 马克思主义、列宁主义、毛泽东思想、邓小平理论的学习和研究" />
  </class>
 
  <class name="B 哲学、宗教">
    <class name="B-4 哲学教育与普及"/>
    <class name="B0 哲学理论"/>
    <class name="B1 世界哲学"/>
    <class name="B2 中国哲学"/>
    <class name="B3 亚洲哲学"/>
    <class name="B4 非洲哲学"/>
    <class name="B5 欧洲哲学"/>
    <class name="B6 大洋洲哲学"/>
    <class name="B7 美洲哲学"/>
    <class name="B80 思维科学"/>
    <class name="B81 逻辑学(论理学)"/>
    <class name="B82 伦理学(道德哲学)"/>
    <class name="B83 美学"/>
    <class name="B84 心理学"/>
    <class name="B9 宗教"/>
  </class>
<!--为节省篇幅,以下分类节点略-->

  <_title>
    <caption lang="zh-CN">分类浏览</caption>
    <caption lang="en-US">Browse Class</caption>
  </_title>
</root>

其中,<root>元素具有以下属性及属性值:
name属性值,是分类导航树根节点显示名称,可根据自己的喜好自定义名称。
command属性值"~hidelist~",表示双击此节点时,只展开节点而不提交检索命令。
dafault属性值,声明相关的检索命令,各检索命令间采用逗号分隔。比如matchstyle=left,表示检索匹配方式为前方一致(左对齐);dbname=&lt;全部&gt;表示检索目标库为"<全部>",这个"<全部>"对应于内务前端书目查询窗中的<全部>库。由于配置文件遵循XML规范,对于"<"和">"两个字符,采用"&lt;"和"&gt;"实体引用代替——同理,如果dbname=&lt;全部实体&gt;则表示检索目标库为"<全部实体>"。如果只想查找指明库,直接修改为相应的数据库名称即可,格式为:
dbname=中文图书。也可用"|"字符分隔多个数据库名称,表明同时检索这几个数据库,格式为:dbname=中文图书|外文图书。from=分类号,表明检索途径为"分类号"。从这里可以看出,所有的数据浏览都是基于系统检索点(检索途径)的,如果没有预定义检索点,是无法实现数据浏览的。
description属性值,是一个自由行文字符串,它将呈现在相关栏目环境上方,起到简单描述说明作用。
rssDefault属性值,也包含多个用逗号分隔的参数值,比如enable=on表明生成RSS订阅图标以便访问者实现rss订阅;maxcount=100表明最大显示100条记录的RSS记录,如果值为-1,意味着不限制显示记录数量,将命中结果全产生RSS订阅记录。
build属性值,可以定义浏览结果缓存的自动刷新频率。autoUpdate=perhour,表明每小时自动刷新一次;除了perhour外,还可以定义为perday,表明每天自动刷新一次,等等……。

在<root>元素下,有多个<class>元素,<class>元素可以嵌套,即<class>元素下可以包含<class>元素,这就构成了分类导航树型结构的层层展开的树节点。
每个<class>元素,也具备<root>元素一样的属性。
为节省配置成本,系统采用“继承”和“专指”两个原则。所谓继承,是指本节点如果没有定义相关属性,可以自动继承上级节点定义的属性;所谓专指,是指本节点如果定义了相关属性,即便上级节点也定义了同样的属性,那么也优先采用本节点的属性定义。

样例中,<class name="A 马克思主义、列宁主义、毛泽东思想、邓小平理论" command="word=A">,可以看到有一个command属性值为"word=A",它表明检索词为"A",其实,也可以不显式声明"word=A",因为,程序可以自动在name属性值中,通过第一个空格拆分,将前面的字符"A"自动判断为检索词。
可以看出,上述节点中,虽然只表达了检索词,但根据配置继承原则,其实完整的检索命令是:在"全部书目库"中,通过"分类号"检索途径,以"前方一致"方式,输入"A"检索词进行检索……

样例配置中,还有一个"browse_lc.xml"配置文件,这是为了方便某些采用美国国会图书馆分类法的客户提供的,如有需要,系统管理员可自行增加相关栏目并挂接此配置文件即可。

三、browse.xml配置文件展示了一个从书目库发起的数据浏览功能。也可以从实体库(册库)发起,同样实现相关数据浏览功能。样例配置文件"holdingBrowse.xml"就是这样的一个示范:

<?xml version="1.0" encoding="gb2312"?>
<root name="馆藏地浏览" command="~hidelist~" default="matchstyle=left,dbname=&lt;全部实体&gt;,from=馆藏地点" description="根据馆藏地点列出册信息" rssDefault="enable=on,maxcount=100" >
  <class name="乐山市图书馆书刊流通部" command="word=乐山市图书馆书刊流通部" convert="tobiblio"/>
  <class name="乐山市图书馆文献咨询部" command="word=乐山市图书馆文献咨询部" convert="tobiblio"/>
  <class name="乐山市图书馆少儿阅览室" command="word=乐山市图书馆少儿阅览室" convert="tobiblio"/>
  <class name="犍为县馆" command="word=犍为县馆" convert="tobiblio"/>
  <class name="夹江县馆" command="word=夹江县馆" convert="tobiblio"/>
  <class name="井研县馆" command="word=井研县馆" convert="tobiblio"/>
  <class name="五通桥区馆" command="word=五通桥区馆" convert="tobiblio"/>
  <class name="沙湾区馆" command="word=沙湾区馆" convert="tobiblio"/>
  <class name="沐川县馆" command="word=沐川县馆" convert="tobiblio"/>
  <class name="实验中学" command="word=实验中学" convert="tobiblio"/>
  <class name="乐山残疾人康复中心" command="word=乐山残疾人康复中心" convert="tobiblio"/>
  <class name="嘉阳煤业" command="word=嘉阳煤业" convert="tobiblio"/>
  <_title>
    <caption lang="zh-CN">馆藏地浏览</caption>
    <caption lang="en-US">Holding Browse</caption>
  </_title>
</root>

上述样例,是从"全部实体"库,通过"馆藏地点"检索途径,以"前方一致"方式,输入不同的检索词进行检索(各节点中的word=中声明了不同的馆藏地点字符串)。
由于是从实体库发起的检索,有别于书目显示格式,以册为主的显示格式不太一样。为了照顾某些客户的习惯,节点中有一个convert属性,其"tobiblio"值,可以实现将册为主的显示格式转换为书目显示格式后再输出。

四、关于新书通报。何谓“新书”?见仁见智,有的根据书目中的出版时间进行判断,比如XXXX年后出版的为新书;有的根据入藏时间进行判断,比如XXXX时间后到馆的为新书;还可以根据编目批次号、册登记批次号等进行判断。样例配置文件"newbook.xml"是根据编目时间进行判断的一个例子:

<?xml version="1.0" encoding="gb2312"?>
<root name="新书通报" command="~hidelist~" default="word=2011/09/05 12:01:01Z-2011/12/31 12:01:01Z,matchstyle=exact,dbname=中文图书,from=操作时间" description="根据编目时间列出目录" rssDefault="enable=on,maxcount=100" build="autoUpdate=perhour" >
  <class name="A 马克思主义、列宁主义、毛泽东思想、邓小平理论" command="word=A,matchstyle=left,from=分类号;AND;matchstyle=exact,datatype=number,relation=range"/>
  <class name="B 哲学、宗教" command="word=B,matchstyle=left,from=分类号;AND;matchstyle=exact,datatype=number,relation=range"/>
  <class name="C 社会科学总论" command="word=C,matchstyle=left,from=分类号;AND;matchstyle=exact,datatype=number,relation=range"/>
  <class name="D 政治、法律" command="word=D,matchstyle=left,from=分类号;AND;matchstyle=exact,datatype=number,relation=range" />
  <class name="E 军事" command="word=E,matchstyle=left,from=分类号;AND;matchstyle=exact,datatype=number,relation=range"/>
  <class name="F 经济" command="word=F,matchstyle=left,from=分类号;AND;matchstyle=exact,datatype=number,relation=range"/>
  <class name="G 文化、科学、教育、体育" command="word=G,matchstyle=left,from=分类号;AND;matchstyle=exact,datatype=number,relation=range"/>
  <class name="H 语言、文字" command="word=H,matchstyle=left,from=分类号;AND;matchstyle=exact,datatype=number,relation=range"/>
  <class name="I 文学" command="word=I,matchstyle=left,from=分类号;AND;matchstyle=exact,datatype=number,relation=range"/>
  <class name="J 艺术" command="word=J,matchstyle=left,from=分类号;AND;matchstyle=exact,datatype=number,relation=range"/>
  <class name="K 历史、地理" command="word=K,matchstyle=left,from=分类号;AND;matchstyle=exact,datatype=number,relation=range"/>
  <class name="N 自然科学总论" command="word=N,matchstyle=left,from=分类号;AND;matchstyle=exact,datatype=number,relation=range"/>
  <class name="O 数理科学和化学" command="word=O,matchstyle=left,from=分类号;AND;matchstyle=exact,datatype=number,relation=range"/>
  <class name="P 天文学、地球科学" command="word=P,matchstyle=left,from=分类号;AND;matchstyle=exact,datatype=number,relation=range"/>
  <class name="Q 生物科学" command="word=Q,matchstyle=left,from=分类号;AND;matchstyle=exact,datatype=number,relation=range"/>
  <class name="R 医药、卫生" command="word=R,matchstyle=left,from=分类号;AND;matchstyle=exact,datatype=number,relation=range"/>
  <class name="S 农业科学" command="word=S,matchstyle=left,from=分类号;AND;matchstyle=exact,datatype=number,relation=range"/>
  <class name="T 工业技术" command="word=T,matchstyle=left,from=分类号;AND;matchstyle=exact,datatype=number,relation=range"/>
  <class name="U 交通运输" command="word=U,matchstyle=left,from=分类号;AND;matchstyle=exact,datatype=number,relation=range"/>
  <class name="V 航空、航天" command="word=V,matchstyle=left,from=分类号;AND;matchstyle=exact,datatype=number,relation=range"/>
  <class name="X 环境科学、安全科学" command="word=X,matchstyle=left,from=分类号;AND;matchstyle=exact,datatype=number,relation=range"/>
  <class name="Z 综合图书" command="word=Z,matchstyle=left,from=分类号;AND;matchstyle=exact,datatype=number,relation=range"/>
  <_title>
  <caption lang="zh-CN">新书通报</caption>
  <caption lang="en-US">New Books</caption>
  </_title>
</root>

注意,这里的检索词(word=2011/09/05 12:01:01Z-2011/12/31 12:01:01Z)是一个时间范围,这有别于常见的字符串或数值检索词。
同时,为了便于访问者查看新书,这里示范了一个逻辑组配检索命令配置,即用分号分隔,可以通过"AND"、"OR"、"NOT"串起多个检索命令以实现逻辑与、逻辑或、逻辑非的组配检索。
样例表达了:
在"中文图书"库中,通过"分类号"检索途径,以"前方一致"方式,输入"A"等检索词进行检索,并且,只返回"操作时间"是"2011/09/05 12:01:01Z-2011/12/31 12:01:01Z"的结果”。

五、关于"recommend_sidebar.xml",它其实跟"browse_sidebar.xml"差不多,也是用以构造浏览二级栏目的配置文件,只不过,前者比后者多了如下栏目定义:

 <item url="./newrecommend.aspx">
  <caption lang="zh-CN">创建新的荐购书目</caption>
  <caption lang="en-US">New Recommend</caption>
 </item>

这是为了仅访问者点击“读者荐购”栏目时,才出现相关的供读者“创建新的荐购书目”的栏目链接所用。


系统管理员清楚了解上述配置方式后,即可非常灵活地实现多种多样的数据浏览功能,希望大家将自己的配置文件与配置心得以回帖形式贴出来与同仁分享。

点击此处下载配置样例
 



发表时间: 2012-05-27 23:03:15
最后修改时间: 2012-05-27 23:10:34


文章数: 301
积分: 3010
注册时间: 2005/9/5
[回复留言] [回复(需要先登录)] [引用(需要先登录)]普通文章第 2 楼
文章id: 757
关于数据浏览功能的缓存机制



如主帖所述,数据浏览功能实际上也是一种检索功能。那么,假如在OPAC环境中构造出了针对数据库进行一种较宽泛的检索浏览命令,比如在全部书目库中,以前方一致查找分类号为"I"的数据,就有可能命中几十万条数据(比如在一个以文学作品为主要收藏对象的大图书馆中)。

任何系统,处理这类检索请求都会产生较长的响应时间和较大的数据通讯负担,甚至因为OPAC系统面向更多的访问者,如果多人并发进行这样的检索,系统负担就会极剧增加,这也是很多系统不得不限定检索结果甚至不允许宽泛的检索请求的原因。

为了更贴近用户需求,我们的数据浏览功能中,引入了“缓存机制”,从而实现“鱼肉与熊掌得兼”的效果。

所谓“缓存机制”,是指系统第一次得到检索请求后,它也会老老实实去响应检索请求,无捷径可寻。但是,系统会将此次的检索结果在响应访问者的同时,缓存到服务器中。这样,当下一个访问者提交同样的检索请求时,系统将会优先用服务器中的缓存响应访问者,从而实现响应效率的极大的提高、也无须增加数据库的查询负担。

这种缓存信息,仅是命中结果的记录ID,并不是全部的数据内容,所以无须产生系统服务器硬盘空间不足之虑。

虽然这种缓存机制,是通过牺牲数据更新实时性来换取响应效率性。但基于常见的数据更新频率(比如普通图书馆,一天新增的目录数据可能仅百来种),所以这种牺牲还是值得的。

除了在OPAC环境中,由第一个访问者点击浏览链接锚点来触发缓存的产生外,系统还允许在配置文件中,由用户根据本馆实情,定义这种缓存自动刷新的频次,参见主帖中介绍的build="autoUpdate=perhour"属性值。系统管理员可以定义为每小时或每天自动刷新缓存。理论上可以定义到每分钟进行刷新以接近数据实时更新效果,但这样做,实际意义与效果就不好了。

即便设置了自动刷新频次,如果遇到突发的需要缓存及时更新的情况,比如系统一次性添加了很多数据后。系统管理员也可以在OPAC环境中,以“馆员”身份登录后,进入各“浏览”环境,执行相关的“刷新”、“增补”缓存的操作——此操作,需要预先为相关馆员帐户添加管理缓存等权限。



发表时间: 2012-05-28 10:23:04


头衔: 总工
文章数: 539
积分: 5390
注册时间: 2005/9/5
[回复留言] [回复(需要先登录)] [引用(需要先登录)]普通文章第 3 楼
文章id: 758

作者: xietao


上面江经理的介绍很好,通俗易懂,把dp2OPAC的浏览功能做了概括。

以下我补充几点:

1) “浏览”相关功能实际上并不仅仅是为了浏览这一个用途,而是为一组功能服务的基础设施。

浏览功能的特点是利用缓存技术,能够实现几十万条数据量级以上的分类浏览密集访问,而不对服务器造成太大的压力。自然,浏览功能还是利用检索点来进行检索,创建结果集,这一点和检索功能是一致的,但创建结果集以后就会长久保存在文件中。

其实单单检索本身对服务器的压力还不是最严重的问题,因为服务器在应对并发访问方面是很普通的,平时的检索就是一个例证。问题主要是几十万条数据的检索操作命中需要耗费一定时间,每次读者来浏览的时候都要等待这个时间,那么这个功能就是不成功的。所以关键在于体验上。

一旦浏览功能通过缓存技术成功解决了响应时间问题后,虽然这个功能首先是为了满足分类浏览需求而设计的,但是我们会发现,新书通报、读者荐购等功能,都是建筑在浏览大批记录的基础上的,所以浏览功能也等于同时满足了这些功能要求。

但这些不同的功能之间毕竟有不小的差异,所以我们用一套配置文件体系来解决差异化的问题。

其中首次进入browse.aspx时访问的browse_sidebar.xml文件,配置了页面的二级菜单,这个菜单正好就作为其他功能的入口,起到了把若干功能组织在界面上的作用。因此,二级菜单上的事项的个数是灵活的,不是程序设计时候写死的。这样就增强了dp2OPAC的生命力,随着时间的推移,系统管理员能对它进行重组和扩展,满足不断变化的应用需求。

像江经理举例的根据馆藏地点浏览的功能,就是江经理根据客户的需求扩充出来的,并不是当初程序设计时预先设想到的功能。

2) 浏览功能也同时提供了RSS源的功能。

如果在配置文件中指定了RSS特性,则在普通结果集文件创建的时候,系统还会自动创建RSS文件。这样,当外部访问dp2OPAC的各种RSS源的时候,就能够立即从文件中提取内容发送响应,不必动用检索功能了。

3) 浏览功能提供的树形目录的组织能力。

树形目录是一种高级的形式。如果用户单位觉得用不着这么复杂的组织形态,可以只配置第一级内容,这样树形目录就退化为普通的线性列表。所以它的适应性是很强的。

4) 创立了一种独特的检索语言。

考虑到配置文件的简洁性,浏览配置体系创立了一种检索语言,简单情况下列举各种检索参数,复杂情况下可以组织逻辑检索式。

5) 浏览界面复用了dp2OPAC原有的各种浏览格式和浏览界面。

这样可以有效降低界面的复杂度,有利于界面表达方式的统一。


发表时间: 2012-05-28 21:58:55



页 1 / 1
 

在线用户
访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客   访客访客
当前栏目在线用户数 26, 总在线用户数 35