gpt4 book ai didi

java - Jena 的 getLocalName 不使用 Turtle 返回数字本地名称

转载 作者:行者123 更新时间:2023-11-29 05:09:16 25 4
gpt4 key购买 nike

根据 changelog ,自 2011 年 8 月以来,Turtle RDF 序列化支持数字本地名称。在以下 Jena 代码中,getLocalName() 对 URI http://的结果www.foo.com/123456 不是 123456。这是耶拿的一个错误吗?

String turtle = "<http://www.foo.com/123456>  a  <http://www.foo.com/number>";
Model model = ModelFactory.createDefaultModel()
.read(new ByteArrayInputStream(turtle.getBytes(StandardCharsets.UTF_8)), null, "TURTLE");

Resource foo = model.listSubjects().next();
String localName = foo.getLocalName();
assert localName.equals("123456");

最佳答案

该代码不表示错误。 Turtle 序列化可能允许使用数字本地名称,但 Jena 的 getLocalName()“返回其命名空间内的此资源的名称”。这有点不规范,因为它没有说明“它的 namespace ”是什么。但是,也有一些历史背景。在早期的 RDF 标准中,从 2004 年开始,RDF/XML 是最常见的格式。鉴于此,Node_URI 中的 getLocalName() 的实现使用 Util.spltNamespace 也就不足为奇了,它基于 XML 的概念地方名。 Util.splitNamespace的文档是指找到一个NCName,这是一个XML概念:

Given an absolute URI, determine the split point between the namespace part and the localname part. If there is no valid localname part then the length of the string is returned.

The algorithm tries to find the longest NCName at the end of the uri, not immediately preceded by the first colon in the string.

@param uri
@return the index of the first character of the localname

现在,这里还有另一个可能的混淆问题,需要解决。 RDF 是一种抽象数据表示。 RDF 图(或 Jena 所称的模型)只是一组三元组。 Turtle、N3、N-Triples 和 RDF/XML 只是 RDF 的序列化格式。 Jena 模型可以以多种不同的格式进行序列化,但它不会跟踪其内容是从何种序列化格式读取的。 (实际上,您可以在根本不从任何文件中读取三元组的情况下填充模型。)这意味着即使 Jena 能够读取包含如下内容的 Turtle 文件:

@prefix : <http://example.org/>.
:12345 a :number .

模型不会知道 IRI http://www.example.org/123456 在文件中显示为 :123456。值得注意的是,正如 AndyS 在评论中指出的那样,Jena 的 Turtle 序列化识别出 IRI http://example.org/123456 可以写成 :123456,并将使用该缩短的版本。

关于java - Jena 的 getLocalName 不使用 Turtle 返回数字本地名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29263937/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com