“dp2circulation_marc_verify.fltx”脚本主要功能是在加工数据时,根据脚本规则校验MARC数据的准确性与规范性,下面这个脚本是我在谢老师“dp2circulation_marc_verify.fltx”CNMARC格式图书格式校验脚本的基础上改写的一个校验脚本。已经在我馆运行了一段时间,不过由于我自己能力所限对于MARC数据了解不多,所以,这个脚本中难免会有一些不妥的地方。。所以,想请各位有能力的老师帮我看看。。看看里面哪些地方写的还不够严谨。这样可以更好的完善这个脚本。。。。目前,这个脚本主要功能有:
1、判断所有子字段的名称是否符合要求。
2、判断所有子字段书写的时候在开头或者结尾是否带有空格。
3、判断所有字段的指示符是否符合要求。
4、判断是否有未命名的空子字段。(例如“▼a▼”或者“▼▼a”)
注:以上判断规则参考自“北京图书馆出版社”2006年2月出版的“MARC21规范数据格式使用手册”。
<?xml version="1.0" encoding="utf-8"?>
<filter>
<using><![CDATA[
//2011-8-5 修改
// CNMARC格式图书格式校验
// (C)Copyright 2011 数字平台(北京)软件有限责任公司
// 编写人:谢涛
using System;
using System.IO;
using System.Text;
using System.Web;
using System.Windows.Forms;
using System.Diagnostics;
using DigitalPlatform.MarcDom;
using DigitalPlatform.Script;
using DigitalPlatform.Text;
using dp2Circulation;
]]></using>
<ref>system.dll</ref>
<ref>system.web.dll</ref>
<ref>system.windows.forms.dll</ref>
<def><![CDATA[
// Stopwatch sw = Stopwatch.StartNew();
public string strResult = "";
public int occur_100=0;
public int occur_101=0;
public int joint_105_1=0; // 如果105字符1为y,==1
public int occur_200=0;
public int occur_700=0;
public int occur_710=0;
public int occur_720=0;
public int occur_801=0;
public string occur_690_a = "";
//判断一个字符串是否是纯数字
public static bool IsNum(string str)
{
if (String.IsNullOrEmpty(str) == true)
return false;
for (int i = 0; i < str.Length; i++)
{
if (str[i] > '9' || str[i] < '0')
return false;
}
return true;
}
public static bool pan_i(string[] str, string temp)
{
for (int i=0; i<str.Length; ++i)
{
if (temp == str[i])
{
return false;
}
}
return true;
}
public static string p_ind(string str0, string str1, string ind)
{
string temp = "";
string[] str_t0 = str0.Split('/');
string[] str_t1 = str1.Split('/');
if (pan_i(str_t0, ind.Substring(0, 1)))
{
temp="指示符第1位,应为:" + str0.Replace(" ", "#") + "(#表示空格)";
}
if (pan_i(str_t1, ind.Substring(1, 1)))
{
temp="指示符第2位,应为:" + str1.Replace(" ", "#") + "(#表示空格)";
}
return temp;
}
public static string indicator(string loc, string ind)
{
string temp = "";
switch (loc)
{
case "010":
{
return p_ind(" "," ", ind);
break;
}
case "014":
{
return p_ind(" "," ", ind);
break;
}
case "016":
{
return p_ind(" /7"," ", ind);
break;
}
case "020":
{
return p_ind(" "," ", ind);
break;
}
case "022":
{
return p_ind(" "," ", ind);
break;
}
case "024":
{
return p_ind("7/8"," ", ind);
break;
}
case "035":
{
return p_ind(" "," ", ind);
break;
}
case "040":
{
return p_ind(" "," ", ind);
break;
}
case "042":
{
return p_ind(" "," ", ind);
break;
}
case "043":
{
return p_ind(" "," ", ind);
break;
}
case "045":
{
return p_ind(" /0/1/2"," ", ind);
break;
}
case "050":
{
return p_ind(" ","0/4", ind);
break;
}
case "052":
{
return p_ind(" /0/7"," ", ind);
break;
}
case "053":
{
return p_ind(" ","0/4", ind);
break;
}
case "055":
{
return p_ind(" ","0/4", ind);
break;
}
case "060":
{
return p_ind(" ","0/4", ind);
break;
}
case "065":
{
return p_ind(" "," ", ind);
break;
}
case "066":
{
return p_ind(" "," ", ind);
break;
}
case "070":
{
return p_ind(" "," ", ind);
break;
}
case "072":
{
return p_ind(" "," /0/7", ind);
break;
}
case "073":
{
return p_ind(" "," ", ind);
break;
}
case "082":
{
return p_ind("0/1"," /0/4", ind);
break;
}
case "083":
{
return p_ind("0/1"," /0/4", ind);
break;
}
case "086":
{
return p_ind(" /0/1"," ", ind);
break;
}
case "087":
{
return p_ind(" /0/1"," ", ind);
break;
}
case "100":
{
return p_ind("0/1/3"," ", ind);
break;
}
case "101":
{
return p_ind("0/1/2"," ", ind);
break;
}
case "102":
{
return p_ind(" "," ", ind);
break;
}
case "105":
{
return p_ind(" "," ", ind);
break;
}
case "106":
{
return p_ind(" "," ", ind);
break;
}
case "110":
{
return p_ind("0/1/2"," ", ind);
break;
}
case "111":
{
return p_ind("0/1/2"," ", ind);
break;
}
case "130":
{
return p_ind(" ","0/1/2/3/4/5/6/7/8/9", ind);
break;
}
case "148":
{
return p_ind(" "," ", ind);
break;
}
case "150":
{
return p_ind(" "," ", ind);
break;
}
case "151":
{
return p_ind(" "," ", ind);
break;
}
case "155":
{
return p_ind(" "," ", ind);
break;
}
case "180":
{
return p_ind(" "," ", ind);
break;
}
case "181":
{
return p_ind(" "," ", ind);
break;
}
case "182":
{
return p_ind(" "," ", ind);
break;
}
case "185":
{
return p_ind(" "," ", ind);
break;
}
case "200":
{
return p_ind("1/0"," ", ind);
break;
}
case "205":
{
return p_ind(" "," ", ind);
break;
}
case "210":
{
return p_ind(" "," ", ind);
break;
}
case "215":
{
return p_ind(" "," ", ind);
break;
}
case "225":
{
return p_ind("0/1/2"," ", ind);
break;
}
case "260":
{
return p_ind(" "," ", ind);
break;
}
case "300":
{
return p_ind(" "," ", ind);
break;
}
case "360":
{
return p_ind(" "," ", ind);
break;
}
case "400":
{
return p_ind("0/1/3"," ", ind);
break;
}
default:
{
break;
}
}
return temp;
}
public static bool p_ziziduan(string temp)
{
if (temp==""){return true;}
if (temp[0]>='0'&&temp[0]<='9'){return false;}
if (temp[0]>='A'&&temp[0]<='Z'){return false;}
if (temp[0]>='a'&&temp[0]<='z'){return false;}
return true;
}
public static bool p_ziduan(string temp)
{
string[] ziduan = { "-01", "001" };
for (int i = 0; i < ziduan.Length; i++)
{
if (temp.IndexOf(ziduan[i]) >= 0)
{
return false;
}
}
return true;
}
]]></def>
<record>
<def><![CDATA[
]]></def>
<begin><![CDATA[
//MessageBox.Show("record data:" + this.Data);
]]></begin>
<field name="***"><![CDATA[
if (p_ziduan(this.LocationString.ToString()))
{
string[] temp=this.Content.Split(Convert.ToChar(31));
for (int i=1;i<temp.Length;i++)
{
if(p_ziziduan(temp[i].ToString()))
{
Root.strResult += "(" + this.LocationString + ") " + "存在没有子字段名的空“▼”...\r\n";
}
}
}
]]>
<subfield name="*"><![CDATA[
//MessageBox.Show("temp");
if(String.IsNullOrEmpty(this.Content.Trim()) == true)
{
Root.strResult += "(" + this.LocationString + ") " + "子字段没有内容...\r\n";
}
else if(this.Content.Substring(0,1) == " ")
{
Root.strResult += "(" + this.LocationString + ") " + "子字段首部不能带有空格...\r\n";
}
else if(this.Content.Substring(this.Content.Length - 1,1) == " ")
{
Root.strResult += "(" + this.LocationString + ") " + "子字段尾部不能带有空格...\r\n";
}
]]></subfield>
</field>
<!-- 001 记录控制号
<field name="001">
<![CDATA[
if(this.Content.Length != 10 && this.Content.Length != 12)
Root.strResult += "(" + this.LocationString + ") " + "字段内容长度不对, 应为10或12字符...\r\n";
if(this.DupCount > 1)
Root.strResult += "(" + this.LocationString + ") " + "重复出现...\r\n";
]]>
</field>
-->
<!-- 010 ISBN号 -->
<field name="010">
<def><![CDATA[
int count_a = 0;
int count_d = 0;
]]></def>
<!-- 国际标准书号(ISBN) -->
<subfield name="a"><![CDATA[
string strError = "";
int nRet = IsbnSplitter.VerifyISBN(this.Content, out strError);
if (nRet != 0)
Root.strResult += "(" + this.LocationString + ") " + strError + "\r\n";
]]></subfield>
<subfield name="d"><![CDATA[
Parent.count_d ++;
]]></subfield>
<subfield name="*"><![CDATA[
if(StringUtil.IsInList(this.Name,"a,b,d,z",false) == false)
Root.strResult += "(" + this.LocationString + ") " + "子字段超出定义范围, 应为abdz之一...\r\n";
]]></subfield>
<end><![CDATA[
string temp = indicator(this.LocationString, this.Indicator);
if(temp != "")
Root.strResult += "(" + this.LocationString + ") " + temp;
if(count_d == 0)
{
Root.strResult += "(" + this.LocationString + ") " + "$d为必填字段...\r\n";
}
]]></end>
</field>
<!-- 011 ISSN号 国际标准连续出版物 -->
<field name="011">
<!-- 国际标准书号(ISSN) -->
<subfield name="a">
</subfield>
<subfield name="b">
</subfield>
<subfield name="d">
</subfield>
<subfield name="Y">
</subfield>
<subfield name="Z">
</subfield>
<subfield name="*"><![CDATA[
if(StringUtil.IsInList(this.Name,"a,b,d,Y,Z",false) == false)
Root.strResult += "(" + this.LocationString + ") " + "子字段超出定义范围, 应为abdYZ之一...\r\n";
]]></subfield>
<end><![CDATA[
if(this.Indicator != " ")
Root.strResult += "(" + this.LocationString + ") " + "字段的指示符应为__...\r\n";
]]></end>
</field>
<!-- 091 统一书刊号 -->
<field name="091">
<subfield name="a">
</subfield>
<subfield name="b">
</subfield>
<subfield name="d">
</subfield>
<subfield name="z">
</subfield>
<subfield name="*"><![CDATA[
if(StringUtil.IsInList(this.Name,"a,b,d,z",false) == false)
Root.strResult += "(" + this.LocationString + ") " + "子字段超出定义范围, 应为abdz之一...\r\n";
]]></subfield>
<end><![CDATA[
if(this.Indicator != " ")
Root.strResult += "(" + this.LocationString + ") " + "字段的指示符应为__...\r\n";
if(this.DupCount > 1)
Root.strResult += "(" + this.LocationString + ") " + "重复出现...\r\n";
]]></end>
</field>
<!--this.Parent.DupCount,this.PrevName -->
<!-- 100 一般处理数据 -->
<field name="100">
<subfield name="a"><![CDATA[
if(this.Content.Length != 36)
Root.strResult += "(" + this.LocationString + ") " + "子字段内容长度为" + this.Content.Length + "应为36字符...\r\n";
]]></subfield>
<end><![CDATA[
Root.occur_100 ++;
if(this.Indicator != " ")
Root.strResult += "(" + this.LocationString + ") " + "字段的指示符应为__...\r\n";
if(this.DupCount > 1)
Root.strResult += "(" + this.LocationString + ") " + "重复出现...\r\n";
]]></end>
</field>
<!-- 101 作品语种 必备 -->
<field name="101">
<subfield name="a">
</subfield>
<subfield name="b">
</subfield>
<subfield name="c">
</subfield>
<subfield name="d">
</subfield>
<subfield name="e">
</subfield>
<subfield name="f">
</subfield>
<subfield name="g">
</subfield>
<subfield name="*"><![CDATA[
if(StringUtil.IsInList(this.Name,"a,b,c,d,e,f,g",false) == false)
Root.strResult += "(" + this.LocationString + ") " + "子字段超出定义范围, 应为abcdefg之一...\r\n";
]]></subfield>
<end><![CDATA[
Root.occur_101 ++;
if(this.DupCount > 1)
Root.strResult += "(" + this.LocationString + ") " + "重复出现...\r\n";
]]></end>
</field>
<!-- 102 出版国别 -->
<field name="102">
<subfield name="a">
</subfield>
<subfield name="b"><![CDATA[
if(IsNum(this.Content) == false)
Root.strResult += "(" + this.LocationString + ") " + "应该全部为数字...\r\n";
if(this.Content.Length != 6)
Root.strResult += "(" + this.LocationString + ") " + "子字段内容长度为" + this.Content.Length + "应为6字符...\r\n";
]]></subfield>
<subfield name="*"><![CDATA[
if(StringUtil.IsInList(this.Name,"a,b",false) == false)
Root.strResult += "(" + this.LocationString + ") " + "子字段超出定义范围, 应为ab之一...\r\n";
]]></subfield>
<end><![CDATA[
if(this.Indicator != " ")
Root.strResult += "(" + this.LocationString + ") " + "字段的指示符应为__...\r\n";
if(this.DupCount > 1)
Root.strResult += "(" + this.LocationString + ") " + "重复出现...\r\n";
]]></end>
</field>
<!-- 105 编码数据字段: 图书 -->
<field name="105">
<subfield name="a"><![CDATA[
if(this.Content.Length != 13)
Root.strResult += "(" + this.LocationString + ") " + "子字段内容长度为" + this.Content.Length + "应为13字符...\r\n";
if(String.IsNullOrEmpty(this.Content) == false
&& this.Content.Substring(0,1) == "y")
Root.joint_105_1=1;
]]></subfield>
<end><![CDATA[
if(this.Indicator != " ")
Root.strResult += "(" + this.LocationString + ") " + "字段的指示符应为__...\r\n";
if(this.DupCount > 1)
Root.strResult += "(" + this.LocationString + ") " + "重复出现...\r\n";
]]></end>
</field>
<!-- 106 编码数据字段: 文字资料形态特征 -->
<field name="106">
<subfield name="a"><![CDATA[
if(this.Content.Length != 1)
Root.strResult += "(" + this.LocationString + ") " + "子字段内容长度为" + this.Content.Length + "应为1字符...\r\n";
]]></subfield>
<end><![CDATA[
if(this.Indicator != " ")
Root.strResult += "(" + this.LocationString + ") " + "字段的指示符应为__...\r\n";
if(this.DupCount > 1)
Root.strResult += "(" + this.LocationString + ") " + "重复出现...\r\n";
]]></end>
</field>
<!-- 110 编码数据字段: 连续出版物 -->
<field name="110">
<subfield name="a"><![CDATA[
if(this.Content.Length != 11)
Root.strResult += "(" + this.LocationString + ") " + "子字段内容长度为" + this.Content.Length + "应为11字符...\r\n";
]]></subfield>
<end><![CDATA[
if(this.Indicator != " ")
Root.strResult += "(" + this.LocationString + ") " + "字段的指示符应为__...\r\n";
if(this.DupCount > 1)
Root.strResult += "(" + this.LocationString + ") " + "重复出现...\r\n";
]]></end>
</field>
<!-- 200 题名与责任者 必备 -->
<field name="200">
<def><![CDATA[
int count_a = 0;
int count_9 = 0;
int count_A = 0;
int count_f = 0;
bool txt_A = false;
]]></def>
<subfield name="a">
if(String.IsNullOrEmpty(this.Content) == false)
Parent.count_a ++;
</subfield>
<subfield name="9">
// 题名拼音
Parent.count_9 ++;
</subfield>
<subfield name="A">
// 题名拼音
Parent.count_A ++;
Parent.txt_A=String.IsNullOrEmpty(this.Content);
</subfield>
<subfield name="b">
// 一般标志资料
</subfield>
<subfield name="c">
// 另一著者的正题名
</subfield>
<subfield name="d">
// 并列正题名
</subfield>
<subfield name="e">
// 副题名
</subfield>
<subfield name="f">
// 主要责任者说明
Parent.count_f ++;
</subfield>
<subfield name="g">
// 其它责任者说明
</subfield>
<subfield name="h">
// 分册号
</subfield>
<subfield name="i">
// 分册书名
</subfield>
<subfield name="*"><![CDATA[
if(StringUtil.IsInList(this.Name,"a,9,b,c,d,e,f,g,h,i,z,v,5,A",true) == false)
Root.strResult += "(" + this.LocationString + ") " + "子字段超出定义范围, 应为a9bcdefghizv5A之一...\r\n";
]]></subfield>
<end><![CDATA[
Root.occur_200 ++;
if(this.DupCount > 1)
Root.strResult += "(" + this.LocationString + ") " + "重复出现...\r\n";
if (count_a > 0 && count_9 == 0 && count_A == 0)
{
Root.strResult += "(" + this.LocationString + ") " + "缺乏$9或$A拼音子字段\r\n";
return;
}
if (count_9 > 0 && count_A > 0)
{
Root.strResult += "(" + this.LocationString + ") " + "$9和$A拼音子字段存在其中一个即可\r\n";
return;
}
if(count_A > 0 && txt_A)
{
Root.strResult += "(" + this.LocationString + ") " + "拼音子字段是$A\r\n";
return;
}
if(count_9 > 0)
Root.strResult += "(" + this.LocationString + ") " + "拼音子字段是$9\r\n";
if(count_f == 0)
Root.strResult += "(" + this.LocationString + ") " + "$f为必填字段\r\n";
]]></end>
</field>
<!-- 205 版本项 -->
<field name="205">
<subfield name="a"><![CDATA[
if(this.DupCount > 1)
Root.strResult += "(" + this.LocationString + ") " + "重复出现...\r\n";
]]></subfield>
<subfield name="b">
</subfield>
<subfield name="d">
</subfield>
<subfield name="f">
</subfield>
<subfield name="g">
</subfield>
<subfield name="*"><![CDATA[
if(StringUtil.IsInList(this.Name,"a,b,d,f,g",false) == false)
Root.strResult += "(" + this.LocationString + ") " + "子字段超出定义范围, 应为abdfg之一...\r\n";
]]></subfield>
<end><![CDATA[
if(this.Indicator != " ")
Root.strResult += "(" + this.LocationString + ") " + "字段的指示符应为__...\r\n";
if(this.DupCount > 1)
Root.strResult += "(" + this.LocationString + ") " + "重复出现...\r\n";
]]></end>
</field>
<!-- 207 特殊细节项: 连续出版物卷期编号 -->
<field name="207">
<subfield name="a">
</subfield>
<subfield name="z"><![CDATA[
if(this.DupCount > 1)
Root.strResult += "(" + this.LocationString + ") " + "重复出现...\r\n";
]]></subfield>
<subfield name="*"><![CDATA[
if(StringUtil.IsInList(this.Name,"a,z",false) == false)
Root.strResult += "(" + this.LocationString + ") " + "子字段超出定义范围, 应为az之一...\r\n";
]]></subfield>
<end><![CDATA[
if(this.DupCount > 1)
Root.strResult += "(" + this.LocationString + ") " + "重复出现...\r\n";
]]></end>
</field>
<!-- 210 出版发行项 -->
<field name="210">
<def><![CDATA[
int count_a = 0;
int count_c = 0;
int count_d = 0;
]]></def>
<subfield name="a">
Parent.count_a ++;
</subfield>
<subfield name="b">
</subfield>
<subfield name="c">
Parent.count_c ++;
</subfield>
<subfield name="d">
Parent.count_d ++;
</subfield>
<subfield name="e">
</subfield>
<subfield name="f">
</subfield>
<subfield name="g">
</subfield>
<subfield name="h">
</subfield>
<subfield name="*"><![CDATA[
if(StringUtil.IsInList(this.Name,"a,b,c,d,e,f,g,h",false) == false)
Root.strResult += "(" + this.LocationString + ") " + "子字段超出定义范围, 应为abcdefgh之一...\r\n";
]]></subfield>
<end><![CDATA[
if(this.Indicator != " ")
Root.strResult += "(" + this.LocationString + ") " + "字段的指示符应为__...\r\n";
if(this.DupCount > 1)
Root.strResult += "(" + this.LocationString + ") " + "重复出现...\r\n";
if(count_a == 0)
Root.strResult += "(" + this.LocationString + ") " + "$a为必填字段\r\n";
if(count_c == 0)
Root.strResult += "(" + this.LocationString + ") " + "$c为必填字段\r\n";
if(count_d == 0)
Root.strResult += "(" + this.LocationString + ") " + "$d为必填字段\r\n";
]]></end>
</field>
<!-- 215 载体形态项 -->
<field name="215">
<def><![CDATA[
int count_a = 0;
int count_d = 0;
]]></def>
<subfield name="a">
Parent.count_a ++;
</subfield>
<subfield name="c"><![CDATA[
if(Root.joint_105_1 == 1)
Root.strResult += "(" + this.LocationString + ") " + "105字段字符1为y, 与215字段$c存在不吻合...\r\n";
]]></subfield>
<subfield name="d"><![CDATA[
if(this.Content.IndexOf("厘米") != -1
|| this.Content.IndexOf("开") != -1)
{
Root.strResult += "(" + this.LocationString + ") " + "中不能用 '厘米'或'开', 应该用 cm...\r\n";
}
else
{
Parent.count_d ++;
}
]]></subfield>
<subfield name="e">
</subfield>
<subfield name="*"><![CDATA[
if(StringUtil.IsInList(this.Name,"a,c,d,e",false) == false)
Root.strResult += "(" + this.LocationString + ") " + "子字段超出定义范围, 应为acde之一...\r\n";
]]></subfield>
<end><![CDATA[
if(this.Indicator != " ")
Root.strResult += "(" + this.LocationString + ") " + "字段的指示符应为__...\r\n";
if(count_a == 0)
Root.strResult += "(" + this.LocationString + ") " + "$a为必填字段\r\n";
if(count_d == 0)
Root.strResult += "(" + this.LocationString + ") " + "$d为必填字段\r\n";
]]></end>
</field>
<!-- 225 丛编项 -->
<field name="225">
<subfield name="a">
</subfield>
<subfield name="d">
</subfield>
<subfield name="e">
</subfield>
<subfield name="f">
</subfield>
<subfield name="h">
</subfield>
<subfield name="i">
</subfield>
<subfield name="v">
</subfield>
<subfield name="z">
</subfield>
<subfield name="*"><![CDATA[
if(StringUtil.IsInList(this.Name,"a,d,e,f,h,i,v,z,9,A",false) == false)
Root.strResult += "(" + this.LocationString + ") " + "子字段超出定义范围, 应为adefhivz9A之一...\r\n";
]]></subfield>
<end><![CDATA[
// MessageBox.Show(this.LocationString + "指示符:" + this.Indicator);
// Root.strResult += "(" + this.LocationString + ") " + "重复出现...\r\n";
]]></end>
</field>
<!-- 300 一般性附注 -->
<field name="300">
<subfield name="a">
</subfield>
<subfield name="*"><![CDATA[
if(StringUtil.IsInList(this.Name,"a",false) == false)
Root.strResult += "(" + this.LocationString + ") " + "子字段超出定义范围, 应为$a...\r\n";
]]></subfield>
<end><![CDATA[
if(this.Indicator != " ")
Root.strResult += "(" + this.LocationString + ") " + "字段的指示符应为__...\r\n";
]]></end>
</field>
<!-- 326 连续出版物出版频率附注 -->
<field name="326">
<subfield name="a">
</subfield>
<subfield name="b">
</subfield>
<subfield name="*"><![CDATA[
if(StringUtil.IsInList(this.Name,"a,b",false) == false)
Root.strResult += "(" + this.LocationString + ") " + "子字段超出定义范围, 应为ab之一...\r\n";
]]></subfield>
<end><![CDATA[
if(this.Indicator != " ")
Root.strResult += "(" + this.LocationString + ") " + "字段的指示符应为__...\r\n";
]]></end>
</field>
<!-- 327 内容附注(子目) -->
<field name="327">
<subfield name="a">
</subfield>
<subfield name="*"><![CDATA[
if(StringUtil.IsInList(this.Name,"a",false) == false)
Root.strResult += "(" + this.LocationString + ") " + "子字段超出定义范围, 应为$a...\r\n";
]]></subfield>
<end><![CDATA[
if(this.DupCount > 1)
Root.strResult += "(" + this.LocationString + ") " + "重复出现...\r\n";
]]></end>
</field>
<!-- 330 提要文摘 -->
<field name="330">
<subfield name="a">
</subfield>
<subfield name="*"><![CDATA[
if(StringUtil.IsInList(this.Name,"a",false) == false)
Root.strResult += "(" + this.LocationString + ") " + "子字段超出定义范围, 应为$a...\r\n";
]]></subfield>
<end><![CDATA[
if(this.Indicator != " ")
Root.strResult += "(" + this.LocationString + ") " + "字段的指示符应为__...\r\n";
]]></end>
</field>
<!-- 410 丛编-->
<field name="410">
<subfield name="a">
</subfield>
<end>
</end>
</field>
<!-- 421 补编、增刊-->
<field name="421">
<subfield name="a">
</subfield>
<end>
</end>
</field>
<!-- 500 统一题名 -->
<field name="500">
<subfield name="a">
</subfield>
<subfield name="b">
</subfield>
<subfield name="h">
</subfield>
<subfield name="i">
</subfield>
<subfield name="k">
</subfield>
<subfield name="l">
</subfield>
<subfield name="m">
</subfield>
<subfield name="n">
</subfield>
<subfield name="q">
</subfield>
<subfield name="v">
</subfield>
<subfield name="x">
</subfield>
<subfield name="y">
</subfield>
<subfield name="z">
</subfield>
<subfield name="2">
</subfield>
<subfield name="3">
</subfield>
<subfield name="A">
</subfield>
<subfield name="9">
</subfield>
<subfield name="*"><![CDATA[
if(StringUtil.IsInList(this.Name,"a,b,h,i,j,k,l,m,n,q,r,s,u,v,w,x,y,z,2,3,9,A",false) == false)
Root.strResult += "(" + this.LocationString + ") " + "子字段超出定义范围, 应为abhijklmnqrsuvwxyz239A之一...\r\n";
]]></subfield>
<end>
</end>
</field>
<!-- 501 作品集统一题名 -->
<field name="501">
<subfield name="a">
</subfield>
<subfield name="b">
</subfield>
<subfield name="e">
</subfield>
<subfield name="j">
</subfield>
<subfield name="k">
</subfield>
<subfield name="m">
</subfield>
<subfield name="r">
</subfield>
<subfield name="s">
</subfield>
<subfield name="u">
</subfield>
<subfield name="w">
</subfield>
<subfield name="x">
</subfield>
<subfield name="y">
</subfield>
<subfield name="z">
</subfield>
<subfield name="2">
</subfield>
<subfield name="3">
</subfield>
<subfield name="9">
</subfield>
<subfield name="A">
</subfield>
<subfield name="*"><![CDATA[
if(StringUtil.IsInList(this.Name,"a,b,e,j,k,m,r,s,u,w,x,y,z,2,3,9,A",false) == false)
Root.strResult += "(" + this.LocationString + ") " + "子字段超出定义范围, 应为abejkmrsuwxyz239A之一...\r\n";
]]></subfield>
<end>
</end>
</field>
<!-- 503 统一惯用标目 -->
<field name="503">
<subfield name="a">
</subfield>
<subfield name="b">
</subfield>
<subfield name="j">
</subfield>
<subfield name="d">
</subfield>
<subfield name="e">
</subfield>
<subfield name="f">
</subfield>
<subfield name="i">
</subfield>
<subfield name="m">
</subfield>
<subfield name="n">
</subfield>
<subfield name="k">
</subfield>
<subfield name="l">
</subfield>
<subfield name="9">
</subfield>
<subfield name="A">
</subfield>
<subfield name="*"><![CDATA[
if(StringUtil.IsInList(this.Name,"a,b,j,d,e,f,i,m,n,k,l,9,A",false) == false)
Root.strResult += "(" + this.LocationString + ") " + "子字段超出定义范围, 应为abjdefimnkl9A之一...\r\n";
]]></subfield>
<end>
</end>
</field>
<!-- 510 并列题名 -->
<!-- 512 513 514 515 516 517 -->
<field name="51*">
<subfield name="a"><![CDATA[
if(Parent.Name == "517" && this.DupCount > 1)
Root.strResult += "(" + this.LocationString + ") " + "子字段重复...\r\n";
]]></subfield>
<subfield name="v"><![CDATA[
if(this.Content.Length != 1)
Root.strResult += "(" + this.LocationString + ") " + "子字段内容长度为" + this.Content.Length + "应为1字符...\r\n";
]]></subfield>
<subfield name="*"><![CDATA[
if(StringUtil.IsInList(this.Name,"a,e,h,i,j,n,z,9,A",false) == false)
Root.strResult += "(" + this.LocationString + ") " + "子字段超出定义范围, 应为aehijnz9A之一...\r\n";
]]></subfield>
<end>
</end>
</field>
<!-- 520 前题名 -->
<field name="520">
<subfield name="*"><![CDATA[
if(StringUtil.IsInList(this.Name,"a,e,h,i,n,j,x,9,A",false) == false)
Root.strResult += "(" + this.LocationString + ") " + "子字段超出定义范围, 应为aehinjx9A之一...\r\n";
]]></subfield>
<end>
</end>
</field>
<!-- 530 识别题名 -->
<field name="530">
<subfield name="*"><![CDATA[
if(StringUtil.IsInList(this.Name,"a,b,j,v,9,A",false) == false)
Root.strResult += "(" + this.LocationString + ") " + "子字段超出定义范围, 应为abjv9A之一...\r\n";
]]></subfield>
<end>
</end>
</field>
<!-- 531 缩略题名 -->
<field name="531">
<subfield name="*"><![CDATA[
if(StringUtil.IsInList(this.Name,"a,b,v",false) == false)
Root.strResult += "(" + this.LocationString + ") " + "子字段超出定义范围, 应为abv之一...\r\n";
]]></subfield>
<end><![CDATA[
if(this.Indicator != " ")
Root.strResult += "(" + this.LocationString + ") " + "字段的指示符应为__...\r\n";
]]></end>
</field>
<!-- 532 完整题名 -->
<field name="532">
<subfield name="*"><![CDATA[
if(StringUtil.IsInList(this.Name,"a,z",false) == false)
Root.strResult += "(" + this.LocationString + ") " + "子字段超出定义范围, 应为az之一...\r\n";
]]></subfield>
<end>
</end>
</field>
<!-- 540 编目员补充的附加题名 -->
<field name="540">
<subfield name="*"><![CDATA[
if(StringUtil.IsInList(this.Name,"a,9,A",false) == false)
Root.strResult += "(" + this.LocationString + ") " + "子字段超出定义范围, 应为a9A之一...\r\n";
]]></subfield>
<end>
</end>
</field>
<!-- 541 编目员补充的翻译题名 -->
<field name="541">
<subfield name="*"><![CDATA[
if(StringUtil.IsInList(this.Name,"a,e,h,i,z,9,A",false) == false)
Root.strResult += "(" + this.LocationString + ") " + "子字段超出定义范围, 应为aehiz9A之一...\r\n";
]]></subfield>
<end>
</end>
</field>
<!-- 600 个人名称主题 -->
<field name="600">
<subfield name="*"><![CDATA[
if(StringUtil.IsInList(this.Name,"a,b,c,d,f,g,t,j,x,y,z,2",false) == false)
Root.strResult += "(" + this.LocationString + ") " + "子字段超出定义范围, 应为abcdfgtjxyz2之一...\r\n";
]]></subfield>
<end>
</end>
</field>
<!-- 601 团体名称主题 -->
<field name="601">
<subfield name="*"><![CDATA[
if(StringUtil.IsInList(this.Name,"a,b,c,d,e,f,g,h,t,j,x,y,z,2,3",false) == false)
Root.strResult += "(" + this.LocationString + ") " + "子字段超出定义范围, 应为abcdefghtjxyz23之一...\r\n";
]]></subfield>
<end>
</end>
</field>
<!-- 602 家族名称主题 -->
<field name="602">
<subfield name="*"><![CDATA[
if(StringUtil.IsInList(this.Name,"a,f,t,j,x,y,z,2,3",false) == false)
Root.strResult += "(" + this.LocationString + ") " + "子字段超出定义范围, 应为aftjxyz23之一...\r\n";
]]></subfield>
<end><![CDATA[
if(this.Indicator != " ")
Root.strResult += "(" + this.LocationString + ") " + "字段的指示符应为__...\r\n";
]]></end>
</field>
<!-- 605 题名主题 -->
<field name="605">
<subfield name="*"><![CDATA[
if(StringUtil.IsInList(this.Name,"a,h,i,k,l,m,n,q,r,s,u,w,x,y,z,2,3",false) == false)
Root.strResult += "(" + this.LocationString + ") " + "子字段超出定义范围, 应为ahiklmnqrsuwxyz23之一...\r\n";
]]></subfield>
<end><![CDATA[
if(this.Indicator != " ")
Root.strResult += "(" + this.LocationString + ") " + "字段的指示符应为__...\r\n";
]]></end>
</field>
<!-- 606 普通主题 -->
<field name="606">
<subfield name="*"><![CDATA[
if(StringUtil.IsInList(this.Name,"a,j,x,y,z,2,3",false) == false)
Root.strResult += "(" + this.LocationString + ") " + "子字段超出定义范围, 应为ajxyz23之一...\r\n";
]]></subfield>
<end>
</end>
</field>
<!-- 607 地名主题 -->
<field name="607">
<subfield name="*"><![CDATA[
if(StringUtil.IsInList(this.Name,"a,j,x,y,z,2,3",false) == false)
Root.strResult += "(" + this.LocationString + ") " + "子字段超出定义范围, 应为ajxyz23之一...\r\n";
]]></subfield>
<end><![CDATA[
if(this.Indicator != " ")
Root.strResult += "(" + this.LocationString + ") " + "字段的指示符应为__...\r\n";
]]></end>
</field>
<!-- 610 非控制主题词 -->
<field name="610">
<subfield name="*"><![CDATA[
if(StringUtil.IsInList(this.Name,"a",false) == false)
Root.strResult += "(" + this.LocationString + ") " + "子字段超出定义范围, 应为$a...\r\n";
]]></subfield>
<end>
</end>
</field>
<!-- 620 出版地/生产地检索点 -->
<field name="620">
<subfield name="*"><![CDATA[
if(StringUtil.IsInList(this.Name,"a,b,c,d,3",false) == false)
Root.strResult += "(" + this.LocationString + ") " + "子字段超出定义范围, 应为abcd3之一...\r\n";
]]></subfield>
<end><![CDATA[
if(this.Indicator != " ")
Root.strResult += "(" + this.LocationString + ") " + "字段的指示符应为__...\r\n";
]]></end>
</field>
<!-- 690 中图法分类号 -->
<field name="690">
<def><![CDATA[
int count_a = 0;
int count_v = 0;
]]></def>
<subfield name="a"><![CDATA[
string str690_a_Head = "";
if(String.IsNullOrEmpty(this.Content) == false)
{
str690_a_Head = this.Content.Substring(0,1);
Root.occur_690_a = this.Content;
if(StringUtil.IsInList(str690_a_Head,"A,B,C,D,E,F,G,H,I,J,K,N,O,P,Q,R,S,T,U,V,X,Z",false) == false)
{
Root.strResult += "(" + this.LocationString + ") " + "中图法分类号应当以字母ABCDEFGHIJKNOPQRSTUVXZ开头...\r\n";
}
else
{Parent.count_a ++;}
}
]]></subfield>
<subfield name="v"><![CDATA[
if(this.Content.Length != 1)
{
Root.strResult += "(" + this.LocationString + ") " + "子字段内容长度为" + this.Content.Length + "应为1字符...\r\n";
}
else
{Parent.count_v ++;}
]]></subfield>
<subfield name="*"><![CDATA[
if(StringUtil.IsInList(this.Name,"a,v",false) == false)
Root.strResult += "(" + this.LocationString + ") " + "子字段超出定义范围, 应为av之一...\r\n";
]]></subfield>
<end><![CDATA[
if(this.Indicator != " ")
Root.strResult += "(" + this.LocationString + ") " + "字段的指示符应为__...\r\n";
if(count_a == 0)
Root.strResult += "(" + this.LocationString + ") " + "$a为必填字段\r\n";
if(count_v == 0)
Root.strResult += "(" + this.LocationString + ") " + "$v为必填字段\r\n";
]]></end>
</field>
<!-- 692 科图法分类号 -->
<field name="692">
<subfield name="a"><![CDATA[
string str692_a_Head = "";
if(String.IsNullOrEmpty(this.Content) == false)
{
str692_a_Head = this.Content.Substring(0,1);
if(StringUtil.IsInList(str692_a_Head,"0,1,2,3,4,5,6,7,8,9",false) == false)
Root.strResult += "(" + this.LocationString + ") " + "科图法分类号应当以字母0123456789开头...\r\n";
}
]]></subfield>
<subfield name="v"><![CDATA[
if(this.Content.Length != 1)
Root.strResult += "(" + this.LocationString + ") " + "子字段内容长度为" + this.Content.Length + "应为1字符...\r\n";
]]></subfield>
<subfield name="*"><![CDATA[
if(StringUtil.IsInList(this.Name,"a,v",false) == false)
Root.strResult += "(" + this.LocationString + ") " + "子字段超出定义范围, 应为av之一...\r\n";
]]></subfield>
<end><![CDATA[
if(this.Indicator != " ")
Root.strResult += "(" + this.LocationString + ") " + "字段的指示符应为__...\r\n";
]]></end>
</field>
<field name="7**">
<def><![CDATA[
int count_a = 0;
int count_9 = 0;
int count_A = 0;
bool txt_A = false;
]]></def>
<subfield name="a">
if(String.IsNullOrEmpty(this.Content) == false)
Parent.count_a ++;
</subfield>
<subfield name="9">
Parent.count_9 ++;
</subfield>
<subfield name="A">
Parent.count_A ++;
Parent.txt_A = String.IsNullOrEmpty(this.Content);
</subfield>
<end><![CDATA[
if(this.Name == "700")
Root.occur_700 ++;
if(this.Name == "700" && this.DupCount > 1)
Root.strResult += "(" + this.LocationString + ") " + "字段重复...\r\n";
if (count_a > 0 && count_9 == 0 && count_A == 0)
{
Root.strResult += "(" + this.LocationString + ") " + "缺乏$9或$A拼音子字段\r\n";
return;
}
if (count_9 > 0 && count_A > 0)
{
Root.strResult += "(" + this.LocationString + ") " + "$9和$A拼音子字段存在其中一个即可\r\n";
return;
}
if(count_A > 0 && txt_A)
{
Root.strResult += "(" + this.LocationString + ") " + "拼音子字段是$A\r\n";
return;
}
if(count_9 > 0)
Root.strResult += "(" + this.LocationString + ") " + "拼音子字段是$9\r\n";
]]></end>
</field>
<!--
700 人名-主要责任者
701 人名-等同责任者
702 人名-次要责任者
-->
<field name="70*">
<def><![CDATA[
int count_a = 0;
int count_4 = 0;
]]></def>
<subfield name="a"><![CDATA[
Parent.count_a ++;
]]></subfield>
<subfield name="4"><![CDATA[
Parent.count_4 ++;
]]></subfield>
<subfield name="*"><![CDATA[
if(StringUtil.IsInList(this.Name,"a,b,c,d,f,g,p,3,4,9",true) == false)
Root.strResult += "(" + this.LocationString + ") " + "子字段超出定义范围, 应为abcdfgp349之一...\r\n";
]]></subfield>
<end><![CDATA[
if(this.Name == "700")
Root.occur_700 ++;
if(this.Name == "700" && this.DupCount > 1)
Root.strResult += "(" + this.LocationString + ") " + "字段重复...\r\n";
if(count_a == 0)
Root.strResult += "(" + this.LocationString + ") " + "$a为必填字段\r\n";
if(count_4 == 0)
Root.strResult += "(" + this.LocationString + ") " + "$4为必填字段\r\n";
]]></end>
</field>
<!--
710 团体名称-主要责任者
711 团体名称-等同责任者
712 团体名称-次要责任者
-->
<field name="71*">
<subfield name="*"><![CDATA[
if(StringUtil.IsInList(this.Name,"a,b,c,d,f,g,h,p,3,4,9",true) == false)
Root.strResult += "(" + this.LocationString + ") " + "子字段超出定义范围, 应为abcdfghp349之一...\r\n";
]]></subfield>
<end><![CDATA[
if(this.Name == "710")
Root.occur_710 ++;
if(this.Name == "710" && this.DupCount > 1)
Root.strResult += "(" + this.LocationString + ") " + "字段重复...\r\n";
]]></end>
</field>
<!--
720 家族名称-主要责任者
721 家族名称-等同责任者
722 家族名称-次要责任者
-->
<field name="72*">
<subfield name="*"><![CDATA[
if(StringUtil.IsInList(this.Name,"a,f,3,4",true) == false)
Root.strResult += "(" + this.LocationString + ") " + "子字段超出定义范围, 应为af34之一...\r\n";
]]></subfield>
<end><![CDATA[
if(this.Name == "720")
Root.occur_720 ++;
if(this.Name == "720" && this.DupCount > 1)
Root.strResult += "(" + this.LocationString + ") " + "字段重复...\r\n";
if(this.Indicator != " ")
Root.strResult += "(" + this.LocationString + ") " + "字段的指示符应为__...\r\n";
]]></end>
</field>
<!-- 801 记录来源字段 -->
<field name="801">
<def><![CDATA[
int count_a = 0;
int count_b = 0;
int count_c = 0;
int count_A = 0;
bool txt_A = false;
]]></def>
<subfield name="a">
if(String.IsNullOrEmpty(this.Content) == false)
Parent.count_a ++;
</subfield>
<subfield name="b">
if(String.IsNullOrEmpty(this.Content) == false)
Parent.count_b ++;
</subfield>
<subfield name="c"><![CDATA[
if(IsNum(this.Content) == false)
{
Root.strResult += "(" + this.LocationString + ") " + "应该全部为数字...\r\n";
}else if(this.Content.Length != 8)
{
Root.strResult += "(" + this.LocationString + ") " + "子字段内容长度为" + this.Content.Length + "应为8字符...\r\n";
}else
{Parent.count_c ++;}
]]></subfield>
<subfield name="g">
</subfield>
<subfield name="m">
</subfield>
<subfield name="*"><![CDATA[
if(StringUtil.IsInList(this.Name,"a,b,c,g,2,u",false) == false)
Root.strResult += "(" + this.LocationString + ") " + "子字段超出定义范围, 应为abcg2u之一...\r\n";
]]></subfield>
<end><![CDATA[
Root.occur_801 ++;
if (count_a == 0)
{
Root.strResult += "(" + this.LocationString + ") " + "$a为必填字段\r\n";
return;
}
if (count_b == 0)
{
Root.strResult += "(" + this.LocationString + ") " + "$b为必填字段\r\n";
return;
}
if (count_c == 0)
{
Root.strResult += "(" + this.LocationString + ") " + "$c为必填字段\r\n";
return;
}
]]></end>
</field>
<!-- 905 馆藏信息 -->
<field name="905">
<def><![CDATA[
int count_a = 0;
int count_b = 0;
int count_d = 0;
int count_e = 0;
int count_f = 0;
]]></def>
<subfield name="a">
Parent.count_a ++;
</subfield>
<subfield name="b">
Parent.count_b ++;
</subfield>
<subfield name="c">
</subfield>
<subfield name="d"><![CDATA[
if (this.Content != Root.occur_690_a)
{
Root.strResult += "(" + this.LocationString + ") " + "与690$a字段不同,690$a为:"+Root.occur_690_a+"\r\n";
}
else
{Parent.count_d ++;}
]]></subfield>
<subfield name="e">
Parent.count_e ++;
</subfield>
<subfield name="f">
Parent.count_f ++;
</subfield>
<subfield name="*"><![CDATA[
if(StringUtil.IsInList(this.Name,"a,b,c,d,e,f,s,v,y,z",false) == false)
Root.strResult += "(" + this.LocationString + ") " + "子字段超出定义范围, 应为abcdefsvyz之一...\r\n";
]]></subfield>
<end><![CDATA[
if(this.Indicator != " ")
Root.strResult += "(" + this.LocationString + ") " + "字段的指示符应为__...\r\n";
if(count_a == 0)
Root.strResult += "(" + this.LocationString + ") " + "$a为必填字段\r\n";
if(count_b == 0)
Root.strResult += "(" + this.LocationString + ") " + "$b为必填字段\r\n";
if(count_d == 0)
Root.strResult += "(" + this.LocationString + ") " + "$d为必填字段\r\n";
if(count_e == 0)
Root.strResult += "(" + this.LocationString + ") " + "$e为必填字段\r\n";
if(count_f == 0)
Root.strResult += "(" + this.LocationString + ") " + "$f为必填字段\r\n";
]]></end>
</field>
<end><![CDATA[
]]></end>
</record>
<end><![CDATA[
if(Root.occur_100 == 0)
Root.strResult += "本记录缺100字段, 100字段为必备字段...\r\n";
if(Root.occur_101 == 0)
Root.strResult += "本记录缺101字段, 101字段为必备字段...\r\n";
if(Root.occur_200 == 0)
Root.strResult += "本记录缺200字段, 200字段为必备字段...\r\n";
if(Root.occur_700 + Root.occur_710 + Root.occur_720 > 1)
Root.strResult += "记录中700 710 720字段只能有其中一个...\r\n";
if(Root.occur_801 == 0)
Root.strResult += "本记录缺801字段, 801字段为必备字段...\r\n";
Host.ResultString += strResult;
// MessageBox.Show(Host.DetailForm, strResult);
//sw.Stop();
//MessageBox.Show("运行时间:" + sw.ElapsedMilliseconds);
]]></end>
</filter>