2012-06-11 43 views

回答

5

適當Jena的方法是OntClass.listDeclaredProperties相關聯的對象性質。有一些細微差別需要注意; Jena RDF frames how-to詳細解釋。

更新

好了,我看着你的代碼示例,並閱讀你的描述,我怕我不明白你想要做什麼。我所做的是重新編寫代碼樣本,以便它的東西,我基於評論你的描述猜測你可能想,:

package test; 

import com.hp.hpl.jena.ontology.*; 
import com.hp.hpl.jena.rdf.model.*; 
import com.hp.hpl.jena.util.FileManager; 
import com.hp.hpl.jena.util.iterator.ExtendedIterator; 

public class LeandroTest 
{ 
    public static String NS = "http://www.owl-ontologies.com/TestProject.owl#"; 

    public static void main(String[] args) { 
     OntModel m = ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM, null); 
     FileManager.get().readModel(m, "./src/main/resources/project-test.owl"); 

     OntClass equipe = m.getOntClass(NS + "Equipe"); 
     OntProperty nome = m.getOntProperty(NS + "nome"); 

     for (ExtendedIterator<? extends OntResource> instances = equipe.listInstances(); instances.hasNext();) { 
      OntResource equipeInstance = instances.next(); 
      System.out.println("Equipe instance: " + equipeInstance.getProperty(nome).getString()); 

      // find out the resources that link to the instance 
      for (StmtIterator stmts = m.listStatements(null, null, equipeInstance); stmts.hasNext();) { 
       Individual ind = stmts.next().getSubject().as(Individual.class); 

       // show the properties of this individual 
       System.out.println(" " + ind.getURI()); 
       for (StmtIterator j = ind.listProperties(); j.hasNext();) { 
        Statement s = j.next(); 
        System.out.print(" " + s.getPredicate().getLocalName() + " -> "); 

        if (s.getObject().isLiteral()) { 
         System.out.println(s.getLiteral().getLexicalForm()); 
        } 
        else { 
         System.out.println(s.getObject()); 
        } 
       } 
      } 
     } 
    } 
} 

這讓下面的輸出,通過先上市所有的資源rdf:type#Equipe,然後對於每一個它列出的模型中的資源鏈接即Equipe,然後爲那些鏈接的資源列出所有的RDF屬性。我認爲這不是一件特別有用的事情,但希望它能向您展示一些在Jena中遍歷RDF圖的模式。

Equipe instance: Erica 
Equipe instance: Etiene 
    http://www.owl-ontologies.com/TestProject.owl#EtapaExecucao_01 
    EtapaExecucao_DataModificao -> 2010-03-29T10:54:05 
    caso_de_teste -> http://www.owl-ontologies.com/TestProject.owl#CasoDeTeste_01 
    EtapaExecucao_StatusTeste -> Passou 
    EtapaExecucao_Reprodutibilidade -> Sempre 
    type -> http://www.owl-ontologies.com/TestProject.owl#EtapaExecucao 
    EtapaExecucao_VersaoDefeitoSurgiu -> Release ICAMMH_01.00 
    EtapaExecucao_Severidade -> Minimo 
    EtapaExecucao_VersaoDefeitoCorrigiu -> Release ICAMMH_02.00 
    DataExecucao -> 2009-07-10T09:42:02 
    EtapaExecucao_StatusDoDefeito -> Nao sera corrigido 
    EtapaExecucao_DataSubmissao -> 2009-06-30T09:43:01 
    Tipos_Fases -> http://www.owl-ontologies.com/TestProject.owl#FaseTesteExecucao 
    EtapaExecucao_Resolucao -> Fechado 
    executor_do_teste -> http://www.owl-ontologies.com/TestProject.owl#Etiene 
    EtapaExecucao_PrioridadeCorrecao -> Normal 
Equipe instance: Fabio 
Equipe instance: Melis 

一些一般性的建議,特別是如果您有任何後續問題:

  • 具體的問題,這是非常難以回答含糊不清的問題;
  • 提供可運行代碼如果可能的話:你可以把我下面的代碼,把它放到一個代碼環境如Eclipse和嘗試
  • 提供問題的代碼和數據,而不是引擎收錄
  • 鏈接關閉
  • 需要一些時間來減少代碼和數據在必要的最小限度的形式,藉以說明問題:你的門徒新的文件超過600線長
+0

對不起,我是初學者看我的代碼,現在我無法得到我列出的任何實例的對象屬性,只列出數據類型屬性及其值。 你能告訴我一個帶有列表對象屬性的代碼嗎?我只需要與我當前實例相關聯的實例的名稱。 – Leandro

+0

對不起,查看我的代碼: http://pastebin.com/f6c0sF1F – Leandro

+0

我無法運行沒有數據的pastebin代碼。另外,爲了將這個問題歸檔到將來(這是StackOverflow的目標之一),請將完整的可運行示例(包括數據)粘貼到問題中,而不是將其放入單獨的pastebin中。 –

相關問題