Java 使用OntProperty和DatatypeProperty-Jena本体

Java 使用OntProperty和DatatypeProperty-Jena本体,java,semantics,jena,ontology,Java,Semantics,Jena,Ontology,如何使用OntProperty和/或DatatypeProperty而不仅仅是属性 通过使用属性,我是否获得了相同的表达能力?要从本体模型中获取ObjectProperty对象,请使用。同样,对于数据类型属性等,Ont类更具表现力,因为它们包含方便的API,用于通过一个方法调用获取属性的超级属性。但是,由于便利API只访问图形中的底层三元组,因此严格来说,您对ObjectProperty所做的事情与对属性所做的事情是完全不同的。这只是更难的工作 顺便说一句,Jena允许您使用.as方法访问底层R

如何使用OntProperty和/或DatatypeProperty而不仅仅是属性

通过使用属性,我是否获得了相同的表达能力?

要从本体模型中获取ObjectProperty对象,请使用。同样,对于数据类型属性等,Ont类更具表现力,因为它们包含方便的API,用于通过一个方法调用获取属性的超级属性。但是,由于便利API只访问图形中的底层三元组,因此严格来说,您对ObjectProperty所做的事情与对属性所做的事情是完全不同的。这只是更难的工作

顺便说一句,Jena允许您使用.as方法访问底层RDF资源的其他方面。因此:

    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();

正如你提到的那样,这种方法是一种方便的类似铸件的工具,可以使其成为一种特性。谢谢你,伊恩!
Property p = myModel.getProperty( "http://example.com/foo#p" );
OntProperty op = p.as( OntProperty.class );