DBLP解析设计报告分析.docx
- 文档编号:25533126
- 上传时间:2023-06-09
- 格式:DOCX
- 页数:22
- 大小:154.51KB
DBLP解析设计报告分析.docx
《DBLP解析设计报告分析.docx》由会员分享,可在线阅读,更多相关《DBLP解析设计报告分析.docx(22页珍藏版)》请在冰豆网上搜索。
DBLP解析设计报告分析
网络编程设计报告
题目:
DBLP数据解析并存入数据库
学院:
电子通信与物理学院
专业:
电子与通信工程
班级:
组长:
关学号:
151
组员:
刘学号:
1513310
组员:
赵学号:
1513310
时间:
2016年7月5日
1.设计需求分析
随着Internet的迅猛发展,网络应用的范围和领域也越来越广,各企业、部门、团体以及个人都在以不同的方式、不同的介质、不同的操作系统和平台加入到Internet中去。
网络间的信息交互和数据交换也急剧猛增,其数据量和数据结构的复杂度也都相应提高,使得作为传统的超文本标记语言的HTML由于其自身固定语法的局限性已经不能够满足信息交互和数据交换的需求。
因此从1996年开始,W3C(WorldWideWebConsortium)开始发展一种全新的可扩展标记语言XML(ExtensibleMarkupLanguage),并于1998年2月正式发布XML1.0版本。
由于XML所具有的优点和特性,现在它已经成为发展网络的一项关键技术,并成为网络信息交互和数据交换的一种标准和格式。
2.设计背景
1.1DBLP概述
DBLP(DataBasesystemsandLogicProgramming)是计算机领域内对研究的成果以作者为核心的一个计算机类英文文献的集成数据库系统,按年代列出了作者的科研成果。
包括国际期刊和会议等公开发表的论文。
DBLP没有提供对中文文献的收录和检索功能,国内类似的权威期刊及重要会议论文集成检索系统有C-DBLP。
这个项目是德国特里尔大学的MichaelLey负责开发和维护。
它提供计算机领域科学文献的搜索服务,但只储存这些文献的相关元数据,如标题,作者,发表日期等。
和一般流行的情况不同,DBLP并没有使用数据库而是使用XML存储元数据。
DBLP在学术界声誉很高,而且很多论文及实验都是基于DBLP的。
所收录的期刊和会议论文质量较高,也比较全面。
文献更新速度很快,能很好地反应了国外学术研究的前沿方向。
1.2XML概述
XML(ExtensibleMarkupLanguage)是可扩展标记语言,可扩展标记语言是一种元标记语言,即定义了用于定义其他特定领域有关语义的、结构化的标记语言,这些标记语言将文档分成许多部件并对这些部件加以标识。
XML文档定义方式有:
文档类型定义(DTD)和XMLSchema。
DTD定义了文档的整体结构以及文档的语法,应用广泛并有丰富工具支持。
XMLSchema用于定义管理信息等更强大、更丰富的特征。
XML能够更精确地声明内容,方便跨越多种平台的更有意义的搜索结果。
它提供了一种描述结构数据的格式,简化了网络中数据交换和表示,使得代码、数据和表示分离,并作为数据交换的标准格式,因此它常被称为智能数据文档。
XML文档格式的管理信息可以很容易地通过HTTP协议传输,由于HTTP是建立在TCP之上的,故管理数据能够可靠传输。
XML还支持访问XML文档的标准API,如DOM,SAX,XSLT,Xpath等。
XML能够以灵活有效的方式定义管理信息的结构。
以XML格式存储的数据不仅有良好的内在结构,而且由于它是W3C提出的国际标准,因而受到广大软件提供商的支持,易于进行数据交流和开发。
现有网络管理标准如TMN、SNMP等的管理信息库规范决定了网管数据符合层次结构和面向对象原则,这使得以XML格式存储网管数据也非常自然,易于实现。
只要定义一套描述各项管理数据和管理功能的XML语言,用Schema对这套语言进行规定,并且共享这些数据的系统的XML文档遵从这些Schema,那么管理数据和管理功能就可以在多个应用系统之间共享和交互。
XML能方便有效地表示结构化数据,这就使得XML可以作为描述和传输数据的手段。
使用XML进行数据交换已经成为计算机软件领域的标准技术模式。
通过XML实现数据的标准化、结构化,解决了在不同平台、不同系统之间的数据结构/模式的差异,使得数据层在XML技术的支持下统一起来。
3.用JAVA对XML解析
3.1JAVA和XML
Java作为一种与底层硬件和操作系统无关、“编写一次,到处运行”的特性风靡全球,成为适应于Internet的新一代网络编程语言,Java技术和XML有着许多共性和互补的特性:
(1)Java和XML固有地支持Unicode标准,这样Java与XML文档之间的交互就非常简单,而不需在二者之间再进行字符格式的转换,提高了Java对XML文档处理的时间。
(2)技术绑定了W3C的文档对象模型(DOM,DocumentObjectModel),从而为开发者处理和查询XML文档提供了一个高效的环境。
Java平台有可能成为处理XML文档的一个最普遍的应用环境。
(3)Java平台严格地支持面向对象的编程方式,使得开发者可以创建层次结构的Java对象。
XML同样也可以指定数据结构的层次描述。
因此,二者之间的结构可以进行相互描述,兼容性很强。
(4)用Java语言编写的处理XML文档的应用程序可以在多层客户机/服务器任意层中重新使用,给XML文档的重新利用提供了一个附加层。
Java与XML的共性和诸多互补性,使得在诸如电子商务和企业应用集成这样领域的新一代Web应用成为可能。
Java技术也成了使用XML语言工作的开发人员的首选技术,有很多解析器和通用工具都是在Java平台上开发的,因为Java语言不仅具有移植性和吸引人的面向对象的特性,而且具有很高的效率。
下面将利用Java技术针对XML文档进行分析和研究。
3.2用JAVA对XML文档的分析
作为一种文档格式,同其他的数据格式一样,XML文档和DTD创建之后,应用程序就必须对其进行处理:
读取XML文档并介人其数据结构和内容。
这个过程可用图l来表示:
XML文档经解析器处理之后,所有的元素、属性、实体和符号都作为对象提供给应用程序操作、参考或显示其内容。
这里我们利用Sax解析器,采用Java语言来实现对一XML文档的读取和处理。
图1XML文档的解析
3.2.1SAX解析器
本设计采用的是SAX解析器。
SAX(simpleAPIforXML)是一种XML解析的替代方法。
相比于DOM,SAX是一种速度更快,更有效的方法。
它逐行扫描文档,一边扫描一边解析。
而且相比于DOM,SAX可以在解析文档的任意时刻停止解析,但任何事物都有其相反的一面,对于SAX来说就是操作复杂。
SAX,它既是一个接口,也是一个软件包.但作为接口,SAX是事件驱动型XML解析的一个标准接口不会改变SAX的工作原理简单地说就是对文档进行顺序扫描,当扫描到文档(document)开始与结束、元素(element)开始与结束、文档(document)结束等地方时通知事件处理函数,由事件处理函数做相应动作,然后继续同样的扫描,直至文档结束。
大多数SAX都会产生以下类型的事件:
(1)在文档的开始和结束时触发文档处理事件。
(2)在文档内每一XML元素接受解析的前后触发元素事件。
(3)任何元数据通常由单独的事件处理
(4)在处理文档的DTD或Schema时产生DTD或Schema事件。
(5)产生错误事件用来通知主机应用程序解析错误。
举例来说对于一个XML文档的其解析的过程为:
Xml文档:
解析过程:
1.startdocument
2.startelement:
doc......
3.startelement:
para.....
4.characters:
Hello,World!
5.endelement:
para......
6.endelement;doc......
7.enddocument
图2SAX解析器处理程序流程
3.2.2MySQL数据库
本设计采用MySQL数据库对解析出来的数据进行存储。
MySQL是一个关系型数据库管理系统,由瑞典MySQLAB公司开发,目前属于Oracle旗下公司。
MySQL最流行的关系型数据库管理系统,在WEB应用方面MySQL是最好的RDBMS(RelationalDatabaseManagementSystem,关系数据库管理系统)应用软件之一。
MySQL所使用的SQL语言是用于访问数据库的最常用标准化语言。
MySQL软件采用了双授权政策,它分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择MySQL作为网站数据库。
与其他的大型数据库例如Oracle、DB2、SQLServer等相比,MySQL自有它的不足之处,但是这丝毫也没有减少它受欢迎的程度。
对于一般的个人使用者和中小型企业来说,MySQL提供的功能已经绰绰有余,而且由于MySQL是开放源码软件,因此可以大大降低总体拥有成本。
本设计的数据库建表时属性和类型如下:
首先创建数据库dblp,在数据库dblp中创建列表如下:
各表的结构如下:
4.设计结果
本设计解析了1.7G的xml文件,用时3701s,程序在运行过程中出现了一些事件,并没有出现错误。
解析过程中向数据库中存储了上百万条信息。
本设计将xml文件中的会议、引用、论文分别存储于MySQL数据库中的dblp数据库的相应表中。
结果如下图所示:
图3运行结果,用时及出现事件
图4表author存储结果
图5表citation存储结果
图6表conference存储结果
图7表paper存储结果
本设计实现了对XML文件的解析,并将解析出的数据存储到MySQL数据库中,存储的数据有上百万条。
附录设计源程序在随报告一起的文件中
附录部分源程序
******解析程序Parser.java******
importjava.io.*;
importjava.sql.Connection;
importjava.sql.PreparedStatement;
importjava.sql.SQLException;
importjavax.xml.parsers.*;
importorg.xml.sax.*;
importorg.xml.sax.helpers.*;
importdb.DBConnection;
publicclassParser{
privateConnectionconn;
privateintcurElement=-1;
privateintancestor=-1;
privatePaperpaper;
privateConferenceconf;
intline=0;
PreparedStatementstmt_inproc,stmt_conf,stmt_author,stmt_cite;
interrors=0;
StringBufferauthor;
privateclassConfigHandlerextendsDefaultHandler{
publicvoidstartElement(StringnamespaceURI,StringlocalName,
StringrawName,Attributesatts)throwsSAXException{
if(rawName.equals("inproceedings")){
ancestor=Element.INPROCEEDING;
curElement=Paper.INPROCEEDING;
paper=newPaper();
paper.key=atts.getValue("key");
}elseif(rawName.equals("proceedings")){
ancestor=Element.PROCEEDING;
curElement=Conference.PROCEEDING;
conf=newConference();
conf.key=atts.getValue("key");
}elseif(rawName.equals("author")&&ancestor==Element.INPROCEEDING){
author=newStringBuffer();
}
if(ancestor==Element.INPROCEEDING){
curElement=Paper.getElement(rawName);
}elseif(ancestor==Element.PROCEEDING){
curElement=Conference.getElement(rawName);
}elseif(ancestor==-1){
ancestor=Element.OTHER;
curElement=Element.OTHER;
}else{
curElement=Element.OTHER;
}
line++;
}
publicvoidcharacters(char[]ch,intstart,intlength)
throwsSAXException{
if(ancestor==Element.INPROCEEDING){
Stringstr=newString(ch,start,length).trim();
if(curElement==Paper.AUTHOR){
author.append(str);
}elseif(curElement==Paper.CITE){
paper.citations.add(str);
}elseif(curElement==Paper.CONFERENCE){
paper.conference=str;
}elseif(curElement==Paper.TITLE){
paper.title+=str;
}elseif(curElement==Paper.YEAR){
paper.year=Integer.parseInt(str);
}
}elseif(ancestor==Element.PROCEEDING){
Stringstr=newString(ch,start,length).trim();
if(curElement==Conference.CONFNAME){
conf.name=str;
}elseif(curElement==Conference.CONFDETAIL){
conf.detail=str;
}
}
}
publicvoidendElement(StringnamespaceURI,StringlocalName,
StringrawName)throwsSAXException{
if(rawName.equals("author")&&ancestor==Element.INPROCEEDING){
paper.authors.add(author.toString().trim());
}
if(Element.getElement(rawName)==Element.INPROCEEDING){
ancestor=-1;
try{
if(paper.title.equals("")||paper.conference.equals("")
||paper.year==0){
System.out.println("Errorinparsing"+paper);
errors++;
return;
}
stmt_inproc.setString(1,paper.title);
stmt_inproc.setInt(2,paper.year);
stmt_inproc.setString(3,paper.conference);
stmt_inproc.setString(4,paper.key);
stmt_inproc.addBatch();
for(Stringauthor:
paper.authors){
stmt_author.setString(1,author);
stmt_author.setString(2,paper.key);
stmt_author.addBatch();
}
for(Stringcited:
paper.citations){
if(!
cited.equals("...")){
stmt_cite.setString(1,paper.key);
stmt_cite.setString(2,cited);
stmt_cite.addBatch();
}
}
}catch(SQLExceptione){
e.printStackTrace();
System.out.println("line:
"+line);
System.exit(0);
}
}elseif(Element.getElement(rawName)==Element.PROCEEDING){
ancestor=-1;
try{
if(conf.name.equals(""))
conf.name=conf.detail;
if(conf.key.equals("")||conf.name.equals("")
||conf.detail.equals("")){
System.out.println("Line:
"+line);
System.exit(0);
}
stmt_conf.setString(1,conf.key);
stmt_conf.setString(2,conf.name);
stmt_conf.setString(3,conf.detail);
stmt_conf.addBatch();
}catch(SQLExceptione){
e.printStackTrace();
System.out.println("line:
"+line);
System.exit(0);
}
}
if(line%10000==0){
try{
stmt_inproc.executeBatch();
stmt_conf.executeBatch();
stmt_author.executeBatch();
stmt_cite.executeBatch();
mit();
//System.out.println("Processing"+line);
}catch(SQLExceptione){
System.err.println(e.getMessage());
}
}
}
privatevoidMessage(Stringmode,SAXParseExceptionexception){
System.out.println(mode+"Line:
"+exception.getLineNumber()
+"URI:
"+exception.getSystemId()+"\n"+"Message:
"
+exception.getMessage());
}
publicvoidwarning(SAXParseExceptionexception)throwsSAXException{
Message("**ParsingWarning**\n",exception);
thrownewSAXException("Warningencountered");
}
publicvoiderror(SAXParseExceptionexception)throwsSAXException{
Message("**ParsingError**\n",exception);
thrownewSAXException("Errorencountered");
}
publicvoidfatalError(SAXParseExceptionexception)throwsSAXException{
Message("**ParsingFatalError**\n",exception);
thrownewSAXException("FatalErrorencountered");
}
}
Parser(Stringuri)throwsSQLException{
try{
System.out.println("Parsing...");
conn=DBConnection.getConn();
conn.setAutoCommit(false);
stmt_inproc=conn
.prepareStatement("insertintopaper(title,year,conference,paper_key)values(?
?
?
?
)");
stmt_author=conn
.prepareStatement("insertintoauthor(name,pape
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DBLP 解析 设计 报告 分析
![提示](https://static.bdocx.com/images/bang_tan.gif)