数据内容关于,国家图书馆OPACMARC页面数据编程思路写作策略

更新时间:2024-04-08 点赞:15709 浏览:62024 作者:用户投稿原创标记本站原创

:讨论图书馆O(简称:国图)PAC检索结果的页面 MARC数据的的程序思路,文代码使用C#语言,基于.net框架。
词:下载国图CNMARCC#­­编程
在日常的编目工作中,经常会使用国图的OPAC,国图的CNMARC数据权威,的图书种类很齐全,更的是任何人都免费使用它的检索服务。图书馆采编室时候为一批数量可观的图书提前准备MARC数据,以为后续的编目工作做好准备,在经费而购买收费MARC数据源的情况下,国图OPAC的检索服务数据的并重新组织成标准MARC数据也许是最佳的数据准备方式。在国图OPAC检索结果的CNMARC数据的重新组装一文中讨论了CNMARC的重新组装的思路,将讨论以国图检索结果中下载MARC数据的思路。这里考虑解决三个的技术理由。一是如何最简化操作方式,也说在实际操作中不必频繁地鼠标或键盘操作。就算是简单的复制粘贴操作,数百上千次将是非常繁琐的事情。二是怎样的逻辑的结果数据的访问,也说以用户的角度来看是怎样才能省略中间的页面结果中不的内容。三是对的结果数据如何处理存储。下面讨论。

一、最简化操作

这也许是最解决的技术理由。为了简化程序的设计,选择ISBN为的检索字,在下,构思并设计出ISBN列表文件的导入功能,图书ISBN的一次性导入,每次检索前点击某个按钮让程序读入并下ISBN,直到ISBN都处理完毕。ISBN列表文件是简单的txt文件,文件里每一ISBN占据一行。这样的方式可使效率提高,省去了每次都要的ISBN输入操作。,程序也单个ISBN输入的方式,这样就能保证输入的灵活性。

二、结果数据的访问

实际的浏览器操作,比如检索ISBN “9787111338017”,选择“中文文献”,选择ISBN字段,确定后浏览器导航到结果页面。观察结果页面的URL,两个串:“2R4Q2UBHG9HPDYS2NEL21626DS9AT67SBQ13JGSIFTA3YAMEIE-04983”和“request=9787111338017”。只需确定这两个串就确定整个URL,其他固定的。更地说,对于前面的加密串,的是要确定“-”字符前面的前缀。,只需保证的加密串的前缀正确就构造出整个结果页面的URL了。为了html页面的特定内容,定义GetPageContent和FindOneMatch两个静态策略教学论文。基于篇幅考虑,下面仅列出FindOneMatch的代码:
public static string FindOneMatch(string pageContent, string pat, string groupName){
string res = "";
Match m = Regex.Match(pageContent, pat, RegexOptions.IgnoreCase);
if (m.Success){
res = m.Groups[groupName].ToString();
}
return res;
}
GetPageContent策略教学论文的签名为:string GetPage Content(string url, Encoding e),该策略教学论文接受URL和Encoding,访问指定的URL,以指定的编码返回页面内容。FindOneMatch策略教学论文接受页面内容,方式和分组名参数,对内容执行一次正则查找,返回匹配的捕获内容。为了上述的加密串前缀,只需对 “opac.nlc.gov.cn/F/”的页面内容执行一次查找即可。其代码如下:
string pageContent = GetPageContent("opac.nlc.gov.cn/F", Encoding.UTF8);
string pat = "
]+)\" onsubmit";string token = FindOneMatch(pageContent, pat, "Token");
string resultURL="opac.nlc.gov.cn/F/" + token +
"?func=find-b&find_code=ISB&request=" +
isbn + fixedPart;
的fixedPart为上述讨论中结果页面URL其他的不变的。
结果页面访问的思路已经确定,接下来是MARC内容,这里指的标准MARC数据,以HTML格式有着的“字段名和指示符—字段内容”的数据。观察结果页面的HTML源代码,MARC格式其他格式的数据是用js函数shiftfmt(obj, name)响应点击事件运用AJAX技术局部更新 details2 节点,并且在该函数内数据内容的url的构造策略教学论文如下:
var url="opac.nlc.gov.cn:80/F/...?func=full-set-set_body&set_number="+g("set_number").value+"&set_entry="+g("set_entry").value+"&format="+name;
var host=location.href.replace(/(\/F\/.*)/I,'/');
url=url.replace(/http:\/\/.*?\//,host);
上面代码省略号是指前述讨论的加密串,而下面两句代码是用url的主机替换构造的url的主机。,只需确定set_number和set_entryformat的值就构造整个url了。而实际观察format的值固定为001,只找到set_number和set_entry就了。是MARC内容的代码:
string pageContent = GetPageContent(resultURL, Encoding.UTF8);
string pat = @"";
string set_number = FindOneMatch(pageContent, pat, "set_number'");
pat = @"";
string set_entry = FindOneMatch(pageContent, pat, "set_entry");

1

string format = "001";
string marcURL = "http://opac.nlc.gov.cn/F/" + token +
"?func=full-set-set_body&set_number=" + set_number + "&set_entry=" +
set_entry + "&format=" + format;
string marcHtmlContent=GetPageContent(marcURL, Encoding.UTF8);

三、对的MARC内容的处理

到的MARC内容是以形式有着的:

字段名和指示符
字段内容
里面还有可能有着HTML特殊字符,如“';”,其对应字符为“'”。,在提取实际内容前,还将HTML特殊字符转换成相应的字符,暂不处理“<;”和“>;”(对应字符为“”)“ ;”,在提取的正则方式串里还要区分HTML标记符号后面对“ ;” 区分处理。为了保存“字段名和指示符—字段内容”形式的数据,定义NameContent结构:
public struct NameContent{
public readonly string NCKey;//存储字段名和指示符
public readonly string NCValue;//存储字段内容
public NameContent (string ncKey, string ncValue){
NCKey = ncKey;
NCValue = ncValue;
}
}
下面是提取内容的策略教学论文:
public static List
FindFields(string pageContent, DictionaryhtmlSpecialChars){
string convertedPC = ConvertSpecialHtmlChs(pageContent,htmlSpecialChars);
List fields = new List();
string pat = @"\s*]*>(?'FieldName' [^]*)\s*]*>(?'FieldContent'[^]*)\s*";
MatchCollection ms = Regex.Matches(convertedPC, pat, RegexOptions.IgnoreCase);
for (int i = 0; i < ms.Count; i++){
string k = ms[i].Groups["FieldName"].ToString().Replace("","").Trim();
string v;
if (k.ToUpper() != "LDR")
v = ms[i].Groups["FieldContent"].ToString().Replace("", "").Trim();
else
v = ms[i].Groups["FieldContent"].ToString().Replace("", " ");
v = v.Replace(">",">");
v = v.Replace(">", ">");
v = v.Replace("<","<");
v = v.Replace("<", "<");
fields.Add(new NameContent (k, v));
}
return fields;
}
代码策略教学论文string ConvertSpecialHtmlChs(string pageContent, Dictionary htmlSpecialChars)接受页面内容和字典类型的参数htmlSpecialChars,对指定的页面内容的htmlSpecialChars字典对HTML特殊字符替换,返回替换后的页面内容。出于对性能的考虑,策略教学论文中要使用StringBuilder类型而string类型。这里考虑到篇幅有限,不列出该策略教学论文的代码。策略教学论文FindFields提取了页面中MARC字段名和相应的内容,返回List类型的,下面展示了提取并存储MARC内容的代码:
Dictionary htmlSpecialChars = new Dictionary();
/*下面省略号代码为向htmlSpecialChars加入html特殊字符对,比如以文件读入*/

List listNC=FindFields(marcHtmlContent, htmlSpecialChars);//提取MARC内容
string marcStr = GetMarcRecord(listNC);//生成MARC
上述代码中,策略教学论文GetMarcRecord(List listNameContent)List类型的生成标准的MARC字符串,策略教学论文将在前面提到的另一篇文章中讨论,将marcStr追加写入文件保存,这里赘述。
四、结语
讨论了下载国图OPAC页面的MARC数据的程序思路,但细节还在实际代码里完善,如异常处理、多线程的等。,出于篇幅的考虑也讨论ConvertSpecialHtmlChs等策略教学论文,但在思路清晰的情况下,这些策略教学论文的并不困难。
文献:
图书馆.新版机读目录格式使用手册[M].北京:北京图书馆出版社,2004.
(作者单位:广东建设职业技术学院)

2

相关文章
推荐阅读

 发表评论

共有3000条评论 快来参与吧~