繁体   English   中英

Jena模型中RDF资源的URI

[英]URI of an RDF resource in Jena model

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

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

但是,当我将资源导出到RDF文件(链接到文件)并导入时,我得到的资源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?

我注意到的一件事是,如果Jena RDF Model和OntModel的基本URL相同,即http://www.somesite.com/... ,那么我将无法使用

ocResource.listInstances()

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

您的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方法之一,例如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 );

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM