我已经使用 RDFS 创建了一个本体,使用相对 URIref 来保存击键。现在,我想用 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/#");
最佳答案
您似乎已尝试在 RDF/XML 中设置基本 URI,但您使用的是 xmlns:base
,这是不正确的用法。要设置 Base URI,您必须使用 xml:base
,您所做的是定义一个额外的命名空间 base
而不是定义 Base URI。
更改您的 RDF/XML 的那部分,然后它应该可以正常工作,而不需要其他人建议的解决方法。
您当前编写的代码以不正确的 URI 结尾,因为 Jena 已经使用文件 URI 作为基础自动生成了绝对 URI。就 Jena 而言,如果 RDF 中的 URI 未被认为位于该基本 URI 下,则设置用于写入的基本 URI 无效。
注意: RDF 通常需要绝对 URI,相对 URI 是序列化的便利,可以帮助压缩语法。如果您使用相对 URI,如果语法允许,您应该始终明确指定基本 URI,如果不允许,则使用绝对 URI。
关于rdf - 从文件加载本体时如何覆盖默认前缀?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6512393/