




已阅读5页,还剩23页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
上海交通大学计算机科学与工程系学士论文基于Ontology的Web音乐知识检索系统的研究及实现导师:马范援 系别: 计算机科学与工程系班级: F9903301姓名: 钱雄白学号: 5990339018日期: 2003年6月摘要因特网作为一种信息时代的产物,随着它的不断普及,我们能从网上获得的知识越来越多。如何在知识的汪洋大海中找到自己需要的知识成了一个值得研究的课题。随之应允而生的是Ontology(本体论),它是一种概念化的详尽说明。本次研究主要通过收集因特网上民族音乐知识建立数字图书馆,并且实现一个网上的音乐知识检索系统,来研究信息的抽取,中国民族音乐的数字化方法等。关键字:数字图书馆,中国民族音乐,信息技术AbstractWith the development of information epoch, Internet becomes more and more popular. We can gain much more knowledge from it than before, and now it is a popular challenge that how to get what we need in millions of knowledge. There comes ontology, which is a specification of a conceptualization. Our research is to study information extraction, folk music digitization and the establishment of the digital library by carrying out a digital library of Chinese folk music collected from Internet as well as a music information searching system based on Internet.Key words: digital library, Chinese folk music, information technology目录第一章 概述51.1 项目的提出51.2 项目的系统构架51.3 本人的研究内容61.3.1 音乐知识的抽取61.3.2 音乐知识检索系统的实现61.3.3 音乐数据库管理工具的实现6第二章 Ontology的简介62.1 什么是Ontology62.2 Ontology的历史72.3 Ontology的应用7第三章 系统设计的前期准备83.1 用Ontology定义民族音乐知识83.1.1 由DAML组织给出的基于RDF的Ontology定义83.1.2 民族音乐的Ontology定义93.2 信息抽取103.2.1 音乐知识的收集及抽取103.2.2 数据库的结构113.3 JSP简介133.3.1 什么是JSP133.3.2 JSP的特点143.3.3 JSP与其他开发工具的比较14第四章 系统的开发实现154.1 网上音乐知识检索系统154.1.1 系统总述154.1.2 系统流程16网上音乐知识检索系统的流程图如下:164.1.3 实现内容及技术要点174.2 音乐数据库管理工具194.2.1 实现目标194.2.2 实现内容及技术要点19第五章 系统的调试及完善225.1 系统的调试225.2 系统的操作235.3 系统的界面24第六章 结论25谢辞26参考文献27第一章 概述1.1 项目的提出该Web音乐知识获取系统是与美国自然科学基金会的CM Net项目合作的,研究基于因特网的中国民族音乐数字图书馆的关键理论、方法与实现技术。包括中国民族音乐的数字化方法及标引与规范、基于音乐主旋律的识别与检索、异构平台的互操作等关键问题。数字图书馆的研究是目前国际范围内研究的热点之一,它涉及到计算机科学、图书馆学和其它领域交叉学科,对于保留与传播一个国家的文化具有重要意义。此项目结合中国民族音乐,提出数字图书馆有关的研究内容,它将为我国数字图书馆的研究与应用,为中国民族音乐的保存与传播提供技术支持。1.2 项目的系统构架研究的主要目标还是为了进一步研究如何数字化资源有效存储、发布和检索的数字图书馆体系结构,同时建立基于Ontology的Web音乐知识检索系统的模式和框架。Web音乐知识获取系统包括两个主要的部分,音乐知识的抽取器的生成和音乐知识的抽取。系统框架结构图如下图1.1所示:图1.1 Web音乐知识获取系统架构1.3 本人的研究内容本人的研究主要集中于以下三个方面:1.3.1 音乐知识的抽取为了建立在分布的、异构的信息源和用户的应用层间建立一个中间表示层,拟创建一个本体(ontology)以XML的方式定义在音乐领域涉及到的知识词汇表,以该ontology作为信息发布、检索的Schema。针对不同的信息源,使用研究出的Web数据挖掘方法,有效地进行实体抽取,将其自动转换成以ontology表示的数据。以便用相同的数据查询语言查询包括无结构化、半结构化和结构化的数据。而我的首要工作就是尽可能多的收集网上民族音乐信息,将找到的网页,按照提供的信息和样式进行分类。对于同类的网页,抽取一部分进行手工的标记,让机器学习如何从这种网页中抽取我们所需要的民族音乐知识。这样经过学习,机器就可以自动从同类网页中抽取信息了。1.3.2 音乐知识检索系统的实现如今在Internet环境下,不仅要实现应用程序对数据的检索,同时为了资源共享,还要实现网上的音乐知识检索服务。经过前面信息的抽取,已将网上找到的民族音乐信息分门别类的按照Ontology的定义存入数据库相应的表中。接下来的任务就是,编写一个基于Web的音乐知识检索系统了。由于这个系统是整个民族音乐数字图书馆项目的一部分。为了统一,也为了实现跨平台,所以需要用JSP来实现。另外,这种检索与通常意义上的检索系统不同,它是可以基于Ontology的,更为精确地提供用户想要检索的信息。1.3.3 音乐数据库管理工具的实现有了前台网上的音乐检索系统后,在后台还需要一个音乐数据库的管理工具。这个工具的编写要实现两个目的。一个是当机器完成从网页抽取出所需要的民族音乐信息后,我的这个程序必须提供接口,将抽取出来的数据写入音乐数据库。另外一个目的当然是,人工的对于音乐数据库的管理了,实现各个表之间的增加、删除、修改操作。而且之所以不用数据库本身的管理工具,而要另外编写这个工具,原因不光是因为上面所说要提供接口这个目的。更重要的原因是这个管理工具掩盖了数据库中表与表的关系。使用者看到的将不牵涉到数据库中表的id,只需要关心内容就可以了。同时为了整个项目的统一性,这个数据库管理工具也自然使用Java编写,用JDBC连接数据库。第二章 Ontology的简介2.1 什么是OntologyOntology is the study or concern about what kinds of things exist-what entities or things there are in the universe.(Briefings in Bioinformatics vol 1.No 4.398-414.November 2000)。Ontology可以有各式各样的形式,其需要包含:以定义好的名词(vocabulary of terms)来描述已存在的实体(entity)。然后用一些规格(specification)来表示(indicate)出这些实体间的关系(relationship)与存在的意义(meaning),而形成在这专业领域(domain)中可以解释其知识的架构。Ontology这个字在哲学史上已存在有一段历史了,它在哲学上表示存在论,讨论对象的存在性,用于描述事物的本质。在近一、二十年来,本体论已被计算机领域所采用,用于知识表达、知识共享及重用。许多学科和研究都在使用“本体”这个术语,但存在不同的定义。在工程研究中,从知识共享的角度来说:An ontology is a specification of a conceptualization.(摘自Tom Gruber的定义)主要用来分享知识(knowledge sharing)。Ontology是共享概念的明确的形式化规范说明。该定义包含四层含义:概念模型(conceptualization)、明确(explicit)、形式化(formal)和共享(share)。“概念模型”指通过抽象出客观世界中一些现象的相关概念得到的模型。“明确”指所使用的概念及使用这些概念的约束都有明确的定义。“形式化”指本体是计算机可读的(即能被计算机处理)。“共享”指本体体现的是共同认可的知识,反映的是相关领域中公认的概念集。知识管理是Ontology技术的主要的应用领域之一,包括信息搜索、信息抽取、维护和自动文档生成等方面。它采用框架系统对客观存在的概念和关系的描述。它是通用意义上的“概念定义集”,是关于“种类”(kind)和“关系”的词汇表。这种词汇表,是在各种事务代理人之间交换意见时所用到的共同语言。从本质上来说Ontology就是:它是一个逻辑理论的陈述它是一套表达术语的定义它是用人类可读的文本定义的一个领域内(类型、关系、功能等)实体名字来描述其含义,定义正式公理以限制其解释及限制其解释及这些术语的形式良好的使用2.2 Ontology的历史80、90年代在专家系统中应用由知识表示与推理专家建立多用于图书分类互联网驱动非分类学专家未受训公众研究、电子商务、计算机配置、通用信息站点、生物数据2.3 Ontology的应用由于Ontology提供通信双方的公共理解,类似于网络协议在通信双方的地位,只不过Ontology是从人工智能角度出发构造的软件。正由于此,国外研究Ontology异常活跃,国内则处于刚起步的阶段。:目前,Cycorp 公司已经有一个版Cyc Upper Ontology 可以通过网络下载(), 这包括约3000 Cyc 的最高概念。Cycorp 提供Cyc Upper Ontology 作为某些应用的公共基础, 这些应用包括自然语言的理解和生成、语意数据库的集成、 一致性检查、 数据挖掘、 语意信息的获取、 限于ontology的仿真、 用户建模和知识共享等。Ontology可应用于许多领域,如电子工程、化学、远程教育、电子商务等。 多agent系统的自动设计:为了保持代理的独立性,我们坚持代理不和其他代理发生直接的数据交换和共享,那么多代理系统能有效地完成一项复杂任务,需要一组中介代理,ontology专门负责沟通代理和环境之间的信息交流。 电子商务B2B:不同的企业使用的开发平台和软件系统不一定完全相同,那么B2B的通信需要通信的中介,即使在虚拟企业网络模型中,可以充当此工作 CSCW(计算机支持的协同工作):多个参与者通过用户界面,如因特网浏览器访问到协同层的对象层,通过活动层完成各自的活动,如果没有本体模型的翻译会认为对方的活动是未知的而导致协同工作失败。 数据挖掘:由于本体有高层次的抽象概念组成,基于本体的数据挖掘可在高层次进行,产生高层次或多层次的规则,甚至在具有语义意义的规则上产生挖掘结果。第三章 系统设计的前期准备3.1 用Ontology定义民族音乐知识Web知识获取系统是与语义Web紧密的联系在一起的。一方面,我们把Ontology作为知识获取系统的知识表示形式;另外一个方面,除了Web用户外,其它软件agent也可以作为Web知识获取系统的使用者,系统必须自动为它们提供知识服务。Ontology为我们提供了一种获取、组织、共享知识的机制,我们可以把它运用于领域知识结构的定义、知识的抽取以及知识的表示等知识获取的全过程。在Web知识获取系统中,我们将Ontology作为联系知识获取和知识表示的纽带。在下层,Ontology与Web上存在的大量不同结构的数据组成了知识获取系统的数据源,通过不同的数据抽取模型,我们把抽取的信息组织为一个公用的数据模型,在此基础上再提升为Ontology的语义模型;在上层,是以Ontology为骨架的知识表示系统,具有统一的知识表示框架,这样就可以为不同的使用者(用户或者软件agent)提供统一的访问接口。同时,为了使系统达到语义Web的目标,我们用语义Web语言描述这个领域的Ontology,然后要按照Ontology标记Web页面。在Ontology的定义方面,我们在研究我们的示范领域知识的基础上,在领域专家的帮助下,借助一些Ontology工具集如Protg、OntoEdit等完成领域Ontology的定义。3.1.1 由DAML组织给出的基于RDF的Ontology定义以下这个Ontology的定义常被用来描述音乐(music)或是歌曲(songs)。它包括例如:乐器(instruments),音乐家(musicians),曲调(tone),歌手(singers)等。 表 3.1 DAML组织的音乐Ontology定义Class PropertySubClass ActionTo InterpretTo PlayTo Sing AttributeCharacteristicsColorToneOpusTitle,Creator(subrange of composer), Created Time,Description(subrange of Attribute)EntityNameActorPublication PlaceSubclass of Attribute:表 3.2 DAML组织的音乐Attribute(属性)类的子类定义Class PropertySubClass CharacteristicsGenreTempoTonalityColorToneA,B,C,D,E,F,GSubclass of Actor:表 3.3 DAML组织的音乐Actor(艺术家)类的子类定义Class PropertySubClass GroupGroup construct timeBig bandChoirComboDuetOrchestraQuartetRock GroupTrio ObjectInstrumentScorePersonNationTimeComposerInterpretSinger以上只是列出了这个定义的一部分,具体的定义参见:http:/www.lgi2p.ema.fr/ranwezs/ontologies/musicV1.0.daml3.1.2 民族音乐的Ontology定义经过对网上各种民族音乐信息的浏览,综合各种可收集到的信息。同时通过参考提交给DAML组织的音乐Ontology的定义,结合中国的民族音乐,作为一种尝试,给出一个初步的音乐Ontology的定义,如下图3.1所示,这个定义将在以后的研究中逐步完善。MusicOntologyActionOpusEntity演奏,作词,作曲,指挥曲名,作曲,乐器,简介Actor乐团名称,创建时间BandInstrument名称,时代,民族,特征,代表作Person名字,生日,专长,所属团体Publication专辑单曲专辑名称,出版社,出版时间曲名,乐器,演奏,伴奏,下载点图3.1 民族音乐的Ontology定义3.2 信息抽取3.2.1 音乐知识的收集及抽取网上的有关中国民族音乐的知识不是很丰富,各个网站提供的信息量参差不齐,而且格式也大不相同。我的工作之一就是要尽可能多的收集网上的有关中国民族音乐知识的网页,同时对网页的Html代码根据抽取算法进行标记,方便同组同学编写的一个抽取程序能自动从网页中挑出有用的信息。从收集网页到机器抽取,其实是整个项目比较关键的任务。而这步又可以分为两个部分,首先需要对网页进行人为的标记,找些相同的样本让机器学习。其次才是机器自主的抽取信息。一个简单的网页抽取例子这里我举个简单的例子,说明标记的工作。在网页上我们所看到的是:图3.2 一个简单的网页示例其实它的源代码如下:Some Music InfoSome Music Info阿炳 二泉映月刘天华 空山鸟语潘娥青 梁山伯与祝英台END而作为我来说,标记工作其实如下:Some Music InfoSome Music InfoTUPLEBEGINAttributeBegin阿炳AttributeEnd AttributeBegin二泉映月AttributeEndTUPLEENDTUPLEBEGINAttributeBegin刘天华AttributeEnd AttributeBegin空山鸟语AttributeEndTUPLEENDTUPLEBEGINAttributeBegin潘娥青AttributeEnd AttributeBegin梁山伯与祝英台AttributeEndTUPLEENDEND比较以上两段代码,就可以发现我在需要的关键信息前后标上了AttributeBegin和AttributeEnd,而对于整个一组关键信息,我在前后标上TUPLEBEGIN和TUPLEEND。对于机器学习来说,它要学习的并不是我标记的四种记号,而是这四种记号前后的诸如等记号。以后就可以无需标记,而根据样本学习中学到的记号,自己搜寻有用信息了。根据不同的网页,有好几种不同的算法,由于这不是我的主要工作,在此就不仔细讨论了。3.2.2 数据库的结构现在做的相当于是整个系统的原型,所以老师让我先使用Access数据库,以后有大数据量或者大的访问量时,再使用SQL或其他数据库。但其实数据库的结构都是一样的,只是实现的时候有些差别。参照音乐Ontology的定义,数据库结构如下:表名:Action(活动)表3.4 数据库中Action(活动)表的定义字段名称数据类型说明Id自动编号Action的idPerformer数字型演奏者,对应Person表中的idWriter数字型作词者,对应Person表中的idComposer数字型作曲者,对应Person表中的idConductor数字型指挥者,对应Person表中的id表名:Opus(作品)表3.5 数据库中Opus(作品)表的定义字段名称数据类型说明Id自动编号Opus的idName文本型歌曲名称Composer数字型作曲者,对应Person表中的idInstrument数字型主要乐器,对应Instrument表中的idIntroduction备注型歌曲介绍表名:Band(乐团)表3.6 数据库中Band(乐团)表的定义字段名称数据类型说明Id自动编号Band的idName文本型乐团名称Time日期/时间型创建时间表名:Instrument(乐器)表3.7 数据库中Instrument(乐器)表的定义字段名称数据类型说明Id自动编号Band的idName文本型乐器名称Period文本型时代Nation文本型民族Feature文本型特征Representative文本型代表作表名:Person(艺术家)表3.8 数据库中Person(艺术家)表的定义字段名称数据类型说明Id自动编号Band的idName文本型名字Birthday日期/时间型生日Specialty文本型专长Band数字型属于哪个团体表名:SongSet(专辑)表3.9 数据库中SongSet(专辑)表的定义字段名称数据类型说明Id自动编号SongSet的idName文本型专辑名称Publisher文本型出版社Time日期/时间型出版时间表名:Song(歌曲)表3.10 数据库中Song(歌曲)表的定义字段名称数据类型说明Id自动编号Song的idOpus文本型歌曲名称Performer数字型演奏者Accompany数字型伴奏者SongSet数字型所属专辑的idDownloadURL备注型下载地址以上列出的是民族音乐数据库中比较重要的几个表,其他的表中不放数据,只是保存了表的关系,就不列举了。数据库中表与表的关系见下图3.3:图3.3 音乐数据库中表与表的关系图3.3 JSP简介3.3.1 什么是JSPJSP(Java Server Pages)是由Sun Microsystems倡导、多家公司参与一起建立的一种动态网页技术标准,网址为/products/jsp。按照脚本语言是服务于某一个子系统的语言这种论述,JSP应当被看作是一种脚本语言,然而,作为一种脚本语言,JSP又显得过于强大了,在JSP中几乎可以使用全部的Java类。作为一种基于文本的、以显示为中心的开发技术,JSP提供了Java Servlet的所有好处。3.3.2 JSP的特点内容与显示逻辑分开JSP网页最吸引人的地方之一就是能结合JavaBeans技术来扩充网页中程序的功能。JavaBeans是一种Java类(class),通过封装属性和方法成为具有某种功能或者处理某个业务的对象。当JSP与一个JavaBeans类结合在一起的时候,就提供了一种使内容和显示逻辑分开的简单方式。分开内容和显示逻辑的好处是,更新页面外观的人员不必懂得Java代码,而更新JavaBeans类的人员也不必是设计网页的行家里手,就可以用带JavaBeans类的JSP页面来定义Web模版,以建立一个由具有相似外观的页面组成的网站。页面执行时是编译式的一般来说,在实际的JSP引擎中,JSP页面在执行时是编译式的,而不是解释式的。解释式的动态开发工具如ASP、PHP3等由于速度等原因已经满足不了当前大型电子商务应用的需要,传统的开发技术都在向编译执行的方式改变。通常来说,JSP页面一般是翻译成Java Servlet的Java源文件,再经过Java编译器编译执行为Java Servlet的class文件。在JSP转译成Java Servlet以后,每次客户机(通常都是用户的Web的浏览器)向服务器请求这一个JSP文件的时候,服务器将检查自上次编译后的JSP文件是否发生改变,如果没有改变,就直接执行Servlet,而不用再重新编译,其效率是相当高的。3.3.3 JSP与其他开发工具的比较JSP与其他Web开发工具相比,在以下两方面具有优势:Web服务器和运行平台ASP目前仅仅被支持于Microsoft Internet Information Server(IIS)和Personal Web Server(PWS),由于IIS和PWS仅仅有Windows下的版本,所以ASP只能在Windows平台下使用。JSP是一个规范,由于Java是种跨平台的语言,显而易见,JSP也就使跨平台的了。目前的JSP可以在多种Web服务器和操作系统上使用。如Apache Web Server和Microsoft IIS等。PHP本身就对各种操作系统和Web服务器作了支持,所以也是跨平台的。组件技术ASP和JSP对组件技术的支持已经很完善了,而PHP支持COM和JavaBeans没多久,而且支持的也不是很完善。JSP与ASP、PHP在Web方面的比较,见下表:表3.11 ASP、JSP、PHP的比较ASP 3.0JSPPHP 4Web服务器IIS、PWSApache、IIS、PWS、Netscape Server、iPlanet等Apache、IIS、PWS、Netscape Server等运行平台Windows各种UNIX(Solaris、Linux、AIX、IRIX等)、Windows、MacOS等各种UNIX(Solaris、Linux、AIX、IRIX等)、Windows组件技术COMJavaBeans、EJBCOM、JavaBeans自定义TAG语法无有无开放性无多家合作、包括SUN、IBM、BEA Weblogic、Netscape、Oracle自由软件脚本语言支持VBScript、JscriptJava、EMAC-Script、WEBL等PHP建立大型Web应用程序可以可以不宜程序执行速度快极快极快学习难度低较低低Session管理有有有统一的数据库连接有、ADO、ODBC有、JDBC无后缀名aspjspphp、php3、phps基于JSP的诸多优点,本次系统Web开发就使用JSP,并且把Java作为整个项目的开发语言。第四章 系统的开发实现根据前面的介绍可知,整个系统主要包括两个部分,其一是网上的音乐知识检索系统,其二是音乐数据库的管理工具。4.1 网上音乐知识检索系统4.1.1 系统总述根据定义的Ontology结构与抽取出的Ontology形式的知识,Web知识信息服务子系统将采用概念联想和概念推理技术处理用户的检索请求,可以突破机械的关键字匹配的缺陷,从词所表达的概念意义层次上来理解和处理用户的请求,为用户提供结构化的知识检索服务。同时,基于Ontology可以将同义词扩展检索、语义蕴涵、外延扩展检索、语义相关扩展检索等技术与信息检索结合起来,提供交互式的智能化信息检索服务,而信息检索的结果(如网页)可以作为知识检索的背景内容。因此,整个系统提供了方便灵活的可伸缩知识信息检索服务,将包括四种检索服务功能:概念检索、基于Ontology知识层次结构的目录服务、知识属性检索和信息检索,如图4.1所示。基于Ontology的目录检索信息检索概念检索Web 用户界面Web Service 接口知识属性检索图4.1 基于Ontology的知识信息检索另外,鉴于Web服务将成为下一代Web的主流技术,我们的系统对外也将提供Web Service接口(如图4.1中所示),用来为其它软件实体提供知识检索服务。我做的Web音乐知识检索系统,其实就是上述整个系统的一部分,提供网上针对Ontology的音乐知识检索。4.1.2 系统流程 网上音乐知识检索系统的流程图如下:图4.2 网上音乐知识检索系统流程图通过这个流程图,我们很容易看清整个系统是如何工作的。我将系统分成以下三部分来介绍我的工作:查询信息的输入,数据库查询,查询结果的输出。4.1.3 实现内容及技术要点查询信息的输入实现内容:整个系统的输入,共有两个信息,一个是要查询的内容,另一个就是本系统的特点,根据音乐Ontology确定的查询范围。所谓查询的内容,很简单,就是使用一个文本框来提交。但查询的范围,要求首先根据音乐Ontology的定义,构建一棵树,然后可以在树上选中查询范围,这就需要用到JavaScript语言来实现。技术要点:这个部分,技术要点有两个,查询内容方面在于让JSP支持中文的输入,查询范围方面在于用JavaScript实现音乐Ontology树。A. 让JSP支持中文首先翻阅了JSP相关书籍,找到可以用以下方法转换字符集: String names =request.getParameter(name); names =(names=null)?:newString(names.getBytes(ISO-8859-1),GB2312); 但有个问题是,总不能所有用到中文的地方都这样转换,那样代码会显得很零乱。而且,一些页面上的中文提示,输出的仍然是乱码。后来经过多方的资料查询,终于找到一个简便的解决方法:就是在JSP页面上加入中文显示就正常了。B. 用JavaScript实现音乐Ontology树JScript 是 Microsoft 公司对 ECMA 262 语言规范(ECMAScript 编辑器 3)的一种实现。除了少数例外(为了保持向后兼容),JScript 完全实现了 ECMA 标准。JScript 是一种解释型的、基于对象的脚本语言。尽管与 C+ 这样成熟的面向对象的语言相比,JScript 的功能要弱一些,但对于它的预期用途而言,JScript 的功能已经足够大了。一开始,我的目标是实现类似于windows资源管理器中那样的一棵树。经过各种生成树的资料阅读,我实现了这样的一棵树,并且单击父亲节点,可以收缩、扩展此节点下的整棵子树。但是,第二个问题随之而来,因为一般的树的叶子节点都是一个超链接,单击后就会转到另一个页面。而我需要的是保存当前单击哪个叶子节点的信息,等用户输入查询内容后能一起提交到下一个页面。同时,在页面上还需要提示用户当前选择的查寻范围是什么。为了解决这个问题,我尝试了各种办法,其中一种是使用checkbox,另一种是Java Script实现的文字单击变色,但总不尽如人意。最后,我想出的解决方案是:其他一般的树,树上节点的内容往往是不断在变化的,但我要实现的音乐Ontology树,不同在于它是固定的。所以,我不必要让树上的节点可以展开、收缩,我将整棵树就画在那里。同时我找到Html中的hidden变量,利用Onclick事件调用JavaScript写的小函数,每次点击一个节点,就将此节点对应的信息存入这个hidden变量。另外,选中的节点我用红色标记出来,而其他的节点则是黑色的。数据库查询实现内容:数据库查询当然离不开数据库的连接,SQL查询语句的书写,以及执行查询了。这里的查询首先是根据查询范围,得知需要查数据库中的哪些表,然后支持的是模糊查询,即所有查寻范围内包括查询内容的信息都会显示在查询结果里。由于使用的JSP,那么按照显示内容与代码分离的原则,我自然使用了名叫DBBean的JavaBeans来完成一切和数据库相关的操作。技术要点:A. 数据库的连接由于使用的是Access数据库,使用JDBC连接,需要先在windows的控制面板管理工具数据源(ODBC)里,配置一下数据库,比如叫jdbc:odbc:music。然后,在JavaBeans里,像下面这样简单的就建立起数据库的连接了:String url=jdbc:odbc:music; String driver=sun.jdbc.odbc.JdbcOdbcDriver; Class.forName(driver); Connection conn=DriverManager.getConnection(url,); B. SQL查询本系统的查询是根据在音乐Ontology树上选择的查寻范围来确定的。如果查询范围是音乐Ontology树的叶子节点,那么就代表了只需要查数据库中某个表的某个字段即可,可这里有简单的单个表的查询,如SELECT * FROM Instrument WHERE Instrument.Name LIKE %+query+%;(query代表查询的内容)也有牵涉到多个表的,比如查询的这个字段正好存放的是另一个表的id,那么就需要查询两个表,更复杂的查询要涉及更多的表。如果查询范围是音乐Ontology树上的非叶子节点,那么就需要把此节点下所包含的所有叶子节点按照上面的办法查一遍。这里需要注意两个问题:其一是这里所有的查询都是模糊查询,所以必须使用Like %查询的内容%,来对数据库进行查询。其二,由于表与表之间的关系比较复杂,产生了一些查询上的问题。如表Person中的Band字段,应该放某个艺术家所属团体的id,但是一个艺术家也可能不属于任何团体。如果这时Band字段放0,而团体表中没有id为0的记录,查询时将会需要两个查询语句:一个针对属于某个团体的:SELECT p.Name AS PName,Birthday,Specialty,b.Name AS BName FROM Person AS p,Band AS b WHERE p.Band = b.Id AND p.Name LIKE %+query+%;一个针对不属于任何团体的:SELECT p.Name AS PName,Birthday,Specialty FROM Person AS p WHERE p.Band=0 AND p.Name LIKE %+query+%;经过考虑,找到一个可行的方案,就是在表Band中插入一条id为0的记录,这条记录团体名字为空,这样只需要用上面一条SQL语句查询就可以了。同样,以后类似的问题都这么解决。C. 执行查询执行查询相对比较简单,只需要如下:Statement sqlStatement=conn.createStatement(); String sql=上面写好的SQL查询语句; ResultSet rs=sqlStatement.executeQuery(sql); 这样,ResultSet里就保存了返回的查询结果,输出查询结果时只需要对ResultSet操作就可以了。查询结果的输出实现内容:本系统的输出和其他的系统又有点不一样,因为其他系统往往只需要根据一个表来查,但本系统是查询许多表。而且,同一个表的不同字段的查询结果,最终是要一起输出的。查询范围大的话,输出结果有很多张表组成。正因为本系统查询的特殊性,我没有实现分页。一般的查询可以规定比如十条记录一页,但我这里有多个表的输出结果,目前没有把多个表分页输出的好标准。以后如果想到好的分页方法,我会再改进的。技术要点:A. 代码重用由于我在很多地方用到输出代码,考虑到代码的重用性,我把输出语句也放到了JavaBeans里。也就是说,我在JavaBeans里把所有的输出组成一个String,然后在JSP代码里用out.println(output);(output指在JavaBeans里构建的那个String)输出到网页上,这样避免了冗余的输出代码。B. frameset的使用为了方便查询一次后,再次查询。我使用了Html中的frameset将页面切割成上、下左、下右三部分。上部放的是标题,下左部放的是查询内容的输入框和音乐Ontology树,在下右部显示查询结果。这样做的好处是,用户进行了一次查询后,可以看到自己查询的内容和查寻的范围。同时当用户进行下一次查询时,也可以根据上一次查询的结果,重新选择查寻范围,做更加精确的查询。4.2 音乐数据库管理工具4.2.1 实现目标正如我在第一章中所说的,这个工具的编写,是为了取代Access自带的管理工具,实现一个更加简便,易于操作,针对我们这个音乐数据库的管理工具。目前这个工具只是我们自己使用,但以后可能也会提供给别的用户使用。这个工具对于我们来说,是简化工作,当有新的抽取出的数据要放入数据库中的时候,使用者可以不知道数据库中数据是怎样保存的,不用知道表与表之间的关系,更可以避免最头痛的id相互关联的问题,唯一要做的就是按部就班的输入数据。上面说的只是添加数据时,使用这个工具的简便。但其实,查看数据库的时候也很方便。查看时虽然也和Access自带的工具一样,显示数据库中七张表。但看到的信息其实是多张表的关联查询的结果,也就是说,原来看到id的地方,用相应表的name替代了。同时,当修改或者删除某条记录时,本工具也要能自动维持数据库中表与表的关联,保证不因操作而破坏。为了项目的统一性,这个应用程序使用Java编写。4.2.2 实现内容及技术要点音乐数据库的管理,当然要包括查看、添加、修改、删除数据。下面我就从几个方面来介绍这个工具的实现过程以及其中遇到的主要技术问题:界面规划、查看数据、添加数据、修改数据、删除数据。界面规划从最早的版本开始,Java就有窗体系统。第一版是众所周知的AWT(Abstract Windowing Toolkit,抽象窗口工具包)。AWT需要使用本机(native)的工具组件,因此它相对比较小也比较简单。但缺点在于只支持所有平台的共同特性。本程序使用的当然是Java高级的图形类库Swing,它为基于GUI的客户端应用程序开发,提供了一套功能完整、专业品质的GUI工具包。Swing是AWT的扩展,AWT位于Swing的底层。我将我的程序界面划分成上中下三大块,所以我用的是BorderLayout(边框布局),上部我放的是个下拉框,其中列出了数据库中的七张表名,可以选择要对数据库中哪张表进行操作。中间占最大比例的,是显示选中表的数据,通过滚动条可看到此表经过查询后的全部数据。下部我一分为二,左边是个状态栏,右边是添加、删除、修改这些功能按钮,使用FlowLayout(流式布局)。查看数据因为是用Java编写,我使用JBuilder作为我的编程环境。而我发现对于数据库的操作,JBuilder提供了一整套数据库相关的控件可以使用,包括:com.borland.dbswing.JdbTable 用于显示数据库中的数据com.borland.dbswing.JdbNavToolBar 用于对数据库进行操作com.borland.dbswing.JdbStatusLabel 用于显示目前数据库操作的状态com.borland.ds.sql.dataset.Database 用于绑定某个数据库com.borland.ds.sql.dataset.QueryDataSet 用于绑定一个查询结果数据集基本上这些控件就能实现数据库的一般操作了。不过可惜的是,虽然对于一张表的操作这些控件能完成几乎所有的数据库操作,但我这个音乐数据库一般都需要查看多张表,而且添加、删除、修改数据都牵涉到好几张表,这些控件就无法胜任了。随后,我想到的是自己利用JTable来实现对数据库的查看,而不使用上述这些控件。我发现利用AbstactTableModel类,可以轻松实现表模型,因为这个类实现了大多数必需的方法。我只需要提供以下三种方法:public int getRowCount();public int getColumnCount();public Object getValueAt( int row , int column);我对数据库查询返回的ResultSet进行操作,实现了上述的三个方法,这样我的JTable就可以显示数据库内容了。但不知为何,当我用getSelectRow时,总是得不到当前选中的那行。而且我觉得自己写的JTable虽然实现了查看数据库的功能,但总不及borland的控件好用。思前想后,我就定,就使用borland提供的JdbTable来查看数据,增删改我自己来实现。我所做的就是首先配置database绑定到我的音乐数据库,然后在queryDateSet里写一个查询某个表所有数据的sql语句,接着将JdbTable与这个queryDataSet绑定在一起,JdbTable就自然能显示我的查询结果了。添加数据关于添加数据,我实现的是,当按下“添加”按钮时,弹出一个对话框,用户在对话框里输入数据。单击保存后,数据自动存入数据库,并且更新JdbTable,从中可以看到新添加的数据。在添加数据时,有的牵涉到多个表的。我仍以Person表的Band字段为例:假设这个字段的输入为NewBand,那么需要先在Band表中察看是否存在名为NewBand的记录,如果有则直接在Person表中添加
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 布拖县2025上半年四川凉山州布拖县考试招聘事业单位工作人员18人笔试历年参考题库附带答案详解
- 宿迁市2025江苏宿迁市宿迁公证处招聘备案制人员(公证员助理)3人笔试历年参考题库附带答案详解
- 大渡口区2025重庆大渡口事业单位招聘应届生16人笔试历年参考题库附带答案详解
- 夫妻财产分割及子女抚养权及赡养费离婚补充协议
- 烤鸭制作技艺传承学费支付及培训服务协议
- 高端酒店租户与物业卓越服务合作协议
- 离婚协议书:全面放弃财产权益明确条款
- 租赁合同担保纠纷解决与法律程序协议
- 住宅小区物业合同执行与绿化养护责任书
- 商业物业委托经营管理及物业管理服务合同
- 电气化铁路技术培训课件
- 2024脓毒性休克的血流动力学管理要点
- 学校校服厂管理制度
- 2025至2030中国沥青基碳纤维行业发展趋势分析与未来投资战略咨询研究报告
- 【生物 黑吉辽蒙版】2025年普通高等学校招生选择性考试(解析版)
- T/CNFAGS 15-2024绿色合成氨分级标准(试行)
- 建筑工程答辩试题及答案
- 综合应用能力b类试卷及真题答案
- 行测资料5000题题库
- 2025-2030中国资产托管行业市场发展分析及前景趋势与投资研究报告
- 小程序租赁协议合同
评论
0/150
提交评论