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

标签 rdf ontology jena

我已经使用 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/

相关文章:

sparql - 如何使用 dbpedia SPARQL 从 Wikipedia 表中获取数据

java - RDF4J:解析来自端点的查询结果并将其存储为 ntriples 文件(格式错误的查询)

android - 在 Android 上使用 Protege owl 本体

rdf - 通过从 jena 中加载的本体中导入 namespace 来编写 RDF?

java - 关闭查询后获取耶拿结果集 - 用于模块化

sparql - 属性路径深度实际上在 jena sparql 中可用吗?

java - 如何使用现有本体从 XML 文件中提取 RDF 三元组?

rdf - 从dbpedia查询城市和国家

rdf - 将自定义属性添加到 JSON-LD 中的现有类型

java - 耶拿 queryParseException