具体实施方式
以下结合附图,对本发明上述的和另外的技术特征和优点作更详细的说明。
图1为依照本发明一实施例所绘示的使用XML表示电子字典数据的方法的流程图。请参照图1,首先,在步骤S11,将各种原始数据通过相应的处理程序,以生成相应的XML文件。例如,原始数据A通过处理程序A以生成XML文件A,而原始数据B通过处理程序B以生成XML文件B。原始数据例如是英汉字典、汉英字典、英英字典、专业字典、生活美语、旅游会话等由各种出版商提供以应用在电子字典的文本数据。但是,不同出版商提供的原始数据的格式通常是不相同的,甚至于同一出版商提供的原始数据的格式也有可能是不相同的,因此必须依据原始数据的格式采用相应的处里程序以生成相应的XML文件。
由于XML本身所具有的灵活性和结构性,使得利用一些测试程序校验步骤S11所生成的XML文件变成是一件容易的事情,而且XML文件还可以使用一般的文本编辑器来查看和修改。接着,在步骤S12,将这些XML文件通过一个转换程序(XML2BIN程序),以生成相应的二进制数据,这个二进制数据可应用到电子字典硬件上。例如,XML文件A通过XML2BIN程序以生成二进制数据A,而XML文件B通过XML2BIN程序以生成二进制数据B。
图2为依照本发明一实施例所绘示的使用XML表示电子字典数据的方法中生成的二进制数据的片段应用到电子字典硬件上的实际显示画面。请参照图2,这是一部英汉字典,画面右半部显示这部英汉字典某一词条的可见内容(即印刷出来的内容),在本例中,其包括词条的标题“anywhere”、词性“adv”、第一个词意“1任何地方renhe defang.”、第二个词意“2[习语]get anywhere→GET.”等。某些词条由于可见内容较多,需要两个以上的显示页才能完整表示。
图3为依照本发明一实施例所绘示的使用XML表示电子字典数据的方法中生成的XML文件的树形结构图。请参照图3,所述的XML文件将电子字典数 据以XML格式表示,其定义了一个名为layout的根节点。由于这个根节点亦是一个XML的根元素(root element),故根节点亦可称为根元素、layout节点或layout元素,而所述的XML文件亦称为layout XML文件。
这个根节点其下包括一个格式信息(format_info)节点、至少一个纪录(record)节点及一些根节点属性,其中所述的根节点属性可用来提供这个根节点的基本信息,如拥有者、字典种类、字典版本等。在layout XML文件中,根节点属性是以元素的属性(attribute)方式表现,format_info节点和record节点是以元素(element)方式表现,故format_info节点亦可称为format_info元素,而record节点亦可称为record元素,其它可依此类推。
format_info节点定义了电子字典数据统一的排版信息,如缩进方式、对齐方式或对齐位置等。例如以图2所示词条画面为例,其format_info节点如下:
<format_info>
<format_type type="wd_title"first_ind="0"second_ind="0"/>
<format_type type="Definition"first_ind="0"second_ind="0"/>
<format_type type="Meanseg"first_ind="1"second_ind="1"/>
<format_type type="MeansegNo1"head_ind="1"first_ind="3"second_ind="3"/>
<format_type type="MeansegOneSub1"head_ind="1"first_ind="7"
second_ind="7"/>
<format_type type="subPhrase"first_ind="3"second_ind="3"/>
<format_type type="subMeanseg"head_ind="3"first_ind="7"second_ind="7"/>
<format_type type="subPhraseMean"first_ind="3"second_ind="3"/>
</format_info>
在本例中,format_info节点其下包括数个格式类型(format_type)节点,这些format_type节点分别用来定义不同的格式类型所对应的排版方式。如第一个format_type节点,其类型(type)属性内容为“wd_title”,表示这个节点用来定义词条的标题所对应的排版方式;其排版方式属性包括内容为“0”的first_ind属性和内容为“0”的second_ind属性,这些属性表示排版方式为顶行。如果layout XML文件中某个节点内容是词条且其type属性内容同样是“wd_title”,则代表所述的节点是词条的标题,其受到所述的第一个format_type节点定义的排版方式所规范而顶行。
每个record节点包含了一个词条的可见内容(即印刷出来的内容)、用于程 序处理的检索信息及其它标志信息。每个record节点其下包括一个标题(title)节点、至少一个显示页(page)节点和一些record节点属性,其中所述的record节点属性内容记载了record节点所对应的词条的唯一辨识码,它标识了词条在整个字典中的位置。例如以图2所示词条画面为例,其record节点如下:
<record rec_no="489"src_id="OEC2-004890">
<title page_no="1"rec_no="489">……</title>
<page type="definition"page_no="2">……</page>
</record>
在本例中,record节点的rec_no属性记载词条的唯一辨识码,而src_id属性记载词条在原始数据中的词条编号。通常情况下,这个layout XML文件同时还包括了一个链接映像(link map)文件,其亦是XML格式的文件,由src_id和dst_id对组成,记载了原始数据中的词条编号与layout XML文件中词条的辨识码的对应关系。例如以图2所示词条画面为例,其link map文件如下:
<map_table description="link map">
<map><src_id>OEC2-0000010</src_id><dst_id>[oec2]/1/1</dst_id></map>
<map><src_id>OEC2-0000010</src_id><dst_id>[oec2]/2/1</dst_id></map>
……
<map><src_id>OEC2-0048070</src_id><dst_id>[oec2]/4807/1</dst_id></map>
……
<map><src_id>OEC2-0090010</src_id><dst_id>[oec2]/9901/1</dst_id></map>
<map><src_id>OEC2-0090020</src_id><dst_id>[oec2]/9902/1</dst_id></map>
……
</map_table>
title节点其下包括一个检索输入方式(key)节点、至少一个检索结果显示(word)节点、一个显示段落(section)节点。key节点包含了检索用的方式及字符串。word节点则用于包含检索时结果的显示。section节点是最主要的组成部分,其是显示时的标题段落。section节点其下包括至少一个段落片段(segment)节点,每个segment节点内容则是section节点所对应的段落中某一片段内容,可以通过设定每个segment节点的属性来表示每个片段内容的风格,例如是否有下划线、是否有删除线、是否必须作为一个整体处理等,这样进一步就表示了整个段落内容的风格。例如以图2所示词条画面为例,其title节点如下:
<title page_no="1"rec no="489">
<key type="en"string="anywhere">0061 006E 0079 0077 0068 0065 0072
0065</key>
<word type="list">0061 006E 0079 0077 0068 0065 0072 0065</word>
<word type="view">0861 086E 0879 0877 0868 0865 0872 0865</word>
<section type="wd_title">
<segment type="word">0861 086E 0879 0877 0868 0865 0872
0865</segment>
<segment type="blank">0020</segment>
<segment type="pr">002F 2206 222C 225D 224A 228F 222C 222F 0028 2275
0029 003B 0020 0455 0453 2202 2241 228F 222C 222F 2275 002F</segment>
</section>
</title>
在本例中,key节点的属性规范检索时以英文方式进行(type="en"),而需键入的字符串为“anywhere”(string="anywhere")。title节点其下的section节点是显示时的标题段落,即图2所示画面中词条的标题及音标,即“anywhere/tTnarTQ(q);US-orTQ(q)/”。这个标题段落被分成三个片段来表示,故section节点其下包括三个segment节点,分别对应到的片段内容为标题“anywhere”、空白字符“”和音标“/tTnarTQ(q);US-orTQ(q)/”。在另一例中,词条“@”在检索时输入“at”可以查到该词条,但字典上词条的内容中并不包含此内容,其对应record节点会包含一个string属性内容为“at”的key节点。
page节点把词条除标题段落外的内容进行分解,它的显示页编号(page_no)属性确保即便是词条中间位置的内容也可被容易的定位。page节点其下包括至少一个显示段落(section)节点。section节点是最主要的组成部分,其是除标题段落外显示时的段落。section节点其下包括至少一个段落片段(segment)节点,每个segment节点内容则是section节点所对应的段落中某一片段内容,可以通过设定每个segment节点的属性来表示每个片段内容的风格,例如是否有下划线、是否有删除线、是否必须作为一个整体处理等,这样进一步就表示了整个段落内容的风格。例如以图2所示词条画面为例,其page节点如下:
<page type="definition"page_no="2">
<section type="Definition">
<segment type="ps">0461 0464 0476</segment>
</section>
<section type="MeansegNo1">
<head type="serial_number">0831</head>
<segment type="mean_normal">79FD 74D9 730D 73AE 0020</segment>
<segment type="py">2553 264B</segment>
<segment type="py">252C 251F</segment>
<segment type="py">0020</segment>
<segment type="py">25172531</segment>
<segment type="py">25282625</segment>
<segment type="py">002E</segment>
</section>
<section type="MeansegNo1">
<head type="serial_number">0832</head>
<segment type="abbr_normal">005B 7C71 7E28 005D</segment>
</section>
<section type="subPhrase">
<userinfo type="subphrase_word">get anywhere</userinfo>
<segment type="word">0867 0865 0874 0020 0861 086E 0879 0877 0868 0865
0872 0865</segment>
<section>
<section type="subPhraseMean">
<link dst_id="OEC2-0048070">10DD</link>
<segment type="link_word">0047 0045 0054</segment>
<segment type="mean_normal">002E</segment>
</section>
</page>
在本例中,type属性内容为“subPhraseMean”的section节点,其下包括了一个链接(link)节点。这种link节点用来表示参考词条的辨识码和内容,可以利用其ref属性内容方便地找到对应的词条,如字典上仅显示有“参见「abc」”,而在link节点则会同时标出“abc”的词条编号。
以上所述定义了使用XML表示电子字典数据所需的最基本的元素。如果电子字典数据中有图片需要显示,还可以在page节点其下增加图像(image)节点,并在image节点属性中定义图片的长宽、颜色、对齐方式,再将图片编码成16进制数据作为所述的image节点的内容。再者,在page节点其下还可以增加虚拟标题(vtitle)节点及/或副标题(subtitle)节点,用于含有虚拟标题及/或副标题的情况,其内容则可包含不同检索方式下的不同索引内容。另外,在layout节点其下还可以增加flag_info节点,用于包含显示时需用的标志信息。例如以图2所示词条画面为例,其flag_info节点如下:
<flag_info>
<flag_def bit="0"icon="[JU]">Idiom Word Flag</flag_def>
<flag_def bit="9">Example Flag</flag_def>
<flag_def bit="11">No mean page following</flag_def>
<flag_info>
图4为图2所示的电子字典实际显示画面相应的二进制数据的片段。请同时参照图2、图3及图4,XML2BIN程序把layout XML文件转到二进制数据时,先读入layout XML文件,首先遇到的是format_info节点,程序在内存中建立一个对照表,把各format_type节点的type、first_ind、second_ind等属性内容保存起来。接下来是flag_info节点,同样建立对照表保存bit属性对应的内容,以供之后处理使用。当读到record节点时,把key节点的内容分别写到用于查询的文件中,把word节点的内容写到用于list画面显示的文件中,在图4文件的0001F702H处,写入“02 00”表示有1个title节点和1个page节点,然后是标题段落的总长度“26 00”,接着在内存中建立的第一个对照表中查找名为“wd_title”的项,转换为标志段落缩进格式的“E1 FF 81 FF 00 00 FD FF 0B FF”,然后把section节点中各segment节点的内容写入到文件中,用“FF FF”表示标题段落的结束,这样标题段落title节点的内容就写完了。接下来,与此类似,写入page节点的内容。重复此过程从而完成全部文件的转换。
与图4的二进制数据格式的表示相比较,很显然以layout XML表示的文件更容易定位记录在整个文件中的位置和辨识记录各部分内容。更主要的是一旦需要更改二进制数据的表现形式时,例如需要把字节流从BigEndian转到LitteEndian(高低字节换位,例如00AA->AA00),或者需要把title的结束标志“FFFF”修改为“EE EE”,那么只需修改XML2BIN程序就可以了,不需要每本原始 数据字典的程序各自去修改,从而大大减少了工作量和出错的可能性。
综上所述,本发明的使用XML表示电子字典数据的方法,其通过产生更具结构性、标准性及可读性的XML文件作为中间过渡的数据文件,可以克服出版商提供的原始数据和应用到电子字典硬件上的二进制数据之间差别太大的问题,且由于统一的规范定义了不同的原始数据显示的方式,当修改了二进制数据后,只要修改负责从XML文件生成二进制数据的转换程序即可,大大降低测试难度及工作量。
以上所述仅为本发明的较佳实施例,对本发明而言仅仅是说明性的,而非限制性的。本专业技术人员理解,在本发明权利要求所限定的精神和范围内可对其进行许多改变,修改,甚至等效,但都将落入本发明的保护范围内。