代码之家  ›  专栏  ›  技术社区  ›  StaOver

使用Jena检索owl文件数据

  •  0
  • StaOver  · 技术社区  · 9 年前

    我有以下owl文件,希望检索给定类的相关数据。

    <owl:Class rdf:about="http://purl.obolibrary.org/obo/DOID_0001">
                <rdfs:subClassOf rdf:resource="http://purl.obolibrary.org/obo/DOID_11"/>   
                <obo:IAO_11 rdf:datatype="http://www.w3.org/2001/XMLSchema#string">A def def def def.</obo:IAO_0000115> 
                <oboInOwl:hasDbXref rdf:datatype="http://www.w3.org/2001/XMLSchema#string">AA:006394</oboInOwl:hasDbXref>
                <oboInOwl:hasExactSynonym rdf:datatype="http://www.w3.org/2001/XMLSchema#string">abcde</oboInOwl:hasExactSynonym> 
                <rdfs:label rdf:datatype="http://www.w3.org/2001/XMLSchema#string">ABCDEFG</rdfs:label>
            </owl:Class>
    

    例如,我想使用以下代码检索应该为DOID_11的subClassOf,但没有成功:

    //create the reasoning model using the base
     OntModel inf = ModelFactory.createOntologyModel();
    
     // use the FileManager to find the input file
     InputStream in = FileManager.get().open(inputFileName);
     if ( in == null) {
         throw new IllegalArgumentException("File: " + inputFileName + " not found");
     }
    
     inf.read( in , "");
    
     ExtendedIterator <? > classes = inf.listClasses();
     while (classes.hasNext()) {
         OntClass essaClasse = (OntClass) classes.next();
    
         System.out.println("Classe: " + essaClasse.getLocalName());
         for (Iterator <? > i = essaClasse.listSubClasses(); i.hasNext();) {
    
             OntClass c = (OntClass) i.next();
             System.out.print("   " + c.getLocalName() + "\n");
         } // end for 
     }
    

    1 回复  |  直到 9 年前
        1
  •  0
  •   UninformedUser    9 年前

    不,你错了。本体中的语句是

    DOID_0001 rdfs:subClassOf DOID_11

    这意味着, DOID_11 是的超类 DOID_0001 反之亦然。如果你要求所有的子类 DOID_0001号 ,它实际上只是类本身作为琐碎的推理。

    使现代化

    每个类的语句都可以通过

        StmtIterator stmtIterator = inf.listStatements(essaClasse, null, (RDFNode) null);
        while(stmtIterator.hasNext()) {
            Statement st = stmtIterator.next();
            Property p = st.getPredicate();
            RDFNode o = st.getObject();
            System.out.println(p + ":" + o);
        }