Список свойств объекта из экземпляра в Йене

Как я могу перечислить все свойства объекта, связанные с экземпляром в Йене?

Например: Человек имеет свойство объекта под названием hasVehicle, которое связано с классом Транспортное средство.


person Leandro    schedule 11.06.2012    source источник


Ответы (1)


Подходящий метод Йены - OntClass.listDeclaredProperties. Следует помнить о некоторых нюансах; Подробно объясняется RDF-фреймы в Йене.

Обновить

Хорошо, я просмотрел ваш образец кода, прочитал ваше описание и, боюсь, я не понимаю, что вы хотите сделать. Что я сделал, так это переписал ваш образец кода, чтобы он делал то, что, как я предполагаю, может вам понадобиться, исходя из вашего описания в комментарии:

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 свойства. Я не думаю, что это особенно полезно, но, надеюсь, он покажет вам некоторые шаблоны для обхода графов 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, и попробовать
  • укажите код и данные в вопросе, не связанные с pastebin
  • потратьте некоторое время, чтобы уменьшить код и данные до минимальной формы, необходимой для отображения проблемы: ваш файл Protégé имел длину более 600 строк
person Ian Dickinson    schedule 11.06.2012
comment
Извините, я новичок, посмотрите мой код, теперь я не могу получить свойство объекта для любого экземпляра, который я перечисляю, просто перечислите свойство типа данных и их значения. Можете ли вы показать мне код со свойством объекта списка? Мне просто нужно имя экземпляра, связанного с моим текущим экземпляром в for. - person Leandro; 12.06.2012
comment
Я не могу запустить ваш код pastebin без данных. Кроме того, чтобы заархивировать этот вопрос на будущее (что является одной из целей StackOverflow), пожалуйста, вставьте в вопрос полный исполняемый пример (включая данные), а не помещайте его в отдельный pastebin. - person Ian Dickinson; 12.06.2012
comment
Привет, @Ian, спасибо за ответ, мой архив ProjectTest.owl - это pastebin.com/dufPZCd9, например, у меня есть ресурс «Etiene» был связан с экземпляром «Etapa Execucao 01» через свойство под названием «executor_do_teste», но я не могу идентифицировать это в моем коде. Я скучаю по этой связи между ними. заранее спасибо - person Leandro; 12.06.2012
comment
Спасибо, Ян, именно этого я и хотел. У меня есть еще один вопрос: если у меня есть данные в базе данных и я хочу преобразовать их в экземпляры OWL, есть ли автоматический способ на Protégé или только создание класса jena для преобразования? - person Leandro; 13.06.2012
comment
Одна из целей StackOverflow - собирать и курировать хорошие ответы на вопросы по программированию для использования в будущем. Поэтому на каждой странице должен быть только один вопрос. Если у вас возникла другая проблема, опубликуйте новый вопрос верхнего уровня. Другой ответ может оказаться полезным в качестве фона: stackoverflow.com/questions/2891459/ - person Ian Dickinson; 14.06.2012