从文件加载本体时如何覆盖默认前缀?

Eva*_*ske 2 rdf ontology jena

我用RDFS创建了一个本体,使用相对URIrefs来保存击键.现在,我想用Jena加载本体并使用它来构建我的数据.但是,当我读入文件m.read("file:flow-schema.rdf");并显示它时m.write(System.out, "RDF/XML-ABBREV", "http://flowschema/#");,相对URIrefs的前缀是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>
Run Code Online (Sandbox Code Playgroud)

这是从文件中读取本体的Java代码:

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

Rob*_*obV 5

您似乎已尝试在RDF/XML中设置基本URI,但您使用的xmlns:base是不正确的用法.要设置必须使用的基本URI xml:base,您所做的是定义一个额外的命名空间,base而不是定义基本URI.

更改RDF/XML的那部分,然后它应该工作正常,而不需要其他人建议的解决方法.

您当前的编写代码最终会出现错误的URI,因为Jena已经使用文件URI作为基础自动生成了绝对URI.如果关注Jena,如果RDF中的URI不被认为是在该Base URI下,则设置用于写入的基本URI无效.

注意: RDF通常需要绝对URI,相对URI是一种序列化方便,可以帮助压缩语法.如果使用相对URI,则应始终明确指定Base URI(如果语法允许),如果不使用绝对URI.