获得个人jena api的房产价值

时间:2013-05-25 22:01:05

标签: java jena owl protege

我的班级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的属性值。

请问问题在哪里

2 个答案:

答案 0 :(得分: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);
    }
}

答案 1 :(得分:1)

我不清楚你的代码如何使用Jena模型。 OntModel名为model似乎未被使用,InfModel也未使用inf1OWLIndividual不是耶拿班,而是教会班。然而,问题是关于使用Jena API,因此本答案的其余部分假设您可以获得您感兴趣的Individual,而不是OWLIndividual

Jena的Individual有一个方法getPropertyValue,它返回个人的财产价值。你应该可以这样做:

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

您发布的其他代码正在打印null,可能是因为该属性的IRI不正确。基于文件的IRI不是很好的标识符; URI应该是通用标识符,包含文件路径的东西几乎肯定不会是通用。在没有看到您的数据的情况下,我们无法知道该属性的正确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() );
}