2010年11月24日 我好像有点明白什么是语义网了

    今天在尝试构建京剧本体的时候发现了一个问题,继而引发了一系列思考。

    第一步,打开Protege,构建一个京剧本体,构建本体时起的名字是http://OperaOntology.owl,然后创建类,对象属性以及数据类型属性。

    第二步,我创建了一个类OperaArtists,一个类是Show,一个属性agentIn,该属性用来描述演员参加了某场演出。 

    第三步,创建OperaArtists的实例,MeiLanFang和ShangXiaoYun,Show类的实例,BeijingOpera_100_Anniversary,对MeiLanFang和ShangXiaoYun两个实例分别添加对象属性,如下:

    MeiLanFang  agentIn BeijingOpera_100_Anniversary

    ShangXiaoYun agentIn BeijingOpera_100_Anniversary

    第四步,将上述本体架构以所创建的内容存盘,存盘时我选择的名字以及文件类型是:ShowRecord.owl

    第五步,当我完成以上步骤后,到我指定的存储路径看了一下,没有OperaOntology.owl这个文件,只有ShowRecord.owl一个文件。

    第六步,我打开Eclipse,创建一个Java工程,起名为QueryShowRecord,编写以下代码:

import com.hp.hpl.jena.ontology.OntDocumentManager;
import com.hp.hpl.jena.ontology.OntModel;
import com.hp.hpl.jena.query.Query;
import com.hp.hpl.jena.query.QueryExecution;
import com.hp.hpl.jena.query.QueryExecutionFactory;
import com.hp.hpl.jena.query.QueryFactory;
import com.hp.hpl.jena.query.ResultSet;
import com.hp.hpl.jena.query.ResultSetFormatter;
import com.hp.hpl.jena.rdf.model.InfModel;
import com.hp.hpl.jena.rdf.model.ModelFactory;
import com.hp.hpl.jena.reasoner.Reasoner;
import com.hp.hpl.jena.reasoner.ReasonerRegistry;


public class QueryShowRecord{
 public static void QuerySelect(String select, String where, InfModel model){
  Reasoner reasoner = ReasonerRegistry.getOWLReasoner();
  Query query = QueryFactory.create(select + where);
  InfModel inf = ModelFactory.createInfModel(reasoner, model);
  QueryExecution qe = QueryExecutionFactory.create(query, inf);
  ResultSet results = qe.execSelect();
  ResultSetFormatter.out(System.out,results,query);
 }
 
 public static void main(String args[]){  
  OntModel model = ModelFactory.createOntologyModel();
  OntDocumentManager dm = model.getDocumentManager();
  dm.addAltEntry("http://OperaOntology.owl#", "file:" + "OperaOntology.owl");
       model.read("file:e:/ontologies/OperaOntology.owl");
    
     String select = "select ?x ?agentIn ";
     String where =  "where { ?x " + "<http://OperaOntology.owl#agentIn> ?agentIn . }";
  QuerySelect(select,where,model);
  }
 }

    这是我第一次编写的代码,程序没有输出结果。

    后来我把下面这句语句更改为:

dm.addAltEntry("http://OperaOntology.owl#", "file:" + "ShowRecord.owl");

model.read("file:e:/ontologies/ShowRecord.owl");

    程序的输出结果就是我想要的了,也就是输出“所有参加了《京剧百年》演出的演员”。

   第七步,通过解决以上问题,我发现我好象有点理解了什么是语义网。当我在构建一个本体时,第一步总是输入一个网站的地址,也就是一个http网址,比如http://OperaOntology.owl,然后我在这个本体里创建的每一个类,每一个属性,每一个类下面生成的实例都有一个唯一的URI,那么所有这些全体构成了一个网站,而这些URI之间彼此都是有联系的。比如“梅兰芳 出演 《京剧百年》”,其实这就是这三个URI之间的联系,也就是说这个三元组表示了一个陈述。那么这个语义网站里其实全是三元组,我可以将这些三元组存储在文件里,也可以存储在数据库里,然后对数据库里的数据进行查询。

    在构建这个本体时,本体里有一个类是Document,而该类可以生成很多实例,那怎么对这些实例进行查询呢?


   

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值