QQL的生命周期指读者在使用QQL进行信息搜索时,按其指令进行词法分析、语法分析、语义分析以及调用远程微服务进行数据请求并返回相关数据结果的过程。
为了描述方便,本书采用简单的QQL语句进行生命周期分析,如下脚本,命名为文件1,其代码内容如下。
上述QQL语句包含以下3个部分。
①select查询语句:title、author、abstract、url叫作查询字段;cssci叫作查询语料。
②where条件语句:where keyword=['doc2vec'],其中doc2vec是查询关键词。
③which条件语句:schema=['schema://username:password@schema.quickcopus.cn/ris/schematoken'],corpus=['cssci'='http://username:password@corpus.quickcopus.cn/cssci/corpustoken'],license=['license'='http://licence.quickcoprus.cn/token'],关键词schema说明查询对象的模式定义。所有的查询字段应该属于查询对象所包含的字段。shcema字段数值指明应用协议为schema://,服务器地址为username:password@schema.quickcopus.cn,查询模式定义类为ris,schema访问的口令为schematoken。口令通常是一个常规UUID数值,关于查询模式的完整定义见附录B。关键词corpus说明语料数据源的服务器地址。Corpus语句是一组键值对组成的映射表,其中键值对中的关键词为cssci,值为:http://username:password@corpus.quickcopus.cn/cssci/tokenCssci。
上述QQL的生命周期如图3-2所示。
图3-2 QQL生命周期图
本书利用Antlr生成抽象语法树,如图3-3所示。
QQL的生命周期包含5个步骤,分别是词法解析、语法解析、建立B树、分页模块和操作系统接口。通过词法解析和语法解析,程序将会解析语句,构造一个抽象语法树。然后,程序将会根据验证规则描述表来验证授权认证信息、模式信息、缓存的语料。
上述QQL的完整验证流程如图3-4所示。
图3-4 QQL的完整验证流程图
图3-4具体包含以下步骤。
步骤一:权限验证。
步骤二:验证授权口令是否有效。如果无效,程序将会退出,并显示错误提示信息;如果有效,程序将继续执行。
步骤三:验证语料口令是否有效。如果无效,程序将会退出,并显示错误提示信息;如果有效,程序将继续执行。
步骤四:验证模式是否有效。
步骤五:验证模式文件是否是有效的对象简谱(JavaScript Object Notation,JSON)文件。
步骤六:模式JSON文件将会下载到缓存目录,命名为“class_token_json”,如“ris_204c837db67e462987595675a78c7eca.json”。(www.xing528.com)
步骤七:根据模式JSON文件生成数据传输对象(Data Transfer Object,DTO),DTO命名为“class_tokenSchema.class”,如“Ris_204c837db67e462987595675a78c7eca.class”。DTO生成器基于自动存储管理(Automatic Storage Management,ASM)库进行操作的。DTO类文件将会保存在cache目录中。
步骤八:将DTO类文件载入内存。
步骤九:验证缓存的语料文件。语料文件的后缀名为.qcf。
步骤十:验证本地口令。默认的口令验证程序使用语料口令,比如“tokenCssci”。如果验证失败,程序将会要求输入一个新的基于用户名和密码的新口令,查询语句中的语料口令将不被使用。
步骤十一:验证本地是否有一个名称为“schema_schemaToken_corpus_corpusToken.qcf”的文件,比如,名称为“Ris_204c837db67e462987595675a78c7eca_cssci_6b9146da656448b89 ae024d395f399fd.qcf”的文件。如果没有,则说明本地没有缓存的语料文件;如果有,该后缀为.qcf的文件就是缓存的语料文件。验证完整后,基于Antlr技术框架建立词法树,初始化本地缓存的语料,并读取语料数据。在读取语料时,QQL后台会自动管理语料库,如果本地没有语料库,程序操作会在后台静默执行语料控制语言(Corpus Control Language,CCL),执行的后台示例语句如下所示。
CREATE CORPUSES'Ris_204c837db67e462987595675a78c7eca_cssci_6b9146da656448 b89ae024d395f399fd';
CREATE CORPUS'Ris_204c837db67e462987595675a78c7eca_cssci_6b9146da656448b89 ae024d395f399fd_url'
CREATE CORPUS'Ris_204c837db67e462987595675a78c7eca_cssci_6b9146da656448b89 ae024d395f399fd_meta'
CREATE CORPUS'Ris_204c837db67e462987595675a78c7eca_cssci_6b9146da656448b89 ae024d395f399fd_fulltext'
程序执行完上面步骤的语句之后,在名为cache的目录下面将会创建一个名为“Ris_204c837db67e462987595675a78c7eca_cssci_6b9146da656448b89ae024d395f399fd.qcf”的文件,该文件为语料库文件。后缀.qcf表示为快文语料文件(Quicktext Corpus File)。
该语料库中有3个语料。①网址(URL)语料,用来存储语料服务器地址信息,文件名称为“Ris_204c837db67e462987595675a78c7eca_cssci_6b9146da656448b89ae024d395f399fd_url”。其中,中缀“_cssci_”代表来自图书馆的CSSCI期刊,尾缀“_url”代表语料库来源地址。中缀“_204c837db67e462987595675a78c7eca_”和中缀“_6b9146da656448b89ae024 d395f399fd_”为通用唯一识别码(Universally Unique Identifier,UUID)编码,用来区分不同的语料。②元数据(Metadata)语料,用来存储语料字段信息,字段定义来自语料模式定义文件,文件名称为“Ris_204c837db67e462987595675a78c7eca_cssci_6b9146da656448b89ae024 d395f399fd_meta”。其中,尾缀“_meta”代表语料库元信息。③全文(FULLTEXT)语料,用来存储语料的全文信息,文件名称为“Ris_204c837db67e462987595675a78c7eca_cssci_6b9146da 656448b89ae024d395f399fd_fulltext”。其中,尾缀“_fulltext”代表语料库全文信息。
全文语料不会对其中的信息数据直接进行检索,这是与SQL数据库的一个重要区别。所有语料的标识符都是使用UUID命名。语料中的数据结构是B+树和B*树。另外,为了达到更高的操作性能,语料不会锁定语料文件,这是QQL数据库的另外一个重要特性。创建完语料库后,如果对海量的数据进行语料维护,就需要使用语料维护作语言(Corpus Manipulation Language,CML),它将会在后台自动化执行。后台自动化执行的示例脚本如下所示。
以上脚本分别完成了网址语料、元数据语料和全文语料的自动化入库。对于使用图书馆中的海量科研数据,具体请求远程微服务的流程,主要分为以下类别。
①对于网址语料。向语料服务器发送一个请求,请求参数为“keyword”。例如:发送一个url,其内容为“http://cssci.doi.ai/json/?q=(content:doc2vec)”。服务器会返回一个数据集,该数据集中包含所有语料记录。本书将批量处理获取数据的最小值定义为100。将100个记录值定义为一个任务,多个任务组合在一起成为一个任务组。定义这种机制是为了实现多线程获取数据。网址语料可以用来记录数据获取的状态。状态中会记录初始化情况、数据获取情况、数据完成情况、出错数据状态。
②对于元数据语料。网址语料执行数据下载任务后,程序将会启动一个数据下载线程。当一个任务线程启动后,程序将会更新网址语料,获取状态中的初始化状态。另外,程序将会从远程服务器下载语料信息,下载的字段是根据模式定义文件中的字段确定的。数据的全文字段不会下载。元数据语料获取线程是下载任务中的一个异步状态线程。全文字段的处理是在全文语料步骤中进行的,不是在元数据语料中处理的。当元数据语料信息存储之后,程序将会更新网址语料状态信息中的状态字段。
③对于全文语料。全文语料将会继续执行下载全文语料的线程,并将下载的数据存储在全文语料文件中。全文语料的下载线程也是下载任务中的一个异步线程。
以上便是QQL的完整生命周期。测试时,对于QQL测试查询脚本:
select year,journalname,author,title,url from cssciwhere keywords=[人工智能]then action=[bib=1.ris,bib=2.csv]
该脚本代表CSSCI期刊中的查询人工智能,并输出RIS格式和CSV格式,其中RIS格式可以用于VOSViewer做进一步分析,或者导出CSV文件,然后利用自然语言处理程序(如StandfordNLP框架)进行分析。该程序脚本的可视化运行结果,如图3-5所示。
图3-5 QQL查询结果
关于QQL程序运行的完整功能参考附录B。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。