我用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>
以下是从文件中读取本体的Java代码:
OntModel m = ModelFactory.createOntologyModel(OntModelSpec.RDFS_MEM);
m.read("file:flow-schema.rdf");
m.write(System.out, "RDF/XML-ABBREV", "http://flowschema/#");
答案 0 :(得分: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,则
。答案 1 :(得分:1)
您可以通过指定基本URI而不是read(String url)
来使用read(String url, String base, String lang)吗? ?
答案 2 :(得分:1)
Jena内部使用完整的URI来处理所有事情。这就是您必须在加载时指定基URI的原因。仅在写入时指定它不具有所需的效果。正如皮埃尔所说,这应该有效:
m.read("file:flow-schema.rdf", "http://flowschema/#", "RDF/XML");