Rdf Jena将路径/url添加到URI

Rdf Jena将路径/url添加到URI,rdf,jena,Rdf,Jena,我刚开始与RDF和Jena合作。 我得到了一个RDF模型,我想再次读取、修改和写出它。 假设我的模型文件位于http://xyz/model.ttl并包含一个URI为“someURI”的元素。 当我这样做的时候 Model model = ModelFactory.createDefaultModel(); model.read("http://xyz/model.ttl", "", "TURTLE"); model.write(System.out, "TURTLE"); 输出中的URI从“

我刚开始与RDF和Jena合作。 我得到了一个RDF模型,我想再次读取、修改和写出它。 假设我的模型文件位于
http://xyz/model.ttl
并包含一个URI为“someURI”的元素。 当我这样做的时候

Model model = ModelFactory.createDefaultModel();
model.read("http://xyz/model.ttl", "", "TURTLE");
model.write(System.out, "TURTLE");
输出中的URI从“someURI”更改为
http://xyz/someURI
。 当我从本地文件系统读取模型时,URI变为
file://pathToFile/someURI
。 有没有办法避免这种行为并保持URI不变?

在RDF(如HTML)中,URL(/URI/IRIs)是相对于基本URL解析的,通常是源文档的URL

所以在
http://xyz/model.ttl
变为
http://xyz/someURI
,然后从文件中获取
file://pathToFile/someURI

您可以通过提供一个显式的基来避免这种情况,这将使生成的URL在源之间保持一致

model.read("http://xyz/model.ttl", "http://xyz/model.ttl", "TURTLE");
// or with same result
model.read(fileSource, "http://xyz/model.ttl", "TURTLE");
并将结果相对化:

model.write(System.out, "TURTLE", "http://xyz/model.ttl");
(文档说明基本参数和lang参数被切换为and,这似乎很奇怪)

在RDF(如HTML)中,URL(/URI/IRIs)是相对于基本URL解析的,通常是源文档的URL

所以在
http://xyz/model.ttl
变为
http://xyz/someURI
,然后从文件中获取
file://pathToFile/someURI

您可以通过提供一个显式的基来避免这种情况,这将使生成的URL在源之间保持一致

model.read("http://xyz/model.ttl", "http://xyz/model.ttl", "TURTLE");
// or with same result
model.read(fileSource, "http://xyz/model.ttl", "TURTLE");
并将结果相对化:

model.write(System.out, "TURTLE", "http://xyz/model.ttl");

(文档中指出,基本参数和lang参数被切换为and,这似乎有些奇怪)

关于顺序,这只是一个想法:为重载版本提供更少的参数,但参数的顺序相同,这很好。对于阅读来说,可以猜测语言,但不能猜测基础,因此语言是可选的,因此是有意义的,最终的论点也是如此。对于写作来说,不经常需要基函数(因为所有的IRI无论如何都应该是绝对的),但是lang更常用(但它也是可选的)。因此,将基作为写入的最终参数是有意义的。RDFdataMgr使用类型化常量,使读/写操作不容易出现字符串混淆。“Stringly typed”是我在这个问题上非常喜欢的一个表达式。当然,RDFdataMgr要好得多。我的IDE甚至列出了可用的选项。除了答案之外,在序列化文档中而不是在读取时显式指定基可能是一个很好的做法。起初我以为解决方案会起作用,但现在我遇到了另一个问题。我做的一切都和上面贴的一模一样。当我从终端运行jar时,我的uri现在变成
file://currentWorkingDirectory/someURI
而不是
file://pathToFile/someURI
http://xyz/someURI
关于排序,这只是一个想法:最好为重载版本提供更少的参数,但是论点的顺序是一样的。对于阅读来说,可以猜测语言,但不能猜测基础,因此语言是可选的,因此是有意义的,最终的论点也是如此。对于写作来说,不经常需要基函数(因为所有的IRI无论如何都应该是绝对的),但是lang更常用(但它也是可选的)。因此,将基作为写入的最终参数是有意义的。RDFdataMgr使用类型化常量,使读/写操作不容易出现字符串混淆。“Stringly typed”是我在这个问题上非常喜欢的一个表达式。当然,RDFdataMgr要好得多。我的IDE甚至列出了可用的选项。除了答案之外,在序列化文档中而不是在读取时显式指定基可能是一个很好的做法。起初我以为解决方案会起作用,但现在我遇到了另一个问题。我做的一切都和上面贴的一模一样。当我从终端运行jar时,我的uri现在变成
file://currentWorkingDirectory/someURI
而不是
file://pathToFile/someURI
http://xyz/someURI