2011-06-28 28 views
2

我用RDFS創建了一個本體,使用相對的URIrefs來保存擊鍵。現在,我想用Jena加載本體並用它來構建我的數據。但是,當我使用m.read("file:flow-schema.rdf");讀取文件並將其與m.write(System.out, "RDF/XML-ABBREV", "http://flowschema/#");一起顯示時,相對URIref的前綴爲file:flow-schema.rdf,而不是http://flowschema/#。如何更改從文件加載的本體的默認前綴?從文件加載本體時,如何覆蓋默認前綴?

這是我的本體文件:

<?xml version="1.0" ?> 
<!DOCTYPE rdf:RDF [<!ENTITY xsd "http://www.w3.org/2001/XMLSchema#">]> 
<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:base="http://flowschema/#"> 

<rdfs:Class rdf:ID="Flow" /> 
<rdf:Property rdf:ID="srcIP"> 
    <rdfs:domain rdf:resource="#Flow" /> 
    <rdfs:range rdf:resource="http://www.w3.org/2000/01/rdf-schema#Literal" /> 
</rdf:Property> 
<rdf:Property rdf:ID="dstIP"> 
    <rdfs:domain rdf:resource="#Flow" /> 
    <rdfs:range rdf:resource="http://www.w3.org/2000/01/rdf-schema#Literal" /> 
</rdf:Property> 

</rdf:RDF> 

這裏的Java代碼,從文件中讀取本體:

OntModel m = ModelFactory.createOntologyModel(OntModelSpec.RDFS_MEM); 
m.read("file:flow-schema.rdf"); 
m.write(System.out, "RDF/XML-ABBREV", "http://flowschema/#"); 

回答

5

您似乎試圖設置你的RDF/XML基礎URI,但你已經使用xmlns:base這是不正確的使用。要設置基本URI,您必須使用​​,您所做的是定義一個額外的名稱空間base,而不是定義基本URI。

更改RDF/XML的這一部分,然後它應該可以正常工作,而無需其他人建議的解決方法。

由於Jena已經使用文件URI作爲基礎自動生成絕對URI,因此您當前的寫入代碼以不正確的URI結尾。如果對於Jena而言,如果RDF中的URI不被認爲位於該基本URI之下,那麼設置用於寫入的基本URI不起作用。

注意: RDF通常需要絕對URI,相對URI是序列化的便利,可以幫助壓縮語法。如果使用相對URI,則應該總是明確指定基本URI,如果語法允許的話,並且如果不使用絕對URI。

1

耶拿在內部使用完整的URIs來處理所有事情。這就是爲什麼你必須在加載時指定基本URI。在寫入時指定它並不會產生預期的效果。正如皮埃爾說,這應該工作:

m.read("file:flow-schema.rdf", "http://flowschema/#", "RDF/XML");