颗粒 + 传递性 + 原因 + OWL-API



我在使用 Pellet 推断传递对象属性 Similarto 时遇到问题。我有个人 A 类似于 B 和个人 B 类似于 C。我想在 OWL API 中使用 Pellet 或使用耶拿来获取单个组 A、B、C,但我无法弄清楚在 OWL API 中进行推理的代码。

我已经在OWL API中加载了本体,是否有一个示例代码来推断一组与同一传递属性相关的个体?

这个答案来自伊格纳齐奥·帕米萨诺:

如果颗粒没有当前的解决方案,我们可以编写自己的解决方案。

  • 选择您的起点,即您的第一个人传递链
  • 检索您所追求的属性的所有填充物
  • 对于每个填充物,如上一步所示检索所有填充物
  • 注意避免周期

(同时拥有集合和列表的原因是能够迭代添加元素时以可预测的方式,并保持快速遏制检查 - 以一点内存为代价)

 OWLDataFactory factory = manager.getOWLDataFactory();
            Set<OWLNamedIndividual> found= new HashSet<>(); 
            List<OWLNamedIndividual> list= new ArrayList<>();
            List<OWLNamedIndividual> SeaIcelist= new ArrayList<>();
            PrefixManager pm = new DefaultPrefixManager("http://www.semanticweb.org/SeaIceOntology#");
            OWLNamedIndividual root = factory.getOWLNamedIndividual(":thickness", pm);
            OWLObjectProperty p = factory.getOWLObjectProperty(IRI
                    .create("http://www.semanticweb.org/SeaIceOntology#similarTo")); 
            OWLReasoner r= new StructuralReasonerFactory().createNonBufferingReasoner(loadMODIS);
            found.add(root); 
            list.add(root); 

            while(i < list.size()){ 
                for(Node<OWLNamedIndividual> ind:r.getObjectPropertyValues
                        (list.get(i), (OWLObjectPropertyExpression)p)){ 
                    for(OWLNamedIndividual nind:ind){
                        if(found.add(nind)){
                            list.add(nind);
                            /* select specific individuals to the SeaIcelist */
                            for(OWLClassExpression ex : nind.getTypes(loadMODIS)) {
                                while(ex.asOWLClass().getSuperClasses(loadMODIS).iterator().hasNext()){
                                    for(OWLClassExpression cl:ex.asOWLClass().getSuperClasses(loadMODIS)) {
                                        if (cl.equals(factory.getOWLClass
                                                (IRI.create("http://www.semanticweb.org/SeaIceOntology#EarthScienceProperty"))) ){
                                            SeaIcelist.add(nind);
                                            break;
                                        }
                                    }
                                    ex = ex.asOWLClass().getSuperClasses(loadMODIS).iterator().next();
                                }
                             }
                            /* select specific individuals to the SeaIcelist */
                        }
                    }
                }
                i ++;
            }
            for (int j = 1; j < i; j ++){
                System.out.println("These are all the terms which has similar meanings." + list.get(j).toStringID());
            }
            int size = SeaIcelist.size();
            for (int j = 0; j < size; j ++){
                System.out.println("These are all the standard terms which has similar meanings." + SeaIcelist.get(j).toStringID());
            }

相关内容

  • 没有找到相关文章

最新更新