使用 OntProperty 和 DatatypeProperty - Jena Ontology

Posted

技术标签:

【中文标题】使用 OntProperty 和 DatatypeProperty - Jena Ontology【英文标题】:Using OntProperty and DatatypeProperty - Jena Ontology 【发布时间】:2012-08-27 23:08:04 【问题描述】:
    OntModel onto = ModelFactory.createOntologyModel(
            OntModelSpec.OWL_MEM_MICRO_RULE_INF, null );

    String inputFileName = "./src/test.xml";    

    InputStream in = FileManager.get().open(inputFileName);
    if (in == null) 
        throw new IllegalArgumentException( "File: " + inputFileName + " not found");
    

    onto.read(new InputStreamReader(in), "");        

    //ns is the namespace...
    OntClass userClass = onto.getOntClass(ns+"User");

    Individual dada = onto.createIndividual(ns+"Daryl", userClass);

    Property prefBathtub = onto.getProperty(ns+"prefersBathtub");
    Property prefBathtubWt = onto.getProperty(ns+"prefersBathtubWeight");

    dada.addLiteral(prefBathtub, true);
    dada.addLiteral(prefBathtubWt, 0.30);

    OutputStream out = new FileOutputStream("./src/test2.xml");
    onto.write( out, "RDF/XML"); // readable rdf/xml
    out.close();

如何使用 OntProperty 和/或 DatatypeProperty 而不仅仅是 Property?

通过使用属性,我可以获得相同的表现力吗?

【问题讨论】:

【参考方案1】:

要从本体模型中获取ObjectProperty 对象,请使用OntModel.getObjectProperty()。对于数据类型属性等也是如此。Ont 类在某种意义上更具表现力,因为它们包含方便的 API,例如,通过一个方法调用来获取属性的超属性。但是,由于便捷 API 仅访问图中的底层三元组,严格来说,您无法使用 ObjectProperty 做任何事情,而您无法使用 Property 做任何事情。这只是更难的工作!

顺便说一下,Jena 允许您使用 .as() 方法访问底层 RDF 资源的其他方面。所以:

Property p = myModel.getProperty( "http://example.com/foo#p" );
OntProperty op = p.as( OntProperty.class );

【讨论】:

您提到的 .as() 方法是一种方便的类似“转换”的工具,用于使其成为 OntProperty。谢谢伊恩!

以上是关于使用 OntProperty 和 DatatypeProperty - Jena Ontology的主要内容,如果未能解决你的问题,请参考以下文章

哪种 DATATYPE 更适合使用 TEXT 或 VARCHAR?

哪种 DATATYPE 更适合使用 TEXT 或 VARCHAR?

jquery ajax中的DataType vs ContentType [重复]

我们如何从 getchemaTable 中获取 Column Size 和 dataType?

JSF:-DataType 和 Action Listener 的问题

如何使用 jdbc 和 java-swing 从特定列中检索完整的 xml(DataType as XMLTYPE)