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

时间:2011-06-28 19:59:46

标签: 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>

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

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

3 个答案:

答案 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");