【问题标题】:List object properties from a instance in Jena列出 Jena 中实例的对象属性
【发布时间】:2012-06-14 17:36:55
【问题描述】:

如何列出与 Jena 中的实例关联的所有对象属性?

例如: Person 有一个名为“hasVehicle”的对象属性,它与 Vehicle

类相关联

【问题讨论】:

    标签: list jena object-properties object-property


    【解决方案1】:

    合适的耶拿方法是OntClass.listDeclaredProperties。有一些细微差别需要注意; JenaRDF frames how-to详细讲解。

    更新

    好的,我查看了您的代码示例,并阅读了您的描述,恐怕我不明白您想要做什么。我所做的是重写您的代码示例,以便它根据您在评论中的描述执行我您可能想要的操作:

    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 的所有资源,然后对于每个资源,它列出模型中链接该装备的资源,然后是那些链接的资源它列出了所有 RDF 的属性。我认为这不是一件特别有用的事情,但希望它会向您展示一些在 Jena 中遍历 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 行

    【讨论】:

    • 对不起,我是初学者,看看我的代码,现在我无法为我列出的任何实例获取对象属性,只列出数据类型属性及其值。你能给我看一个带有列表对象属性的代码吗?我只需要与我当前实例关联的实例名称。
    • 我无法在没有数据的情况下运行您的 pastebin 代码。此外,为了将来存档此问题(这是 StackOverflow 的目标之一),请将完整的可运行示例(包括数据)粘贴到问题中,而不是将其放在单独的粘贴箱中。
    • 嗨@Ian 感谢您的回答,我的档案 ProjectTest.owl 是 pastebin.com/dufPZCd9 看看例如:我有一个资源 'Etiene' 是通过名为 'executor_do_teste 的属性与实例 'Etapa Execucao 01' 的关系' 但我无法在我的代码中识别这一点。我很想念他们之间的这种联系。提前致谢
    • 感谢 Ian,这正是我想要的。我还有一个问题,如果我在数据库中有数据并想将其转换为 OWL 实例,Protégé 上有一种自动化的方法还是只创建一个类 jena 进行转换?
    • StackOverflow 的目标之一是收集和整理编程问题的好答案,以供将来参考。因此,每一页应该只有一个问题。如果您还有其他问题,请发布一个新的顶级问题。您可能会发现此其他答案可用作背景:stackoverflow.com/questions/2891459/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多