【问题标题】:get a property value of an individual jena api获取单个jena api的属性值
【发布时间】:2013-05-21 04:43:50
【问题描述】:

我有我的班级Alert,其中包含个人

Alert_1
Alert_2
Alert_3

每个人都有属性,包含值 例如

Alert_1 : 
      hasanalyser : analyser546
      hastime: 10
      hasdatainfo: difficult

我现在可以获取所有个人,但无法获取那些(hasanalyserhastimehasdatainfo)值

这是我的代码,它可以工作。请问怎样才能得到我想要的?

owlModel = ProtegeOWL.createJenaOWLModelFromURI("file:///D:/base_connaissance.owl");

OntModel model = owlModel.getOntModel();

OWLNamedClass theAlert = owlModel.getOWLNamedClass("Alert"); 
Collection CAlerte = theAlert.getInstances(); 

int nombreAlerte =CAlerte.size(); 
String[ ] list_alerte=new String[ nombreAlerte ];
OWLIndividual[ ] idorg=(OWLIndividual[ ]) CAlerte.toArray(new OWLIndividual[ 0 ]); 
for(int j=0;j< nombreAlerte;j++){
    list_alerte[ j ]=idorg[ j ].getName();
}   

System.out.println(" le nombres des alerte est:"+nombreAlerte);
OntModel inf1 = ModelFactory.createOntologyModel();
for(int k=0;k< nombreAlerte;k++){
    System.out.println(" \n"+list_alerte[k]);      
}

这里显示我的

Alert_1
Alert_2
Alert_3

如何获取它们的属性?


更新:

感谢您的回答,它还没有工作。我现在试着按照你说的去做

    JenaOWLModel owlModel = ProtegeOWL.createJenaOWLModelFromURI("file:///D:/base_connaissance.owl");
    OntModel model = owlModel.getOntModel(); 

    ArrayList<Resource> results = new ArrayList<Resource>();

    ExtendedIterator  individuals = model.listIndividuals();
    while (individuals.hasNext()) {
        Resource individual = (Resource) individuals.next();
        results.add(individual);
    }

    for(int i = 0; i < results.size(); i++)
    {
      System.out.println("individual number " + i + " = " + results.get(i));//here it display my individual

      Individual ind = model.getIndividual(results.get(i).toString()); 
      Property hasTime = model.createProperty( "file:///D:/base_connaissance.owl#hasanalyser" );
      RDFNode time = ind.getPropertyValue( hasTime );
      System.out.println("property value of hasanalyser "+time);

最后显示我个人的所有姓名,在每个人之后显示hasanalyser NULL的属性值。

请问哪里有问题

【问题讨论】:

    标签: java jena owl protege


    【解决方案1】:

    我从您的代码中不清楚您是如何使用 Jena 模型的。被称为modelOntModel 似乎没有被使用,被称为inf1InfModel 也没有被使用。 OWLIndividual 不是 Jena 班级,而是 Protégé 班级。但是,该问题询问有关使用 Jena API 的问题,因此此答案的其余部分假定您可以获得您感兴趣的 Individuals,而不是 OWLIndividuals。

    Jena 的Individuals 有一个方法getPropertyValue,它返回个人属性的值。您应该能够执行以下操作:

    Individual alert1 = ...;
    String hasTimeURI = "...";
    Property hasTime = model.createProperty( hasTimeURI );
    RDFNode time = alert1.getPropertyValue( hasTime );
    

    您发布的附加代码正在打印 null 可能是因为该属性的 IRI 不正确。基于文件的 IRI 不是很好的标识符; URI 应该是 universal 标识符,而包含文件路径的东西几乎肯定不会是 universal。如果没有看到您的数据,我们就无法知道房产的正确 IRI 应该是多少。但是,如果您这样做,您应该能够获得足够的信息来确定属性 IRI 应该是什么。

    Individual ind = model.getIndividual(results.get(i).toString());
    // Check whether ind is null.
    System.out.println( "ind: "+ind );
    // Iterate over all the statements that have ind as subject.
    StmtIterator it = ind.ListProperties();
    while ( it.hasNext() ) {
      System.out.println( it.next() );
    }
    

    【讨论】:

      【解决方案2】:

      现在可以使用,我现在可以获取所有个人的所有属性,非常感谢,现在它不起作用的是如何添加个人并向此个人添加属性并将其插入我的“base_connaissance.owl”中,如果你能提供帮助我真的很感激这里是完整的代码女巫完美地工作。

      static JenaOWLModel owlModel ;
      public static void main(String[] args) {
      
          OntModel model;
          javax.swing.JDialog jDialog1 = new javax.swing.JDialog();       
          try{
              String ns="file:///D:/base_connaissance.owl#";
              owlModel = ProtegeOWL.createJenaOWLModelFromURI("file:///D:/base_connaissance.owl");//  crée  un modele owl  a partir du ficher owl charger
              model = owlModel.getOntModel();  
              JOptionPane.showMessageDialog(jDialog1,"chargement du fichier  effectuer avec succé","Information",JOptionPane.INFORMATION_MESSAGE);        
      
              ArrayList<Resource> results = new ArrayList<Resource>();            
              ExtendedIterator  individuals = model.listIndividuals();
              while (individuals.hasNext()) {
                  Resource individual = (Resource) individuals.next();
                  results.add(individual);
              }
              System.out.println("\n");
      
              for(int i = 0; i < results.size(); i++)
              {
              Individual ind = model.getIndividual(results.get(i).toString());
              System.out.println(""+ind);
              StmtIterator it = ind.listProperties();
      
              while ( it.hasNext()) {
                     Statement s = (Statement) it.next();    
      
                  if (s.getObject().isLiteral()) {
      
      
                      System.out.println(""+s.getLiteral().getLexicalForm().toString()+" type = "+s.getPredicate().getLocalName());
      
                      }
      
      
                  else    System.out.println(""+s.getObject().toString().substring(53)+" type = "+s.getPredicate().getLocalName());
      
      
                       }
              System.out.println("\n");
                  }
      
      
          }
          catch(Exception e){
              JOptionPane.showMessageDialog(jDialog1,
                      "error",
                      "Information",
                      JOptionPane.INFORMATION_MESSAGE);
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-04
        • 2011-12-13
        • 1970-01-01
        相关资源
        最近更新 更多