jena+中文教程本体api
- 格式:doc
- 大小:225.00 KB
- 文档页数:46
Jena 简介一般来说,我们在Protege这样的编辑器里构建了本体,就会想在应用程序里使用它,这就需要一些开发接口。
用程序操作本体是很必要的,因为在很多情况下,我们要自动生成本体,靠人手通过Protege创建所有本体是不现实的。
Jena 是HP公司开发的这样一套API,似乎HP公司在本体这方面走得很靠前,其他大公司还在观望吗?可以这样说,Jena对应用程序就像Protege对我们,我们使用Protege操作本体,应用程序则是使用Jena来做同样的工作,当然这些应用程序还是得由我们来编写。
其实Protege本身也是在Jena的基础上开发的,你看如果Protege 的console里报异常的话,多半会和Jena有关。
最近出了一个Protege OWL API,相当于对Jena的包装,据说使用起来更方便,这个API就是Protege的OWL Plugin所使用的,相信作者经过OWL Plugin的开发以后,说这些话是有一定依据的。
题目是说用Jena处理OWL,其实Jena当然不只能处理OWL,就像Protege 除了能处理OWL外还能处理RDF(S)一样。
Jena最基本的使用是处理RDF(S),但毕竟OWL已经成为W3C的推荐标准,所以对它的支持也是大势所趋。
好了,现在来点实际的,怎样用Jena读我们用Protege创建的OWL本体呢,假设你有一个OWL本体文件(.owl),里面定义了动物类(/ont/Animal,注意这并不是一个实际存在的URL,不要试图去访问它),并且它有一些实例,现在看如下代码:OntModel m = ModelFactory.createOntologyModel();File myFile = ...;m.read(new FileInputStream(myFile), "");ResIterator iter = m.listSubjectsWithProperty(RDF.type, m.getResource("http:// /ont/Animal"));while (iter.hasNext()) {Resource animal = (Resource) iter.next();System.out.println(animal.getLocalName());}和操作RDF(S)不同,com.hp.hpl.jena.ontology.OntModel是专门处理本体(Ontology)的,它是com.hp.hpl.jena.rdf.model.Model的子接口,具有Model的全部功能,同时还有一些Model没有的功能,例如listClasses()、listObjectProperties(),因为只有在本体里才有“类”和“属性”的概念。
一、创建RDF语言本体:static String personURI = "http://somewhere/JohnSmith";static String fullName = "John Smith";// create an empty ModelModel model = ModelFactory.createDefaultModel();○1// create the resourceResource johnSmith = model.createResource(personURI);○2// add the propertyjohnSmith.addProperty(VCARD.FN, fullName);○3○1处是用模型工程创建一个空的本体模型○2处是创建一个资源,主体是johnSmith,其对应URI为"http://somewhere/JohnSmith"。
○3处是给○2出创建的资源增加属性和客体(即属性的值),属性为VCARD.FN,其中VCARD是RDFS中定义好的,客体为fullName,是字符串,也就是literal。
○2和○3合起来就是创建了一个三元组,是组成本体的基本单元,可以简写成如下:Resource johnSmith =model.createResource(personURI).addProperty(VCARD.FN, fullName);二、对本体中的陈述(即三元组)的操作StmtIteratoriter = model.listStatements();○1// print out the predicate, subject and object of each statementwhile (iter.hasNext()) {○2Statement stmt = iter.nextStatement(); // get next statement Resource subject = stmt.getSubject(); // get the subjectProperty predicate = stmt.getPredicate(); // get the predicate○4RDFNode object = stmt.getObject(); // get the objectSystem.out.print(subject.toString());○3System.out.print(" " + predicate.toString() + " ");if (object instanceof Resource) {System.out.print(object.toString());} else {// object is a literalSystem.out.print(" \"" + object.toString() + "\"");}System.out.println(" .");}○1处是列出model本体模型中的所有的陈述。
1、OntModel ontModel = ModelFactory.createOntologyModel();Jena通过model包中的ModelFactory创建本体模型,ModelFactory是Jena提供用来创建各种模型的类,在类中定义了具体实现模型的成员数据以及创建模型的二十多种方法。
该语句不含参数,应用默认设置创建一个本体模型ontModel,也就是说:它使用OWL语言、基于内存,支持RDFS推理。
可以通过创建时应用模型类别(OntModelSpec)参数创建不同的模型,以实现不同语言不同类型不同推理层次的本体操作。
例如,下面的语句创建了一个使用DAML语言内存本体模型。
直观地讲,内存模型就是只在程序运行时存在的模型,它没有将数据写回磁盘文件或者数据库表。
OntModel ontModel = ModelFactory.createOntologyModel( OntModelSpec.DAML_MEM );更多类型设置可以参照OntModelSpec类中的数据成员的说明。
2、ontModel.read("file:D:/temp/Creatrue/Creature.owl");读取的方法是调用Jena OntoModel提供的Read方法。
Read方法也有很多重载,上面调用的方法以文件的绝对路径作为参数。
其他的方法声明如下read( String url );read( Reader reader, String base );read( InputStream reader, String base );read( String url, String lang );read( Reader reader, String base, String Lang );read( InputStream reader, String base, String Lang );3、OntModel m = ModelFactory.createOntologyModel();OntDocumentManager dm = m.getDocumentManager();创建一个文档管理器并将它与以创建的本体模型关联。
SL4A之Py thon资源中文化项目ApiRefe rence!Activit yresul tfacad e∙setresu ltbool ean∙setresu ltbool eanarr ay∙setresu ltbyte∙setresu ltbyte array∙setresu ltchar∙setresu ltchar array∙setresu ltdoub le∙setresu ltdoub learra y∙setresu ltfloa t∙setresu ltfloa tarray∙setresu ltinte ger∙setresu ltinte gerarr ay∙setresu ltlong∙setresu ltlong array∙setresu ltseri alizab le∙setresu ltshor t∙setresu ltshor tarray∙setresu ltstri ng∙setresu ltstri ngarra y!Alarmma nagerf acade∙cancelr epeati ng∙schedul eabsol ute∙schedul einexa ctrepe ating∙schedul erelat ive∙schedul erepea ting!Android facade∙getclip board∙getinpu t∙getinte nt∙getpack agever sion∙getpack agever sionco de∙getpass word∙log∙maketoa st∙notify∙require dversi on∙sendema il∙setclip board∙startac tivity∙startac tivity forres ult∙vibrate!Applica tionma nagerf acade∙getlaun chable applic ations∙getrunn ingpac kages∙launch!Battery manage rfacad e∙battery checkp resent∙battery gethea lth∙battery getlev el∙battery getplu gtype∙battery getsta tus∙battery gettec hnolog y∙battery gettem peratu re∙battery getvol tage∙battery startm onitor ing∙battery stopmo nitori ng∙readbat teryda ta!Bluetoo thfaca de∙bluetoo thacce pt∙bluetoo thconn ect∙bluetoo thgetc onnect eddevi cename ∙bluetoo thmake discov erable∙bluetoo thread∙bluetoo thread line∙bluetoo thread ready∙bluetoo thstop∙bluetoo thwrit e∙checkbl uetoot hstate∙toggleb luetoo thstat e!Cameraf acade∙camerac apture pictur e∙camerai nterac tiveca pturep icture !Commoni ntents facade∙pick∙scanbar code∙search∙view∙viewcon tacts∙viewhtm l∙viewmap!Conditi onmana gerfac ade∙onringe rsilen t!Contact sfacad e∙contact sget∙contact sgetat tribut es∙contact sgetco unt∙contact sgetid s∙pickcon tact∙pickpho ne!Eventfa cade∙posteve nt∙receive event∙waitfor event!Locatio nfacad e∙geocode∙getlast knownl ocatio n∙readloc ation∙startlo cating∙stoploc ating!Mediare corder facade∙recorde rcaptu revide o∙recorde rstart microp hone∙recorde rstop∙startin teract ivevid eoreco rding!Phonefa cade∙checkne tworkr oaming∙getcell locati on∙getdevi ceid∙getdevi cesoft wareve rsion∙getline1numbe r∙getneig hborin gcelli nfo∙getnetw orkope rator∙getnetw orkope ratorn ame∙getnetw orktyp e∙getphon etype∙getsimc ountry iso∙getsimo perato r∙getsimo perato rname∙getsims erialn umber∙getsims tate∙getsubs criber id∙getvoic emaila lphata g∙getvoic emailn umber∙phoneca ll∙phoneca llnumb er∙phonedi al∙phonedi alnumb er∙readpho nestat e∙stoptra ckingp honest ate!Pulsege nerato rfacad e∙pulsege nerato rgethz∙pulsege nerato rgethz sample s∙pulsege nerato rgetle ftpuls ems∙pulsege nerato rgetle ftpuls eperce nt∙pulsege nerato rgetle ftpuls esampl es∙pulsege nerato rgetri ghtpul sems∙pulsege nerato rgetri ghtpul seperc ent∙pulsege nerato rgetri ghtpul sesamp les ∙pulsege nerato rispla ying∙pulsege nerato rrun∙pulsege nerato rsethz percen t∙pulsege nerato rsetle ftpuls eperce nt∙pulsege nerato rsetri ghtpul seperc ent∙pulsege nerato rstop∙pulsege nerato rtoggl einver ted∙pulsege nerato rtoggl eplayb ack∙pulsege nterat orseth z!Sensorm anager facade∙readsen sors∙sensors getacc uracy∙sensors getlig ht∙sensors readac celero meter∙sensors readma gnetom eter∙sensors reador ientat ion∙startse nsing∙stopsen sing!Setting sfacad e∙checkai rplane mode∙checkri ngersi lentmo de∙checksc reenon∙getmaxm ediavo lume∙getmaxr ingerv olume∙getmedi avolum e∙getring ervolu me∙getscre enbrig htness∙getscre entime out∙setmedi avolum e∙setring ervolu me∙setscre enbrig htness∙setscre entime out∙togglea irplan emode!Signals trengt hfacad e 需要api level 7.∙readsig nalstr engths∙starttr acking signal streng ths∙stoptra ckings ignals trengt hs!Smsfaca de∙smsdele temess age∙smsgeta ttribu tes∙smsgetm essage byid∙smsgetm essage count∙smsgetm essage ids∙smsgetm essage s∙smsmark messag eread∙smssend!Speechr ecogni tionfa cade∙recogni zespee ch!Texttos peechf acade需要api level 4.∙ttsissp eaking∙ttsspea k!Tonegen erator facade∙generat edtmft ones!Uifacad e∙addcont extmen uitem∙addopti onsmen uitem∙clearco ntextm enu∙clearop tionsm enu∙dialogc reatea lert∙dialogc reated atepic ker∙dialogc reateh orizon talpro gress∙dialogc reatei nput∙dialogc reatep asswor d∙dialogc reates eekbar∙dialogc reates pinner progre ss∙dialogc reatet imepic ker∙dialogd ismiss∙dialogg etinpu t∙dialogg etpass word∙dialogg etresp onse∙dialogg etsele ctedit ems∙dialogs etcurr entpro gress∙dialogs etitem s∙dialogs etmaxp rogres s∙dialogs etmult ichoic eitems∙dialogs etnega tivebu ttonte xt∙dialogs etneut ralbut tontex t∙dialogs etposi tivebu ttonte xt∙dialogs etsing lechoi ceitem s∙dialogs how∙webview showWakeLoc kFacad e∙wakeLoc kAcqui reBrig ht∙wakeLoc kAcqui reDim∙wakeLoc kAcqui reFull∙wakeLoc kAcqui rePart ial∙wakeLoc kRelea seWifiFac ade∙checkWi fiStat e∙toggleW ifiSta te∙wifiDis connec t∙wifiGet Connec tionIn fo∙wifiGet ScanRe sults∙wifiLoc kAcqui reFull∙wifiLoc kAcqui reScan Only∙wifiLoc kRelea se∙wifiRea ssocia te∙wifiRec onnect∙wifiSta rtScansetresu ltbool ean设置脚本被st artact ivityf orresu lt()方法调用后返回的布尔值: setresu ltbool ean(integer resultc ode:回传给原始ac tivity的结果编码,常常是resu lt_can celed(0) 或者 result_ok(-1),boolean resultv alue)设置脚本执行的结果.每当脚本程序被starta ctivit yforre sult()方法调用时,由此产生的in tent将会包含scri pt_res ult和给定的值. setresu ltbool eanarr ay设置脚本被st artact ivityf orresu lt()方法调用后返回的布尔值数组: setresu ltbool ean(integer resultc ode:回传给原始ac tivity的结果编码,常常是resu lt_can celed(0) 或者 result_ok(-1),boolean[] resultv alue)设置脚本执行的结果.每当脚本程序被starta ctivit yforre sult()方法调用时,由此产生的in tent将会包含scri pt_res ult和给定的值.setresu ltbyte设置脚本被st artact ivityf orresu lt()方法调用后返回的字节:setresu ltbyte(integer resultc ode:回传给原始ac tivity的结果编码,常常是resu lt_can celed(0) 或者 result_ok(-1),byte resultv alue)设置脚本执行的结果.每当脚本程序被starta ctivit yforre sult()方法调用时,由此产生的in tent将会包含scri pt_res ult和给定的值. setresu ltbyte array设置脚本被st artact ivityf orresu lt()方法调用后返回的字节数组:setresu ltbyte array(integer resultc ode:回传给原始ac tivity的结果编码,常常是resu lt_can celed(0) 或者 result_ok(-1),byte[] resultv alue)设置脚本执行的结果.每当脚本程序被starta ctivit yforre sult()方法调用时,由此产生的in tent将会包含scri pt_res ult和给定的值. setresu ltchar设置脚本被st artact ivityf orresu lt()方法调用后返回的字符:setresu ltchar(integer resultc ode:回传给原始ac tivity的结果编码,常常是resu lt_can celed(0) 或者 result_ok(-1),charact er resultv alue)设置脚本执行的结果.每当脚本程序被starta ctivit yforre sult()方法调用时,由此产生的in tent将会包含scri pt_res ult和给定的值. setresu ltchar array设置脚本被st artact ivityf orresu lt()方法调用后返回的字符数组:setresu ltchar array(integer resultc ode:回传给原始ac tivity的结果编码,常常是resu lt_can celed(0) 或者 result_ok(-1),charact er[] resultv alue)设置脚本执行的结果.每当脚本程序被starta ctivit yforre sult()方法调用时,由此产生的in tent将会包含scri pt_res ult和给定的值. setresu ltdoub le设置脚本被st artact ivityf orresu lt()方法调用后返回的的双精度浮点数值:setresu ltdoub le(integer resultc ode:回传给原始ac tivity的结果编码,常常是resu lt_can celed(0) 或者 result_ok(-1),doubleresultv alue)设置脚本执行的结果.每当脚本程序被starta ctivit yforre sult()方法调用时,由此产生的in tent将会包含scri pt_res ult和给定的值.setresu ltdoub learra y设置脚本被st artact ivityf orresu lt()方法调用后返回的双精度浮点数值数组: setresu ltdoub learra y(integer resultc ode:回传给原始ac tivity的结果编码,常常是resu lt_can celed(0) 或者 result_ok(-1),double[] resultv alue)设置脚本执行的结果.每当脚本程序被starta ctivit yforre sult()方法调用时,由此产生的in tent将会包含scri pt_res ult和给定的值.setresu ltfloa t设置脚本被st artact ivityf orresu lt()方法调用后返回的的单精度浮点数值: setresu ltfloa t(integer resultc ode: 回传给原始ac tivity的结果编码,常常是resu lt_can celed(0) 或者 result_ok(-1),float resultv alue)设置脚本执行的结果.每当脚本程序被starta ctivit yforre sult()方法调用时,由此产生的in tent将会包含scri pt_res ult和给定的值.setresu ltfloa tarray设置脚本被st artact ivityf orresu lt()方法调用后返回的单精度浮点型数组: setresu ltfloa tarray(integer resultc ode: 回传给原始ac tivity的结果编码,常常是resu lt_can celed(0) 或者 result_ok(-1),float[] resultv alue)设置脚本执行的结果.每当脚本程序被starta ctivit yforre sult()方法调用时,由此产生的in tent将会包含scri pt_res ult和给定的值.setresu ltinte ger设置脚本被st artact ivityf orresu lt()方法调用后返回的整数:setresu ltinte ger(integer resultc ode: 回传给原始ac tivity的结果编码,常常是resu lt_can celed(0) 或者 result_ok(-1),integer resultv alue)设置脚本执行的结果.每当脚本程序被starta ctivit yforre sult()方法调用时,由此产生的in tent将会包含scri pt_res ult和给定的值.setresu ltinte gerarr ay设置脚本被st artact ivityf orresu lt()方法调用后返回的整型数组:setresu ltinte gerarr ay(integer resultc ode: 回传给原始ac tivity的结果编码,常常是resu lt_can celed(0) 或者 result_ok(-1),integer[] resultv alue)设置脚本执行的结果.每当脚本程序被starta ctivit yforre sult()方法调用时,由此产生的in tent将会包含scri pt_res ult和给定的值.setresu ltlong设置脚本被st artact ivityf orresu lt()方法调用后返回的长整数:setresu ltlong(integer resultc ode: 回传给原始ac tivity的结果编码,常常是resu lt_can celed(0) 或者 result_ok(-1),long resultv alue)设置脚本执行的结果.每当脚本程序被starta ctivit yforre sult()方法调用时,由此产生的in tent将会包含scri pt_res ult和给定的值.setresu ltlong array设置脚本被st artact ivityf orresu lt()方法调用后返回的长整型数组:setresu ltlong array(integer resultc ode: 回传给原始ac tivity的结果编码,常常是resu lt_can celed(0) 或者 result_ok(-1),long[] resultv alue)设置脚本执行的结果.每当脚本程序被starta ctivit yforre sult()方法调用时,由此产生的in tent将会包含scri pt_res ult和给定的值.setresu ltseri alizab le设置脚本被st artact ivityf orresu lt()方法调用后返回的可串行化的结果(seriali zable): setresu ltseri alizab le(integer resultc ode: 回传给原始ac tivity的结果编码,常常是resu lt_can celed(0) 或者 result_ok(-1),seriali zableresultv alue)设置脚本执行的结果.每当脚本程序被starta ctivit yforre sult()方法调用时,由此产生的in tent将会包含scri pt_res ult和给定的值. setresu ltshor t设置脚本被st artact ivityf orresu lt()方法调用后返回的短整数: setresu ltshor t(integer resultc ode:: 回传给原始ac tivity的结果编码,常常是resu lt_can celed(0) 或者 result_ok(-1),short resultv alue)设置脚本执行的结果.每当脚本程序被starta ctivit yforre sult()方法调用时,由此产生的in tent将会包含scri pt_res ult和给定的值. setresu ltshor tarray设置脚本被st artact ivityf orresu lt()方法调用后返回的短整型数组: setresu ltshor tarray(integer resultc ode:: 回传给原始ac tivity的结果编码,常常是resu lt_can celed(0) 或者 result_ok(-1),short[] resultv alue)设置脚本执行的结果.每当脚本程序被starta ctivit yforre sult()方法调用时,由此产生的in tent将会包含scri pt_res ult和给定的值. setresu ltstri ng设置脚本被st artact ivityf orresu lt()方法调用后返回的字符串: setresu ltstri ng(integer resultc ode: 回传给原始ac tivity的结果编码,常常是resu lt_can celed(0) 或者 result_ok(-1),stringresultv alue)设置脚本执行的结果.每当脚本程序被starta ctivit yforre sult()方法调用时,由此产生的in tent将会包含scri pt_res ult和给定的值. setresu ltstri ngarra y设置脚本被st artact ivityf orresu lt()方法调用后返回的字符串数组: setresu ltstri ngarra y(integer resultc ode: 回传给原始ac tivity的结果编码,常常是resu lt_can celed(0) 或者 result_ok(-1),string[] resultv alue)设置脚本执行的结果.每当脚本程序被starta ctivit yforre sult()方法调用时,由此产生的in tent将会包含scri pt_res ult和给定的值. cancelr epeati ng取消脚本的定时执行计划:cancelr epeati ng(stringscript)取消给定脚本所有的定时(重复)执行计划schedul eabsol ute定时执行传入的脚本,从开机后开始计时:schedul eabsol ute(stringscript:要执行的脚本,doubletime: 脚本延迟执行时间, 开机(epoch?)后延迟一定时间执行脚本,延迟的时间由此参数指定boolean wakeup[optiona l, default true]: 是否唤醒处于黑屏状态的移动设备)定时执行传入的脚本,从开机后开始计时schedul einexa ctrepe ating每隔一段端时间执行一次脚本(时间间隔不太精确)schedul einexa ctrepe ating(doubleinterva l: 两次执行之间的时间间隔,以秒为单位stringscript:要执行的脚本,boolean wakeup[optiona l, default true]: 是否唤醒处于黑屏状态的移动设备)从脚本被调用开始,每隔一段时间执行一次脚本(不是很精确),但是比sche dulere peatin g方法省电schedul erelat iv e定时执行脚本,延迟时间从方法被调用时开始计算schedul erelat ive(stringscript:要执行的脚本,doubleseconds fromno w: 从现在起,延迟一定时间执行脚本,延迟时间由此参数指定boolean wakeup[optiona l, default true]: 是否唤醒处于黑屏状态的移动设备)从脚本被调用开始,延迟数秒钟后执行脚schedul erepea ting每隔一段时间执行一次脚本(精确)schedul erepea ting(doubleinterva l: 两次执行之间的时间间隔,以秒为单位stringscript:要执行的脚本,doublefirstex ecutio ntime[optiona l]: 第一次执行脚本所需要延迟的时间,从开机(epoch?)开始计算boolean wakeup[optiona l, default true]:是否唤醒处于黑屏状态的移动设备)每隔一段时间执行一次脚本,从开机开始计算getclip board读取剪贴板中的文本getclip board()从剪贴板中读取文本。
利用jena API查询OWL本体(可以作为学习本体和jena接口的一个经典实例)2008-05-10 15:12最近在学习本体和语义网。
学习了OWL,也尝试着用了一下jena API对OWL 本体进行查询。
1.本体简介“本体”这个术语来自于哲学,它是研究世界上的各种实体以及他们是怎么关联的科学。
本体是对应用领域概念化的显示的解释说明,为某领域提供了一个共享通用的理解,从而无论是人还是应用系统之间都能够有效地进行语义上的理解和通讯。
studer认为,本体是:“共享概念模型的明确的形式化规范说明”。
这包括了4层含义:概念化(conceptualization)通过抽象出客观世界中一些现象的相关概念而得到的模型,其表示的含义独立于具体的环境状态明确(explicit)所使用的概念及使用这些概念的约束都有明确的定义形式化(formal)本体应是计算机可读的。
共享(share)知识本体中体现的是共同认可的知识,反映的是相关领域中公认的概念集,它所针对的是团体而不是个体。
本体的目标是捕获相关的领域的知识,提供对该领域知识的共同理解,确定该陋域内共同认可的词汇,并从不同层次的形式化模式上给出这些词汇和词汇之间相互关系的明确定义。
2.OWL简介2003 年7 月W3C 公布了OWL Web ontology 语言的最初工作草案,2004 年2 月10 日,OWL 正式成为W3C 推荐的标准。
OWL 和DAML + OIL 非常相近,只有一些微小的变化。
DAML + OIL 和OWL 的语义都基于描述逻辑(descriptionlogic ,DL) 。
OWL 作为W3C 推荐的标准本体表示语言,它的最大特点是关联描述逻辑, 通过对概念、概念属性及其相互间关系的描述,构成概念的复杂关系网络,这就意味着描述逻辑推理机可以推理OWL 本体。
OWL 有3 个表达能力递增的子语言:OWL Lite ,OWL DL , OWL Full[20 ] 。
Jena文档《An Introduction to RDF and the Jena RDF API》的中文版入门经典材料RDF和Jena RDF API入门________________________________________前言本文是一篇对W3C的资源描述框架(RDF)和Jena(一个Java的RDFAPI)的教程性介绍。
本文是为那些不熟悉RDF的,以及那些通过建立原形可以达到最好学习效果的,或是因为其他原因希望能快速操作Jena的程序员而写的。
我们假设读者在阅读本文前已具有一定的XML和Java知识。
如果读者在没有理解RDF数据模型的基础上就迅速进入操作阶段,往往会导致失败和失望。
然而,如果光学习数据模型又是十分枯燥乏味的,并常常会导致曲折的形而上学的难题。
更好的学习办法是在理解数据模型的同时练习操作它。
可以先学习一点数据模型再动手试一试。
然后在学习一点再试一试。
这样一来就能达到理论实践相结合的效果。
数据模型本身十分简单,所以学习过程不会太长。
RDF具有XML的语法,所以许多熟悉XML的人就会认为以XML语法的形式来思考RDF。
然而,这是不对的。
RDF应该以它数据模型的形式来被理解。
RDF数据可是用XML来表示,但是理解数据模型的重要性更在理解此语法重要性之上。
JenaAPI的一个运行例子,包括本教程中所有例子的工作源代码都可以在/semweb/下载。
________________________________________目录1.导言2.陈述Statements3.RDF写操作4.RDF读操作5.6.JenaRDF包7.操纵模型8.查询模型9.对模型的操作10.容器Containers11.关于Literals和数据类型的更多探讨12.术语表________________________________________导言资源描述框架是(RDF)是描述资源的一项标准(在技术上是W3C的推荐标准)。
Jenkins 操作手册苏州测试部目录第 1 章概述 (1)第 2 章基础篇 (3)2.1 Jenkins安装 (3)2.1.1资源下载 (3)2.1.2运行Jenkins的前提 (3)2.1.3 Jenkins启动 (3)2.1.4 Jenkins访问 (4)2.2 Jenkins基本设置 (8)2.2.1设置JDK (9)2.2.2设置ANT (9)2.2.3配置邮件信息 (10)2.3 创建任务 (10)2.4 运行并监控构建作业 (15)2.4.1主控制面板 (15)2.4.2手动构建一个任务 (15)2.4.3任务构建状态 (16)第 3 章提高篇: (18)3.1 插件管理: (18)3.1.1 FindBugs 插件设置 (18)3.1.2 Ftp插件配置 (20)3.1.3 Junit插件 (21)3.1.4通过远程访问触发 (21)3.1.5 WebLogic.Deployer (21)3.2 安全篇 (22)3.3 个性化设置 (23)第 4 章常见问题 (25)4.1 edit lock问题 (25)4.2 IOException: Unable to delete问题 (25)4.3 not recognized as a valid application type 问题 (26)第 5 章其它说明 (27)5.1 CI挑战 (28)5.2 ANT基本知识 (28)第 1 章概述1.1什么是持续集成随着软件开发复杂度的不断提高,团队开发成员间如何更好地协同工作以确保软件开发的质量已经慢慢成为开发过程中不可回避的问题。
尤其是近些年来,敏捷(Agile)在软件工程领域越来越红火,如何能再不断变化的需求中快速适应和保证软件的质量也显得尤其的重要。
持续集成正是针对这一类问题的一种软件开发实践,对于提高软件开发效率并保障软件开发质量提供了理论基础。
它倡导团队开发成员必须经常集成他们的工作,甚至每天都可能发生多次集成。
Jena 2 推理支持这节文档描述了目前在jena 2里可用的推理支持。
它包括一个大致的推理API的大纲,还包括在jena 2中提供的具体规则引擎的细节以及对RDFS和OWL推理的配置的细节。
我们在这里没有介绍所有API的细节:请参考jena2 javadoc来获得API的所有细节。
注意,这是这个文档的一个最初的版本,可能会出现一些错误以及不一致的地方,所以欢迎您的反馈。
目录:1. 推理支持概述2. 推理API3. RDFS推理机4. OWL 推理机5. DAML 支持6. The transitive reasoner7. 一般目的的规则引擎8. 扩展推理支持9. 未来推理支持概述设计Jena2 推理子系统是用来允许一系列推理引擎或reasoner被插入(be plugged into)Jena。
这样的引擎被用来获取额外的rdf 断言,这些断言是从一些带有任何可选的本体信息base rdf 以及和reasoner一起的公理和规则得到的。
这个机制的主要的应用是支持使用RDFS和OWL语言,这些语言允许从实例数据和类描述中推断出额外的事实。
然而,这种机制被设计得非常一般,特别是,它包括一个可以用于许多RDF处理或转换任务的一般的规则引擎。
我们尽量使用术语inference指获取额外信息的抽象过程,用术语reasoner来指执行任务的一个具体的代码对象。
这样的应用是任意的,所以,如果我们将像reasoning和inference engine 的术语弄混淆了,请原谅我们。
全部的推理机制可用下图来描述:应用程序一般通过使用ModelFactory获得推理机制,将一个数据集和一些reasoner联系起来来创建一个新的Model。
对新创建的Model的查询不仅返回在原始数据中出现的陈述,还将返回那些由reasoner执行的使用规则和其他推理机制得来的陈述。
正如图中所述,推理机制实际上是在Graph SPI的水平之上执行的,所以,任何不同的Model 接口都可以被构造成一个推理Graph。
JenaRDFAPI学习(二)Jena RDF API学习(二)2011-10-10 22:08:15 来源:评论:0 点击:691.写RDFJena没有读写XML形式的RDF方法.这些方法可以被用来将一个RDF模型保存到文件并在日后重新将其读回。
Tutorial4对Tutorial3做了修改,使其将此模型以RDF/XML的形式输出到标准输出流中.这个代码依然十分简单:m...1.写RDFJena没有读写XML形式的RDF方法. 这些方法可以被用来将一个RDF模型保存到文件并在日后重新将其读回。
Tutorial4对Tutorial3做了修改, 使其将此模型以RDF/XML的形式输出到标准输出流中. 这个代码依然十分简单: model.write可以带一个OutputStream的参数.// now write the model in XML form to a filemodel.write(System.out);Jena也包含了一个更加复杂的RDF/XML writer, 它可以被用携带另一个参数的write()方法所调用.// now write the model in XML form to a filemodel.write(System.out, "RDF/XML-ABBREV")Model.write(out,lang)方法中的lang参数说明了写model的语言。
预定义的值有"RDF/XML","RDF/XML-ABBREV",”N-TRIPLE”and “N3”。
默认值表示为空,指"RDF/XML"。
此writer, 也就是所谓的PrettyWriter, 利用RDF/XML缩写语法把模型写地更为紧凑. 它也能保存尽可能保留空白结点. 然而, 它并不适合来输出大的模型. 因为它的性能不可能被人们所接受. 要输出大的文件和保留空白结点, 可以用N-三元组的形式输出:// now write the model in XML form to a filemodel.write(System.out, "N-TRIPLE");2.读RDFTutorial 5 演示了如何将用RDF XML记录的陈述读入一个模型. 在此例中, 我们提供了一个小型RDF/XML形式的vcard的数据库. 下面代码会将其读入和写出. 注意: 如果要运行这个小程序, 应该把输入文件放在你的classpath所指向的目录或jar中。
gym api的使用gym API的使用是指使用Python编程语言中的gym库,该库是一个开源项目,旨在为用户提供分析和开发强化学习算法的基准环境。
gym API的使用可以帮助用户创建和管理各种强化学习场景,并提供了一套统一的接口,使得用户可以在不同的环境中测试他们的算法。
本文将一步一步地回答关于gym API的使用的问题,以帮助读者了解这个强大的工具。
1. 什么是gym API?gym API是Python中一个强化学习库,它提供了一套用于创建、使用和评估强化学习环境的接口。
它允许用户定义任务和环境,然后使用这些环境与智能体进行交互,并收集关于智能体性能的信息。
2. 如何安装gym API?要安装gym API,可以使用pip命令在终端中运行以下命令:pip install gym这将自动安装所需的所有依赖项并将gym库下载到您的Python 环境中。
3. 如何创建一个强化学习环境?使用gym API创建环境非常简单。
首先,导入gym库并实例化一个环境对象。
例如,要创建一个经典的CartPole任务环境,可以执行以下代码:pythonimport gymenv = gym.make('CartPole-v1')这将创建一个CartPole任务的环境对象,并将其分配给变量env。
4. 如何与环境进行交互?与环境进行交互是开展强化学习研究的关键。
在gym API中,通过调用env的`reset()`方法来初始化环境状态,并获得初始观测值。
然后,可以使用env的`step()`方法采取行动,并获得下一个观测值、即时奖励、完成标志和额外信息。
以下是一个交互示例,使用随机策略在CartPole环境中与智能体进行交互:pythonimport gymenv = gym.make('CartPole-v1')obs = env.reset()done = Falsewhile not done:action = env.action_space.sample()obs, reward, done, info = env.step(action)env.render()在这个例子中,我们使用env的`action_space.sample()`方法来随机选择一个行动,并通过调用env的`step()`方法执行行动。
Jena 简介一般来说,我们在Protege这样的编辑器里构建了本体,就会想在应用程序里使用它,这就需要一些开发接口。
用程序操作本体是很必要的,因为在很多情况下,我们要自动生成本体,靠人手通过Protege创建所有本体是不现实的。
Jena 是HP公司开发的这样一套API,似乎HP公司在本体这方面走得很靠前,其他大公司还在观望吗?可以这样说,Jena对应用程序就像Protege对我们,我们使用Protege操作本体,应用程序则是使用Jena来做同样的工作,当然这些应用程序还是得由我们来编写。
其实Protege本身也是在Jena的基础上开发的,你看如果Protege 的console里报异常的话,多半会和Jena有关。
最近出了一个Protege OWL API,相当于对Jena的包装,据说使用起来更方便,这个API就是Protege的OWL Plugin所使用的,相信作者经过OWL Plugin的开发以后,说这些话是有一定依据的。
题目是说用Jena处理OWL,其实Jena当然不只能处理OWL,就像Protege 除了能处理OWL外还能处理RDF(S)一样。
Jena最基本的使用是处理RDF(S),但毕竟OWL已经成为W3C的推荐标准,所以对它的支持也是大势所趋。
好了,现在来点实际的,怎样用Jena读我们用Protege创建的OWL本体呢,假设你有一个OWL本体文件(.owl),里面定义了动物类(/ont/Animal,注意这并不是一个实际存在的URL,不要试图去访问它),并且它有一些实例,现在看如下代码:OntModel m = ModelFactory.createOntologyModel();File myFile = ...;m.read(new FileInputStream(myFile), "");ResIterator iter = m.listSubjectsWithProperty(RDF.type, m.getResource("http:// /ont/Animal"));while (iter.hasNext()) {Resource animal = (Resource) iter.next();System.out.println(animal.getLocalName());}和操作RDF(S)不同,com.hp.hpl.jena.ontology.OntModel是专门处理本体(Ontology)的,它是com.hp.hpl.jena.rdf.model.Model的子接口,具有Model的全部功能,同时还有一些Model没有的功能,例如listClasses()、listObjectProperties(),因为只有在本体里才有“类”和“属性”的概念。
上面的代码很简单,从ModelFactory创建一个OntModel,从指定文件把模型读到内存里。
再下面的代码是一个例子,作用是取出模型中所有Animal的实例(Individual,也叫个体),并打印它们的名称。
要从OntModel里取实例,也可以用listIndividuals()方法,只不过你得在得到的实例中判断它们是不是Animal的实例,我觉得不如用上面这种简易查询的方式来得方便。
Jena里扩展了很多Iterator,比如ResIterator、StmtIterator和NodeIterator等等,刚开始用会觉得很别扭,好象还不如都用java标准的Iterator,不知道Jena的设计者是怎么考虑的。
要熟练掌握还是得对整个Jena 的API有全局掌握才好。
在循环里,我们得到的每个元素都是一个Resource,因为本体里的任何东西都是资源,不论你想得到Subject、Property还是Object,在Jena里实际得到的都是资源(Resource),在Jena里,Property是Resource的子接口,而Jena并没有Subject或Object接口。
(注:在OWL本体中,Subject->Property->Object组成一个三元组,例如:张小刚->父亲->张大刚;或者:绵羊多利->rdf:type->动物,rdf:type是一个特殊的属性,表示前者是后者的实例)暂时先写到这,关于在本体中引入其他本体和使用推理,下次继续。
本文简单介绍Jena(Jena 2.4),使用Protégé3.1(不是最新版本)创建一个简单的生物(Creature)本体,然后参照Jena文档中的一个例子对本体进行简单的处理,输出本体中的Class、Property等信息。
本文内容安排如下:Ø介绍JenaØ运行JenaØJena Ontology APIØ例子Ø参考资料一、介绍JenaJena由HP Labs()开发的Java开发工具包, 用于Semantic Web(语义网)中的应用程序开发;Jana是开源的,在下载的文档中有Jena的完整代码。
J ena框架主要包括:a)以RDF/XML、三元组形式读写RDF资源描述框架是(RDF)是描述资源的一项标准(在技术上是W3C的推荐标准),Jena文档中有一部分呢详细介绍了RDF和Jena RDF API,其内容包括对Jena RDF包的介绍、RDF模型的创建、读写、查询等操作,以及RDF容器等的讨论。
b)RDFS,OWL,DAML+OIL等本体的操作Jena框架包含一个本体子系统(Ontology Subsystem),它提供的API允许处理基于RDF的本体数据,也就是说,它支持OWL,DAML+OIL和RDFS。
本体API与推理子系统结合可以从特定本体中提取信息,Jena 2还提供文档管理器(OntDocumentManager)以支持对导入本体的文档管理。
c)利用数据库保存数据Jena 2允许将数据存储到硬盘中,或者是OWL文件,或者是关系数据库中。
本文处理的本体就是OWL文件读入的。
d)查询模型Jena 2提供了ARQ查询引擎,它实现SPARQL查询语言和RDQL,从而支持对模型的查询。
另外,查询引擎与关系数据库相关联,这使得查询存储在关系数据库中的本体时能够达到更高的效率。
e)基于规则的推理Jena 2支持基于规则的简单推理,其推理机制支持将推理器(inference reasoners)导入Jena,创建模型时将推理器与模型关联以实现推理。
Protégé是一个开源的本体编辑器(目前的版本是Protégé3.2),用户可以在GUI环境下创建本体或者知识库。
有一种说法是:Jena对应用程序就像Protégé对我们——我们使用Protégé操作本体,应用程序则是使用Jena来做同样的工作。
当然这些应用程序还是得由我们来编写。
二、运行Jena可以在Jena的主页(/downloads.html)下载Jena的最新版本,目前是Jena2.4版本。
Jena是Java API,所以需要Java运行环境。
本文使用的是jdk1.5.0_04和Eclipse3.2。
将下载的Jena-2.4.zip解压到任意路径,解压之后生成Jena2.4文件夹,将Jena2.4 l ib下的jar文件全部加入CLASSPATH,这样就可以在任意的Java编辑器中调用Jena AP I了。
在解压目录下有一个test.bat文件,用于配置的测试。
在控制台运行此程序,如果你的配置正确,测试将顺利完成。
G:\jade\lib\jade.jar;G:\jade\lib\iiop.jar;G:\jade\lib\commons-codec\commons-codec-1.3.jar;G:\jade\lib\javaTools.jar;G:\jade\lib\http.jar;G:\jena\lib\antlr-2.7.5.jar;G:\jena\lib\arq.ja r;G:\jena\lib\arq-extra.jar;G:\jena\lib\commons-logging-1.1.jar;G:\jena\lib\concurrent.jar;G: \jena\lib\icu4j_3_4.jar;G:\jena\lib\iri.jar;G:\jena\lib\jena.jar;G:\jena\lib\jenatest.jar;G:\jena\li b\json.jar;G:\jena\lib\junit.jar;G:\jena\lib\alog4j-1.2.12.jar;G:\jena\lib\lucene-core-2.0.0.jar; G:\jena\lib\stax-api-1.0.jar;G:\jena\lib\wstx-asl-3.0.0.jar;G:\jena\lib\xercesImpl.jar;G:\jena\li b\xml-apis.jar如果使用Eclipse,则可以通过修改工程的Java创建路径的方法导入Jena jar文件。
在Eclipse下创建Java工程,右健单击工程名字,选择“属性/Properties”,在打开的对话框中选择“Java创建路径/Java Build Path”,在右边标签中选择“库/Libraries”,之后选择“添加外部文件/Add Extenal JARs”,找到Jena2.4 lib目录下的所有jar文件并将其添加到工程。
这样就可以运行Jean文档中的例子了。
三、Jena Ontology APIJena2.4的Ontology API包含在ontology包(com.hp.hpl.jena.ontology)中,可以在目录Jena-2.4 src com hp hpl jena ontology下查看所有程序的代码,Jena本体部分的说明网页是Jena-2.4 doc ontology index.html,本部分内容以及程序的编写主要参考这两个文档。
在语义网上有很多表示本体信息的本体语言,其中表达能力最强的是OWL,OWL按复杂程度分为OWL Full、OWL DL和OWL Lite三个版本。
其他的本体语言还有RDFS、DAML+OIL。
Jena Ontology API为语义网应用程序开发者提供了一组独立于具体语言的一致编程接口。
Jena提供的接口本质上都是Java程序,也就是.java文件经过javac之后生成的.class 文件。
显然,class文件并不能提示本体创建使用的语言。