0

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

Alert_1
Alert_2
Alert_3

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

Alert_1 : 
      hasanalyser : analyser546
      hastime: 10
      hasdatainfo: difficult

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

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

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

请问哪里有问题

4

2 回答 2

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);
    }
}
于 2013-05-31T14:58:25.150 回答
1

从您的代码中我不清楚您如何使用 Jena 模型。被OntModel调用的model似乎没有被使用,被InfModel调用的也没有inf1OWLIndividual不是耶拿班,而是门生班。但是,该问题询问有关使用 Jena API 的问题,因此该答案的其余部分假定您可以获得Individual您感兴趣的 s,而不是OWLIndividuals。

JenaIndividual有一个方法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() );
}
于 2013-05-26T19:53:44.480 回答