语义网对数据库中的本体实例的创建和更新

Posted on 2011-09-06 16:13  语义网博客  阅读(1006)  评论(0)    收藏  举报

语义网操作数据其实不是想象中的那么麻烦,我们所使用的JENA框架给我们提供很方便的操作方法。下面是我自己封装的一个向数据库添加本体实例和更新数据库中的本体实例的一个方法:
                public String setIndividual(String mapName, String resourceUrl,
                        Map<String, Object> data,int methodtype) {
                String result = "";
                OntClass newClass = ontModel.createClass(resourceUrl);
                Individual individual = null;
                if ( methodtype== 0) {
                        updateStart = new Date().getTime();
                        individual = ontModel.getIndividual(resourceUrl);
                        StmtIterator itertor = individual.listProperties();
                        if (data != null) {
                                Set<String> keyset = data.keySet();
                                for (String key : keyset) {
                                        while (itertor.hasNext()) {
                                                Statement sta = itertor.next();
                                                String propertyURI = sta.getPredicate().getURI();
                                                if (propertyURI.equals(mapName +key)) {
                                                        sta.remove();
                                                }
                                                break;
                                        }
                                        itertor = individual.listProperties();
                                        individual.addProperty(ontModel.getProperty(mapName + key),
                                        data.get(key).toString());
                                }
                        }
                        result = mapName;
                        updateEnd = new Date().getTime();
                        System.out.println("更新数据所用时间:"+(updateEnd-updateStart)+"ms");
                } else {
                        createStart = new Date().getTime();
                        result = mapName + new Date().getTime();
                        individual = newClass.createIndividual(result);
                        if (data != null) {
                                Set<String> keyset = data.keySet();
                                for (String key : keyset) {
                                        individual.addProperty(model.getProperty(mapName + key),
                                        data.get(key).toString());
                                }
                        }
                        createEnd = new Date().getTime();
                        System.out.println("创建所用时间:"+(createEnd-createStart)+"ms");
                }
                return result;

        }

其中methodtype是你所选择的是更新数据库还是向数据库插入数据,1为插入,0为更新。mapName是本体文件存入数据库的图名称,resourceUrl是本体实例的本地路径,Map<String,Object>是本体实例属性的键值对,装的事实例的谓语和宾语。
下面是调用上面的方法:
public void createIndividual(){
                Map<String, Object> data_set = new HashMap<String, Object>();
                String map_name="http://www.lehigh.edu/~zhp2/2004/0401/univ-bench.owl#";
                String resource_url="http://www.Department10.University0.edu/GraduateStudent";
                data_set.clear();
                data_set.put("name", "laowu");
                data_set.put("telephone", "13165656565");
                queryTest.setIndividual(map_name, resource_url, data_set,1);
                System.out.println(queryTest.setIndividual(map_name, resource_url, data_set,1));
        }
把相应的值传进去就可以了。其中的模型model和ontModel的初始化就省略了,要的朋友看已给我留言,我发给你。

博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3