-
利用推理机生成新的三元组
普通类 -
- 支持
- 批判
- 提问
- 解释
- 补充
- 删除
-
-
一、问题
往语义数据库存入相关信息时,往往存在信息缺失的情况,如A的同音字是B,那么存在B的同音字是A,如果每次存入数据时都要进行这样的显式转换显然是不经济的。
-
二、解决方案
利用pellet推理机效验三元组,并找出相关对象属性,然后推理,最后重新生成信息。
-
三、代码
- package chinese;
- import java.util.Iterator;
- import org.junit.Test;
- import org.junit.runner.RunWith;
- import org.mindswap.pellet.jena.PelletInfGraph;
- import org.mindswap.pellet.jena.PelletReasonerFactory;
- import org.springframework.test.context.ContextConfiguration;
- import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
- import bnu.edu.lcell.services.ITDBReadService;
- import bnu.edu.lcell.utils.WebDirUtil;
- import com.hp.hpl.jena.ontology.ObjectProperty;
- import com.hp.hpl.jena.ontology.OntModel;
- import com.hp.hpl.jena.query.Dataset;
- import com.hp.hpl.jena.query.ReadWrite;
- import com.hp.hpl.jena.rdf.model.Model;
- import com.hp.hpl.jena.rdf.model.ModelFactory;
- import com.hp.hpl.jena.rdf.model.Property;
- import com.hp.hpl.jena.rdf.model.RDFNode;
- import com.hp.hpl.jena.rdf.model.Resource;
- import com.hp.hpl.jena.rdf.model.Statement;
- import com.hp.hpl.jena.rdf.model.StmtIterator;
- import com.hp.hpl.jena.tdb.TDBFactory;
- import com.hp.hpl.jena.tdb.base.file.Location;
- import com.hp.hpl.jena.util.iterator.ExtendedIterator;
- import com.hp.hpl.jena.vocabulary.OWL;
- import com.hp.hpl.jena.vocabulary.RDF;
- /**
- * 推理生成新知识
- * @author : 丁国柱
- * @date : 2014-10-21 下午5:19:16
- */
- @RunWith(SpringJUnit4ClassRunner.class)
- @ContextConfiguration(locations = { "/applicationContext-resources.xml",
- "/applicationContext-security.xml" })
- public class CreateNewStatement {
- @javax.annotation.Resource
- private ITDBReadService tdbReadService;
- @Test
- public void test() {
- // System.out.println("开始记录数:" + this.tdbReadService.queryAllCount());
- WebDirUtil dirUtil = new WebDirUtil();
- Location location = new Location(dirUtil.getWebDir().replace(
- "/WebRoot", "")
- + "/lcellDB/learningcell4");
- Dataset dataset = TDBFactory.createDataset(location);
- dataset.begin(ReadWrite.WRITE);
- Model model = dataset.getDefaultModel();
- //加入测试数据
- Resource a = model.createResource("http://lcell.bnu.edu.cn#A");
- Resource b = model.createResource("http://lcell.bnu.edu.cn#B");
- Property p = model.createProperty("http://lcell.bnu.edu.cn#P");
- //增加一个对称性属性
- model.add(p, RDF.type, OWL.SymmetricProperty);
- model.add(a, p, b);
- OntModel ontModel = ModelFactory.createOntologyModel(
- PelletReasonerFactory.THE_SPEC, model);
- //如果数据有问题会报错
- ((PelletInfGraph) ontModel.getGraph()).classify(); // or prepare or
- // whatever
- //取得所有的对象属性
- ExtendedIterator<ObjectProperty> extendedIterator = ontModel
- .listObjectProperties();
- ObjectProperty objectProperty;
- for (; extendedIterator.hasNext();) {
- objectProperty = extendedIterator.next();
- StmtIterator iterator = ontModel.listStatements((Resource) null,
- objectProperty, (RDFNode) null);
- //推理获取数据
- for (; iterator.hasNext();) {
- Statement statement = iterator.next();
- System.out.println(statement.getSubject() + " "
- + statement.getPredicate() + " "
- + statement.getObject());
- }
- }
- }
- }
-
-
- 标签:
- model.createresource
- 推理
- 属性
- 数据
- null
- 利用
- objectproperty
- 问题
- http
- model.add
- 元组
- 生成
-
学习元评论 (0条)
聪明如你,不妨在这 发表你的看法与心得 ~