Java Jena模型中RDF资源的URI

Java Jena模型中RDF资源的URI,java,uri,rdf,jena,ontology,Java,Uri,Rdf,Jena,Ontology,当我在模型中创建资源并打印URI时,我得到了正确的名称空间。例如,URI是 http://www.somesite1.com/rdfdump/resources/resourceid-1 但是,当我将资源导出到并导入它时,会得到指向文件在磁盘中的物理位置的资源URI,例如 file:///D:/somefolder/resources/resourceid-1 我正在将com.hp.hpl.jena.rdf.model.model与com.hp.hpl.jena.ontology.OntMo

当我在模型中创建资源并打印URI时,我得到了正确的名称空间。例如,URI是

http://www.somesite1.com/rdfdump/resources/resourceid-1
但是,当我将资源导出到并导入它时,会得到指向文件在磁盘中的物理位置的资源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模型和OntModel的基本URL相同,比如说
http://www.somesite.com/...
,则无法使用检索模型中的资源

ocResource.listInstances()

尽管有资源,但它给了我0个资源

您的RDF/XML文档没有指定
XML:base
,而是使用相对URI:


文档中没有
xml:base
,因此相关URI显然是针对 从中读取模型的文件的路径。(i)在文档中仅使用绝对URI,或(ii)在文档中明确指定基数,或(iii)使用采用
base
参数的读取方法之一,例如

尽管你提到你有:

stringuri=BASE_URL+“resources/resourceid-1”;
Resource rdfResource=model.createResource(uri,ocResource);
我希望您在某个地方漏掉了
BASE\u URL
前缀(毕竟,您还没有向我们展示所有代码),并做了如下操作:

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

将模型写入磁盘的代码在哪里?此外,请出示问题中的输出(至少一个样本);我们需要看看这里的数据才能让问题有意义。非常感谢!我错误地编写了我的模型
writer.write(this.model,out,BASE\u URL),文档中说如果提到了基uri,它与路径相关。但是基本uri从未写入到模型中,或者至少在检索资源时没有考虑到它。您知道为什么OntModel和RDF模型需要有不同的基本uri吗?否则就不起作用了。@user592748我认为向writer函数提供基URI的目的是创建相对URI,以便以后可以提供(可能不同的)基URI。虽然这样做是合法的,但通常更方便的做法是忽略您可以有一个基本URI的事实,而只是在任何地方使用绝对URI。@user592748我不确定您所说的“否则它不会工作”是什么意思;这个问题没有描述那个问题。如果你能重现它,这是一个不同的问题,应该问一个新问题。模型没有基本URI;RDF图的一些序列化(例如,RDF/XML、Turtle)可以实现。它是序列化的属性,而不是模型的属性。鉴于此,我不确定你遇到了什么问题。另外,我不太清楚为什么要使用(普通)模型和OntModel。我想你需要在一个新问题中进一步描述一下你的设置。