2012-09-03 35 views
1
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?使用OntProperty和DatatypeProperty - Jena本體

通過使用屬性我得到相同數量的表現力?

回答

0

要從本體模型中獲取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); 
+0

你提到的.as()方法是一個方便的類似「鑄造」的工具,使它成爲一個OntProperty。謝謝伊恩! – daryl