получить значение свойства отдельного Jena API

У меня есть класс Alert, который содержит отдельные

Alert_1
Alert_2
Alert_3

и у каждого человека есть свойства, которые содержат значения, например

Alert_1 : 
      hasanalyser : analyser546
      hastime: 10
      hasdatainfo: difficult

Теперь я могу получить всех людей, но не могу получить значения (hasanalyser, hastime и 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.

в чем проблема пожалуйста


person Boss Krikou    schedule 25.05.2013    source источник


Ответы (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);
    }
}
person Boss Krikou    schedule 31.05.2013

Из вашего кода мне не ясно, как вы используете модели Jena. OntModel с именем model не используется, как и InfModel с именем inf1. OWLIndividual — это не класс Jena, а класс Protégé. Однако вопрос касается использования 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() );
}
person Joshua Taylor    schedule 26.05.2013