首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我无法更新本体模型。

我无法更新本体模型。
EN

Stack Overflow用户
提问于 2017-05-13 05:41:50
回答 3查看 894关注 0票数 0

我已经在Protege中制作了一个本体,并在Eclipse.My本体中导入了10个实例,我想在下面的代码中添加更多的instances.The,将实例添加到本体的现有类(名词)中。扩展后不更新本体模型,并显示相同数量的实例。

代码语言:javascript
复制
  public static void main(String[] args) throws OWLException, IOException{
  OWLOntologyManager manager = OWLManager.createOWLOntologyManager();

  File file = new File("D:\\word.owl");{  
      OntModel model=ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM_RULE_INF);
       System.out.println("Model is called successfully");
    OWLOntology ont = manager.loadOntologyFromOntologyDocument(file);
    System.out.println("Loaded ontology: " + ont);

   String SOURCE = ("D:\\word.owl");
   String NS = SOURCE;
   OntModel base = ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM_RULE_INF);
   base.read( SOURCE, "" );

OntModel inf =ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM_RULE_INF, base );

 OntClass Noun = base.getOntClass( NS + "Noun" );
 Individual jack = base.createIndividual( NS + "Jack", Noun );
 Individual Helley = base.createIndividual( NS + "Helley", Noun );  
  manager.saveOntology(ont);

 System.out.println("Number of individuals: " + ont.getIndividualsInSignature().size());

    }
  }
 }

输出

代码语言:javascript
复制
  Model is called successfully
  Loaded ontology: 
 Number of individuals: 10
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-05-16 20:59:52

这样做是可行的:

代码语言:javascript
复制
import java.io.FileWriter;
import java.io.InputStream;

import org.apache.jena.ontology.Individual;
import org.apache.jena.ontology.OntClass;
import org.apache.jena.ontology.OntModel;
import org.apache.jena.ontology.OntModelSpec;
import org.apache.jena.rdf.model.ModelFactory;
import org.apache.jena.util.FileManager;
import org.apache.jena.vocabulary.RDF;

public class Mgt {

    public static void main(String[] args) throws Exception {
        String namespace = "http://www.semanticweb.org/Word#";
        String file = "word.owl";
        OntModel jenaModel = ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM_RULE_INF);

        InputStream in = FileManager.get().open(file);
        jenaModel.read(in, null);
        OntClass Noun = jenaModel.getOntClass(namespace + "Noun");
        Individual Organization = Noun.createIndividual(namespace + "Organization");
        jenaModel.add(Organization, RDF.type, Noun);
        FileWriter out = new FileWriter("word.out.owl");
        jenaModel.getWriter("RDF/XML-ABBREV").write(jenaModel, out, namespace);
        out.close();
    }
}

请注意,命名空间与文件名无关。

票数 0
EN

Stack Overflow用户

发布于 2017-05-13 06:19:30

我不使用那个API,但我可以看到你的问题。

在代码开始时,您可以创建一个OWLOntology对象:

代码语言:javascript
复制
OWLOntology ont = manager.loadOntologyFromOntologyDocument(file);

问题是,代码中的任何地方都不会更改ont,所以当您调用下面的行时,它将只显示/保存代码开始时从文件中加载的10个个人:

代码语言:javascript
复制
manager.saveOntology(ont);

System.out.println("Number of individuals: " + ont.getIndividualsInSignature().size());

因此,要解决这个问题,您需要在使用上面的行之前以某种方式修改ont以包含新的个体。

票数 1
EN

Stack Overflow用户

发布于 2017-05-14 11:52:06

更新代码在线程"main“java.lang.NullPointerException at Mgt.main(Mgt.java:29)中给出异常

代码语言:javascript
复制
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import org.apache.jena.ontology.Individual;
import org.apache.jena.ontology.OntClass;
import org.apache.jena.ontology.OntModel;
import org.apache.jena.ontology.OntModelSpec;
import org.apache.jena.rdf.model.ModelFactory;
import org.apache.jena.util.FileManager;
public class Mgt {
static OntModel jenaModel = null;
public static void main(String[] args) throws Exception{
    String file =("D:\\word.owl");
     jenaModel = ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM_RULE_INF);

            InputStream in = FileManager.get().open(file);
            try 
            {
                jenaModel.read(in, null);
            } 
            catch (Exception e) 
            {
                e.printStackTrace();
            }
            System.out.println("Ontology " + file + " loaded.");
            OntClass Noun = jenaModel.getOntClass( "http://www.semanticweb.org/Word#Noun" );
            Individual Organization = Noun.createIndividual(file + "Organization");
            FileWriter out = null;
            try {
              // XML format - long and verbose
              out = new FileWriter( file);
              jenaModel.write( out, "RDF/XML" );

            }
            finally {
              if (out != null) {
                try {out.close();
                } catch (IOException ignore) {}
              }
            }
          }
         }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43949641

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档