2013-10-09 134 views
0

我已經從網上下載了一個OWL文件,我需要知道它是如何使用Jena編寫的。我可以寫簡單的RDF文檔,但我不明白要編寫OWL文檔。 OWL文件內容如下。如何創建OWL文檔

<rdf:RDF 
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
    xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" 
    xmlns:owl="http://www.w3.org/2002/07/owl#" 
    xmlns:dc="http://purl.org/dc/elements/1.1/"> 

    <!-- OWL Header Example --> 
    <owl:Ontology rdf:about="http://www.linkeddatatools.com/plants"> 
     <dc:title>The LinkedDataTools.com Example Plant Ontology</dc:title> 
     <dc:description>An example ontology written for the LinkedDataTools.com RDFS & OWL introduction tutorial</dc:description> 
    </owl:Ontology> 

    <!-- OWL Class Definition Example --> 
    <owl:Class rdf:about="http://www.linkeddatatools.com/plants#planttype"> 
     <rdfs:label>The plant type</rdfs:label> 
     <rdfs:comment>The class of plant types.</rdfs:comment> 
     <rdfs:description> Plant type description </rdfs:description> 
    </owl:Class> 
</rdf:RDF> 

回答

6

沒有區別。以RDF編碼的OWL本體只是另一個RDF文檔 - 就Jena而言,OWL語法沒有特別之處。 RDF文檔中的重要性在於其包含的三元組:這就是爲什麼您可以使用XML,海龜或N三元組編碼RDF,並且它們都是等價的 - 只是寫下相同三元組的不同方式。

一旦RDF工具將三元組加載到圖形中(即Jena中的Model),則它可以對來自owl:名稱空間的術語給出不同的解釋。

更新

OK,在這裏評論以下請求的代碼生成的輸出樣本:

package example; 

import com.hp.hpl.jena.ontology.*; 
import com.hp.hpl.jena.rdf.model.ModelFactory; 
import com.hp.hpl.jena.vocabulary.*; 

public class OWLOutputExample 
{ 
    public static final String PLANTS = "http://www.linkeddatatools.com/plants"; 

    public static void main(String[] args) { 
     new OWLOutputExample().run(); 
    } 

    public void run() { 
     OntModel m = ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM); 

     setNamespaces(m); 
     populateOntology(m); 
     writeOntology(m); 
    } 

    private void setNamespaces(OntModel m) { 
     m.setNsPrefix("owl", OWL.getURI()); 
     m.setNsPrefix("rdf", RDF.getURI()); 
     m.setNsPrefix("rdfs", RDFS.getURI()); 
     m.setNsPrefix("dc", DC_11.getURI()); 
     m.setNsPrefix("plants", PLANTS); 
    } 

    private void populateOntology(OntModel m) { 
     Ontology ont = m.createOntology(PLANTS); 
     ont.addProperty(DC_11.title, "The LinkedDataTools.com Example Plant Ontology") 
      .addProperty(DC_11.description, "An example ontology written for the " + 
               "LinkedDataTools.com RDFS & OWL introduction tutorial"); 

     OntClass plantType = m.createClass(PLANTS + "#planttype"); 
     plantType.addProperty(RDFS.label, "The plant type") 
       .addProperty(RDFS.comment, "The class of plant types."); 
    } 

    private void writeOntology(OntModel m) { 
     m.write(System.out, "RDF/XML-ABBREV"); 
    } 
} 

輸出:

<rdf:RDF 
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
    xmlns:plants="http://www.linkeddatatools.com/plants" 
    xmlns:owl="http://www.w3.org/2002/07/owl#" 
    xmlns:dc="http://purl.org/dc/elements/1.1/" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema#" 
    xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"> 
    <owl:Ontology rdf:about="http://www.linkeddatatools.com/plants"> 
    <dc:description>An example ontology written for the LinkedDataTools.com RDFS &amp; OWL introduction tutorial</dc:description> 
    <dc:title>The LinkedDataTools.com Example Plant Ontology</dc:title> 
    </owl:Ontology> 
    <owl:Class rdf:about="http://www.linkeddatatools.com/plants#planttype"> 
    <rdfs:comment>The class of plant types.</rdfs:comment> 
    <rdfs:label>The plant type</rdfs:label> 
    </owl:Class> 
</rdf:RDF> 

注意rdfs:description不是已知RDFS屬性,所以我把它排除了。

+0

我明白你在說什麼,但是我想知道的是如何在Jena上面寫OWL文檔,你能否給我編寫生成該OWL文檔的代碼。 – user360321

+0

太棒了!非常感謝你。這正是我想知道的。 如果你不介意,我還有一個問題給你。我想使用這個OWL文檔併爲我在OWL文檔中的類動態添加子類?你能告訴我一個好辦法嗎? – user360321

+1

@ user360321這真的是一個單獨的問題。不過,[這個答案](http://stackoverflow.com/a/18804302/1281433)有一些添加子類的例子。 –