当我在模型中创建资源并打印URI时,我得到了正确的命名空间。例如,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.Model
与com.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?
我注意到的一件事是,如果Jena RDF Model和OntModel都有相同的基本URL,即说http://www.somesite.com/...
,那么我无法使用
ocResource.listInstances()
尽管有资源,但它给了我0资源。
答案 0 :(得分:1)
您的RDF / XML文档未指定xml:base
,但使用相对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>
文档中没有xml:base
,因此显然正在解析相对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 );