2014-03-26 77 views
0

當我在模型中創建資源並打印URI時,我得到了正確的名稱空間。例如,URI是Jena模型中RDF資源的URI

http://www.somesite1.com/rdfdump/resources/resourceid-1 

然而,當我的資源導出爲RDF file (link to the file),我導入它,我得到的URI指向該文件在磁盤上的物理位置,如

file:///D:/somefolder/resources/resourceid-1 
資源

我使用com.hp.hpl.jena.rdf.model.Modelcom.hp.hpl.jena.ontology.OntModel一起使用。 RDF模型存儲資源,我使用OntModel來定義一個本體。按以下方式初始化它們。

com.hp.hpl.jena.rdf.model.Model model = ModelFactory.createDefaultModel(); 

OntModel ontModel = ModelFactory.createOntologyModel(OntModelSpec.OWL_DL_MEM, model); 

NS = "http://www.somesite2.com/ontology" 
BASE_URL = "http://www.somesite1.com/rdfdump/" 
OntClass ocResource = ontModel.createClass(NS + "#RESOURCE"); 

//read an RDF file into the model 
RDFDataMgr.read(model, file.toURI().toString()); 

這是我創建資源的方式。

String uri = BASE_URL + "resources/resourceid-1"; 
com.hp.hpl.jena.rdf.model.Resource rdfResource = model.createResource(uri, ocResource); 

能不能請指出我哪裏是我錯了,爲什麼它說我沒有得到正確的URI,當我導入文件?

有一件事我注意到,如果我有兩個耶拿RDF模型和OntModel,即說http://www.somesite.com/...,那麼我不能檢索模型中的資源使用

ocResource.listInstances() 

相同的基本URL它給我0資源儘管有資源。

+0

哪裏是將模型寫入磁盤的代碼?另外,請在問題中顯示(至少一個樣本)輸出結果;我們需要看到問題的數據是否合理。 –

回答

1

你的RDF/XML文檔不指定​​,但使用相對URI:

<rdf:RDF 
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
    xmlns:j.0="http://www.someaddress2.com/ontology#" 
    xmlns:owl="http://www.w3.org/2002/07/owl#" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema#" 
    xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" > 
    <!-- … --> 
    <rdf:Description rdf:nodeID="A1"> 
    <!-- "tag/tag/…" is relative --> 
    <rdf:_1 rdf:resource="tag/tag/rs_tagapplication-guid-5CCC6F83F6DDEE9DC69390E3767DEA4BD8BD4DCD4E9F3570A67E8F7455785C51"/> 
    <rdf:type rdf:resource="http://www.w3.org/1999/02/22-rdf-syntax-ns#Bag"/> 
    </rdf:Description> 
    <!-- … --> 
</rdf:RDF> 

有文檔中沒有​​,所以相對URI顯然正在對 解決了文件的路徑從中讀取模型。 (i)僅在文檔中使用絕對URI或(ii)在文檔中明確指定基準或(iii)使用採用base參數的讀取方法之一,例如read(model,uri,base,hintLang)

儘管你提,你這樣做:

String uri = BASE_URL + "resources/resourceid-1"; 
Resource rdfResource = model.createResource(uri, ocResource); 

我希望地方你離開了BASE_URL前綴(畢竟,你還沒有告訴我們所有的代碼)和不喜歡的東西:

String uri = "resources/resourceid-1"; 
Resource rdfResource = model.createResource(uri, ocResource); 
+0

謝謝!我錯誤地寫了我的模型'writer.write(this.model,out,BASE_URL);'和文檔說,如果提到一個基本uri,它會相對路徑。但是基本uri從未寫入模型中,或者至少在檢索資源時沒有考慮到它。 – user592748

+0

你知道爲什麼OntModel和RDF模型需要不同的基礎URI嗎?否則不起作用。 – user592748

+1

@ user592748我認爲向_writer_函數提供基礎URI的意義在於製作相對URI,以便稍後可以提供(可能不同)基本URI。雖然這樣做是合法的,但忽略這樣的事實通常會更方便:您可以擁有基本URI,並且可以隨處使用絕對URI。 –