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()`方法执行行动。
Jmeter中文手册1. 简介Apache JMeter是100%纯java桌面应用程序,被设计用来测试客户端/服务器结构的软件(例如web应用程序)。
它可以用来测试包括基于静态和动态资源程序的性能,例如静态文件,Java Servlets,Java 对象,数据库,FTP 服务器等等。
JMeter可以用来在一个服务器、网络或者对象上模拟重负载来测试它的强度或者分析在不同的负载类型下的全面性能。
另外,JMeter能够通过让你们用断言创建测试脚本来验证我们的应用程序是否返回了我们期望的结果,从而帮助我们回归测试我们的程序。
为了最大的灵活性,JMeter允许我们使用正则表达式创建断言。
1.1 历史Apache软件组织的Stefano Mazzocchi是JMeter的创始人。
他编写它起初是为了测试Apache JServ的性能(一个已经被Apache Tomcat工程所替代的工程)。
我们重新设计JMeter来增强用户界面并增加功能测试的能力。
1.2 未来我们希望看到作为开发者利用它的可插入架构使JMeter的功能快速扩展。
未来发展的主要目标是在没有影响JMeter的负载测试能力的情况下尽可能使JMeter 成为最实用的回归测试工具。
2. 入门开始使用JMeter最容易的方法是首先下载最新版并且安装它。
这个版本包含所有你在构建和运行Web,FTP,JDBC,和JNDI等测试时使用需要的所有文件。
如果你想执行JDBC测试,你当然需要从供应商得到适当的JDBC驱动。
JMeter 没有提供任何JDBC驱动。
你可能需要下载的其它软件:∙BeanShell- BeanShell函数和测试元件需要∙Java Activation Framework- JavaMail需要∙Java Mail- Mail可视化,Mail Reader 和WebService(SOAP)取样器需要∙JMS- JMS 取样器需要∙General Java download page详细参见JMeter Classpath一章安装附加的jar包∙下一步, 开始使用JMeter并且参见用户手册创建一个测试计划一章使自己更加熟悉JMeter基础 (例如,添加和删除元件)。
BAPI Step by Step ExampleAbout the exampleThis BAPI reads system status for a production order from table JEST and system status text from table TJ02T此BAPI是从JEST读取生产订单系统状态和从表TJ02T中读取文本状态Step1:定义BAPI用到的结构体在此步骤里,BAPI中用到功能模块的表和参数均已在这里定义使用数据类型-结构定义以下结构:结构1:ZBAPI_ORDER_STATUS_IMPORT包含以下字段∙ORDERID Order number (Keyfield) 订单号∙SPRAS Language 语言∙ExcludeInactive - Checkbox - Exclude inactive status结构2:ZBAPISTAT:OBJNR like JEST-OBJNR∙STAT like J_STAT∙INACT like J_INACT∙TXT04 like J_TXT04∙TXT30 like J_TXT30∙OBJNR like J_OBJNRImportant note:You will have to define a structure for every parameter in the BAPI. You cannot use the same structures used in existing applications because BAPI structures are frozen when BAPIs are released and then there are restrictions on changing them.你必须为每个BAPI中的参数定义结构,当BAPI被释放后是限制更改他们的,因为bapi会被冻结,所以你不能在存在的应用中使用同一个结构ZBAPI_ORDER_STATUS_IMPORT –结构1ZBAPISTAT ---结构2第二步:写入功能模块Important notes:∙每个BAPI必须有他们自己的函数组(功能组)∙在属性tab里记住选择存取类型是Remote Enabled module,否则功能模块不能通过RFC来invoke它做为一个BAPI来使用∙输入/输出参数仅仅能被BY VALUE 对于RFC enabled的功能模块∙我们在此仅创建了一个BAPI,但你能创建相关的BAPI在同一模块池中,使得他们能共享全局信息功能模块的属性设定输入参数这里定义功能模块的输入参数为订单输入参数的结构,即是引入结构ZBAPI_ORDER_STATUS_IMPORT做为bapi_order_status_import的参照Export ParametersTablesCodeNotes:∙The subroutine SET_RETURN_MESSAGE is a standard routine used for BAPIs that use the BAPIRETURN structure∙SET_RETURN_MESSAGE子程序是在BAPI中标准的子程序用来使用BAPIRETURN 结构∙在FORM Z_BAPI_GET_ORDER_SYSTEM_STATUS里有个测试是IF 1=2,如果这测试结果为真,则信息就显示,但是这个条件永远不会为真,所以我们就不可能在BAPI里显示出这个信息,为什么要包含这个的原因是,为信息创建一个参照,因此…这时SAP标准控制方法,拷贝公司代码层面的代码GetList BAPI.∙In form Z_BAPI_GET_ORDER_SYSTEM_STATUS there is a test IF 1 = 2. If the test is true a message is displayed. The condition will obviously never be true, and we will never want to display a message in a BAPI. The reason why it is includedis, that it create a reference for the message, so that the WHERE USEDfunctionality can be used for the message. This is the SAP standard way to handle it, copied from the Company Code GetList BAPI.INCLUDE LZBAPISTATUSUXX****************************************************************** THIS FILE IS GENERATED BY THE FUNCTION LIBRARY.** NEVER CHANGE IT MANUALLY, PLEASE!*****************************************************************INCLUDE LZBAPISTATUSU02."Z_BAPI_GET_ORDER_SYSTEM_STATUSINCLUDE LZBAPISTATUSTOP - Global dataFUNCTION-POOL ZBAPISTATUS. "MESSAGE-ID Z3 Types:begin of Type_tj02t,istat like tj02t-istat,txt04 like tj02t-txt04,txt30 like tj02t-txt30,end of type_tj02t.DATA:* Declarations for TABLE parameterT_BAPISTAT like ZBAPISTAT occurs 0,G_BAPISTAT like ZBAPISTAT,* Table for object textst_tj02t type type_tj02t occurs 0,g_tj02t type type_tj02t.* Structure for return messagesDATA:BEGIN OF MESSAGE,MSGTY LIKE SY-MSGTY,MSGID LIKE SY-MSGID,MSGNO LIKE SY-MSGNO,MSGV1 LIKE SY-MSGV1,MSGV2 LIKE SY-MSGV2,MSGV3 LIKE SY-MSGV3,MSGV4 LIKE SY-MSGV4,END OF MESSAGE.INCLUDE LZBAPISTATUSF01 - Subroutines***INCLUDE LZBAPISTATUSF01 .*----------------------------------------------------------------------**&---------------------------------------------------------------------**& Form SET_RETURN_MESSAGE*&---------------------------------------------------------------------** This routine is used for setting the BAPI return message.* The routine is a standard routine for BAPIs that handles the message * structure for the BAPIRETURN structure. It has been copied from the * BAPI Company Code Getlist*----------------------------------------------------------------------** -->P_MESSAGE text* <--P_RETURN text*----------------------------------------------------------------------*form SET_RETURN_MESSAGE USING VALUE(P_MESSAGE) LIKE MESSAGECHANGING P_RETURN LIKE BAPIRETURN. CHECK NOT MESSAGE IS INITIAL.CALL FUNCTION 'BALW_BAPIRETURN_GET'EXPORTINGTYPE = P_MESSAGE-MSGTYCL = P_MESSAGE-MSGIDNUMBER = P_MESSAGE-MSGNOPAR1 = P_MESSAGE-MSGV1PAR2 = P_MESSAGE-MSGV2PAR3 = P_MESSAGE-MSGV3PAR4 = P_MESSAGE-MSGV4* LOG_NO = ' '* LOG_MSG_NO = ' 'IMPORTINGBAPIRETURN = P_RETURNEXCEPTIONSOTHERS = 1.endform. " SET_RETURN_MESSAGEFUNCTION Z_BAPI_GET_ORDER_STATUSFUNCTION z_bapi_get_order_system_status.*"----------------------------------------------------------------------*"*"Local interface:*" IMPORTING*" VALUE(I_AUFNR) TYPE AUFNR*" VALUE(I_SPRAS) TYPE SPRAS DEFAULT SY-LANGU*" VALUE(I_EXCLUDEINACTIVE) TYPE CHAR1 OPTIONAL *" EXPORTING*" VALUE(RETURN) TYPE BAPIRETURN*" TABLES*" T_BAPISTAT STRUCTURE ZBAPISTAT*"------------------------------------------------------***"Local interface:*" IMPORTING*" VALUE(I_AUFNR) TYPE AUFNR*" VALUE(I_SPRAS) TYPE SPRAS DEFAULT SY-LANGU *" VALUE(I_EXCLUDEINACTIVE) TYPE CHAR1 OPTIONAL *" EXPORTING*" VALUE(RETURN) TYPE BAPIRET2*" TABLES*" T_BAPISTAT STRUCTURE ZBAPISTATDATA:l_aufnr LIKE afko-aufnr,l_objnr LIKE jest-objnr.********************************************* Check if order exists********************************************SELECT SINGLE aufnrFROM afkoINTO l_aufnrWHERE aufnr = BAPI_ORDER_STATUS_IMPORT-orderid.IF sy-subrc NE 0.CLEAR message.message-msgty = 'E'.message-msgid = 'Z3'.message-msgno = '000'.message-msgv1 = BAPI_ORDER_STATUS_IMPORT-orderid.PERFORM set_return_message USING messageCHANGING return.IF 1 = 2.* The only reason to include this statement, that will obviously * never execute, is that it will create a referecence so that you * can find out where a particular message is being used. This * functionality is used by the BAPIs programmed by SAP MESSAGE e000(z3).ENDIF.ENDIF.CHECK return IS INITIAL.********************************************* Read order status********************************************CONCATENATE 'OR' BAPI_ORDER_STATUS_IMPORT-orderid INTO l_objnr.IF BAPI_ORDER_STATUS_IMPORT-i_excludeinactive = 'X'.SELECT objnr stat inactFROM jestINTO TABLE t_bapistatWHERE objnr = l_objnr ANDinact <> 'X'.ELSE.SELECT objnr stat inactFROM jestINTO TABLE t_bapistatWHERE objnr = l_objnr.ENDIF.IF sy-subrc <> 0.* No object status foundCLEAR message.message-msgty = 'E'.message-msgid = 'Z3'.message-msgno = '001'.message-msgv1 = BAPI_ORDER_STATUS_IMPORT-orderid.PERFORM set_return_message USING messageCHANGING return.IF 1 = 2.MESSAGE e001(z3).ENDIF.ENDIF.CHECK return IS INITIAL.********************************************* Read order status texts********************************************SELECT istat txt04 txt30FROM tj02tINTO TABLE t_tj02tFOR ALL ENTRIES IN t_bapistatWHERE istat = t_bapistat-stat ANDspras = BAPI_ORDER_STATUS_IMPORT-i_spras.SORT t_tj02t BY istat.LOOP AT t_bapistat INTO g_bapistat.READ TABLE t_tj02tWITH KEY istat = g_bapistat-stat BINARY SEARCHINTO g_tj02t.IF sy-subrc = 0.MOVE:g_tj02t-txt04 TO g_bapistat-txt04,g_tj02t-txt30 TO g_bapistat-txt30.MODIFY t_bapistat FROM g_bapistat TRANSPORTING txt04 txt30.ENDIF.ENDLOOP.ENDFUNCTION.STEP 3 - Create the API Method Using the BAPI WIZARDThe BAPI wizard is used toTo expose the remote function module as a BAPI. The wizard will generate some additional code, so the function module is a valid method of the BOR. This allows the BAPi to be called as a workflow method in addition to be called by an outside program.Note: Each functionmodule corresponds to a method in the BORGo to the Busines Object Builder SWO1.You can either create the new Object type as a subtype of an existing business object or create a new business object from scratch. In this example it would be obvious to create the Object type as a subtype of BUS2005 Production order. However, to illustrate how to create a new Object type from scratch, we will do this.In the Object/Interface type field write the name of the new Business Object: ZORDERSTAT. Press enter and fill in the additional fields necessary to create the object type.Supertype: Not relevant because we are creating our object from scratch Program. This is the name of the program where the wizard generates code for the Object type, NOT the function module we craeted earlier. The program name must not be the name of an existinbg program.Press enter and create the new business object. Note that when you create the business object a standard interface, an attribute ObjectType and the methods ExistenceCheck and Display are automatically generated. These cannot be changed !The next step is to add the Z_BAPI_GET_ORDER_STATUS method to the business object. Select Utillities -> API methods -> Add method and write the name of the functionmodule in the dialogbox. Next the dialogbox show below will be shown. This is the start screen of the BAPI wizard. Proceed with wizardby pressing the button.After you have finished the wizard, tyou will notice that the ZGetOrderStatus has been added to the business object:You can doubleclick on the method to see its properties. To use the business object you must change the Object type status to Implemented. Use menu Edit->Change releases status->Object type->To implemented. No you can test thge object (Press F8).Note that the BAPI wizard has added a wrapper class for the function module so it can be sued as method in the business object. Choose menuGoto->Program to display the program:***** Implementation of object type ZORDERSTAT*****INCLUDE <OBJECT>.BEGIN_DATA OBJECT. " Do not change.. DATA is generated* only private members may be inserted into structure privateDATA:" begin of private," to declare private attributes remove comments and" insert private attributes here ..." end of private,KEY LIKE SWOTOBJID-OBJKEY.END_DATA OBJECT. " Do not change.. DATA is generatedBEGIN_METHOD ZGETORDERSTATUS CHANGING CONTAINER. DATA:BAPIORDERSTATUSIMPORT LIKEZBAPI_ORDER_STATUS_IMPORT,RETURN LIKE BAPIRETURN,TBAPISTAT LIKE ZBAPISTAT OCCURS 0.SWC_GET_ELEMENT CONTAINER 'BapiOrderStatusImport'BAPIORDERSTATUSIMPORT.SWC_GET_TABLE CONTAINER 'TBapistat' TBAPISTAT.CALL FUNCTION 'Z_BAPI_GET_ORDER_STATUS'EXPORTINGBAPI_ORDER_STATUS_IMPORT = BAPIORDERSTATUSIMPORT IMPORTINGRETURN = RETURNTABLEST_BAPISTAT = TBAPISTATEXCEPTIONSOTHERS = 01.CASE SY-SUBRC.WHEN 0. " OKWHEN OTHERS. " to be implementedENDCASE.SWC_SET_ELEMENT CONTAINER 'Return' RETURN.SWC_SET_TABLE CONTAINER 'TBapistat' TBAPISTAT.END_METHOD.STEP 4 - Final stepsWhen the Business object has been checked and the documentation created, the following steps must be carried out:∙Release the BAPI function module (in the Function Builder).∙Release the business object type (in the BOR ObjectType -> Change release status to -> Implemented ).∙Release the BAPI as a method in the BOR (Release the methods you has created - Set the cursor on the method thenEdit -> Change release status -> Object type component -> To released )∙For potential write BAPIs: Release the IDoc and its segmentsYou can now display the BAPI in the BAPI Explorer:。
python操作jenkinsapi的基础用法如何使用Python操作jenkinsapiJenkins是一个用于自动化构建和测试软件项目的开源工具。
jenkinsapi 是一个用于与Jenkins进行交互的Python库。
它使我们能够使用Python 脚本执行各种Jenkins操作,例如创建、启动和监视构建,获取构建信息和日志等。
在本文中,我们将逐步介绍如何使用jenkinsapi进行基本的Jenkins操作。
第一步:安装jenkinsapi库在开始之前,我们首先需要安装jenkinsapi库。
可以使用pip来安装它,打开终端并执行以下命令:pip install jenkinsapi第二步:连接到Jenkins服务器在我们开始使用jenkinsapi进行Jenkins操作之前,我们需要连接到Jenkins服务器。
首先,我们需要获取Jenkins的URL和凭据。
以下是连接到Jenkins服务器的示例代码:pythonfrom jenkinsapi.jenkins import Jenkinsjenkins_url = ' # Jenkins的URLusername = 'your_username' # Jenkins的用户名password = 'your_password' # Jenkins的密码jenkins = Jenkins(jenkins_url, username, password)请确保替换上述代码中的`jenkins_url`,`username`和`password`变量为您的Jenkins的URL、用户名和密码。
第三步:获取Jenkins的基本信息在我们连接到Jenkins服务器后,我们可以执行各种操作。
让我们首先获取Jenkins的一些基本信息,例如版本号、节点列表等。
以下是获取Jenkins 的基本信息的示例代码:pythonprint(f"Jenkins Version: {jenkins.version}")print(f"Total Executors: {jenkins.get_num_executors()}")for node_name, node in jenkins.get_nodes().items():print(f"Node Name: {node_name}")上述代码中的`version`和`get_num_executors()`函数分别返回Jenkins 的版本号和可用的执行器数。
中国航信研发中心文档E-Build基础API用户手册目录E-Build基础API用户手册 (1)目录 (2)前言 (4)1. 综述 (5)2. 航班信息查询 (6)2.1. 的座位可利用情况显示AV (6)2.2. 航班时刻显示SK (9)2.3. 航班经停点及起降时间的显示FF (12)2.4. 显示航班飞行时间DSG (13)2.5. 票价查询FD (15)2.6. 提取旅客名单的多种选择法ML (17)3. 旅客订座记录 (20)3.1. 预定成人单人单程PNR (20)3.2. 预订成人往返单程PNR (24)3.3. 订成人缺口程PNR (26)3.4. 订取含不定期航段的PNR (29)3.5. 订取成人加儿童的PNR (31)3.6. 订取成人带婴儿的PNR (33)3.7. 预定团队PNR (46)3.8. 订取国际成人单程PNR (50)3.9. 订取国际成人加儿童单程PNR (53)3.10. 订取国际成人加婴儿单程PNR (56)3.11. 订取成人单程含运价PNR (60)3.12. 预订成人往返程含运价PNR (64)3.13. 预订成人缺口含运价PNR (71)3.14. 预订成人含不定期航段含运价PNR (75)3.15. 预订成人加儿童含运价PNR (78)3.16. 成人加婴儿含运价的PNR (84)订座常见错误信息和异常 (88)4. PNR提取 (90)4.1. 根据PNR编号提取PNR (90)4.2. 基本PNR信息 (93)4.3. 提取旅客组 (94)4.4. 提取航段组 (95)4.5. 提取联系组 (97)4.6. 提取出票组 (98)4.7. 提取特殊服务组 (99)4.8. 提取OSI (101)4.9. 提取运价信息 (102)4.10. 提取REMARK (104)4.11. 提取票号组 (105)4.12. 提取责任组 (107)5. PNR修改 (109)5.1. 删除订座记录 (109)5.2. 删除指定编号的组 (110)5.3. 为PNR添加新组 (111)5.4. 航班改期 (112)5.5. 修改出票组 (113)5.6. 分离PNR (114)5.7. 座位再确认 (116)5.8. 团队票添加旅客姓名 (118)5.9. 团队票删除旅客姓名 (119)5.10. 团队票减少座位 (120)6. PATA运价查询 (122)6.1. 查询PATA运价 (122)6.2. 查询PAT公布运价 (129)7. 电子客票出票/废票 (131)7.1. 电子客票的出票(ETDZ:) (131)7.2. 提取电子客票记录 (132)7.3. 电子客票出票重试(ETRY:) (139)7.4. 电子客票废票(VT:) (142)7.5. 电子客票挂起(TSS:) (144)8. 电子客票非全屏模式生成修改打印退票单指令(TRFD:) (146)8.1. TRFD指令创建/查看/打印退票单(非全屏模式) (146)8.2. TRFD提交退票单修改或删除退票单(非全屏模式) (147)9. 国际票查询 (150)9.1. 通过PNR显示公布运价结果QTE (150)9.2. 查询汇率XS FSC (155)9.3. 国际运价计算XS FSP (158)10. 信箱处理 (170)10.1. 察看Office Q的状态。
基于Jena 的仿真模型的云端交互Cloud interaction of simulation model based on Jena姜智慧1,陆剑峰1,余 涛2JIANG Zhi-hui 1, LU Jian-feng 1, YU Tao 2(1.同济大学 电子与信息工程学院CIMS 研究中心,上海 201804;2.智能云科信息科技有限公司,上海 200090)摘 要:在云制造领域,要实现仿真云服务,必须要解决仿真模型的交互、传输问题。
云端仿真数据可以通过RDF文件进行传递,研究基于Jena API的RDF文件解析方法,为仿真模型的交互问题提供一种解决思路。
并以Plant Simulation仿真平台为基础,给出了将解析RDF文件后得到的模型信息自动构建成仿真模型的实例。
关键词:Jena;RDF;PlantSimulation;仿真模型交互;仿真云服务中图分类号:TP391.9 文献标识码:A 文章编号:1009-0134(2016)11-0025-03收稿日期:2016-07-23作者简介:姜智慧(1992 -),男,浙江杭州人,硕士研究生,主要从事先进过程控制方面的研究。
0 引言云制造是一种利用网络和云制造服务平台,按用户需求组织网上制造资源,为用户提供各类按需制造服务的一种网络化制造新模式[1]。
云制造模式下,所有能封装和虚拟化的都作为制造云服务,如:制造资源即服务、制造能力即服务、制造知识即服务等[2]。
它利用信息技术和网络化技术实现制造资源的高度共享,为产品提供高附加值、低成本和全球化制造的服务[3],即用户可以通过云服务平台按照自己的需求寻找所需的制造资源[4]。
在产品制造全生命周期的各类活动中,云制造更加重视和强调所需的其他服务[5],如仿真即服务(SimaaS )。
仿真一直是制造过程中不可缺少的技术与工具[6],云制造对仿真提出了新的需求,即实现云仿真新模式[7]。
作为一种仿真云服务,如何解决仿真模型的云端传递问题是仿真技术人员迫切需要解决的问题。
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文件并不能提示本体创建使用的语言。