2012-02-14 51 views
2

我正在爲數據庫表生成RDF。我使用Protégé爲表格生成了OWL本體。我想使用這個OWL本體,並使用Jena爲表格數據創建RDF/XML格式的RDF。我知道如何將RDF和OWL文件讀寫到內存中以生成模型,並且我知道如何使用Resource,Property,ModelFactory等類生成RDF。我無法做的是使用我生成的本體(OWL文件),併爲這些OWL類創建RDF實例。例如:使用已定義的OWL本體創建RDF

樣品OWL:

<owl:Class rdf:about="Person"/> 
<owl:Class rdf:about="Animal"/> 

<owl:DatatypeProperty rdf:about="salary"> 
    <rdfs:domain rdf:resource="Person"/> 
    <rdfs:range rdf:resource="&xsd;real"/> 
</owl:DatatypeProperty> 

所需的RDF:

<Person rdf:about="Jack"> 
    <salary>1234</salary> 
</Person> 

我能夠生成RDF是這樣的:

<rdf:Description rdf:about="Jack"> 
    <ns:salary>2004</ns:salary> 
</rdf:Description> 
+0

其實我不明白你想要什麼。你想用你的本體來創建個人嗎? – 2012-02-14 20:20:07

+0

我不知道'個人'的概念。我會檢查並回復你。謝謝。 – 2012-02-14 20:45:25

+0

在你的例子中,「傑克」是個人。另外,你究竟想要完成什麼?你似乎對RDF和OWL之間的區別有些困惑,所以也許如果你描述你想要達到的目標,我們可能會給你更多的指導信息。 – Michael 2012-02-14 20:50:32

回答

6

你需要的是一個所謂的RDB2RDF映射器。例如,嘗試D2RQ,這是一個基於Java的RDB2RDF映射器。

聲明:我是W3C RDB2RDF工作組的聯合主席,我的團隊爲D2RQ的開發作出了重大貢獻 - 還有其他各種語言的implementations也可用。

1

您希望的輸出和您現在創建的輸出之間的唯一區別是存在三元組:Jack rdf:type :Person(如果您願意,還可以定義默認名稱空間,以便您不需要XML上的ns:前綴元件)。

開始與RDF

<rdf:Description rdf:about="Jack"> 
    <ns:salary>2004</ns:salary> 
</rdf:Description> 

並添加三重Jack rdf:type Person,你就必須

<rdf:Description rdf:about="Jack"> 
    <rdf:type rdf:resource="Person"/> 
    <ns:salary>2004</ns:salary> 
</rdf:Description> 

的RDF/XML規範允許的rdf:type三元速記符號;如果該類型的URI可以縮寫爲XML名稱,則可以將其用作元素名稱。使用這種速記,你有

<ns:Person rdf:about="Jack"> 
    <ns:salary>2004</ns:salary> 
</ns:Person> 

這是你想要的輸出,除非前綴是非常重要的。如果是,那麼您只需使用PrefixMapping#setNsPrefix來設置前綴。 (Model實現PrefixMapping。)

model.setNsPrefix("", "http://yourontologies.com/thisOntology#"); 

,你會得到

<Person rdf:about="Jack"> 
    <salary>2004</salary> 
</Person> 

時序列化模型。