N-Triples相对于CSV在存储RDF三元组方面有何优势?

3

N-Triples是一种基于行的RDF图序列化格式。每一行表示一个RDF三元组的主语、谓词、宾语,它们之间用空格分隔,并以句点结尾,例如:

<http://one.example/subject1> <http://one.example/predicate1> <http://one.example/object1> . 

更多详情请见:http://www.w3.org/TR/n-triples/

但是,如果可以像使用CSV一样序列化RDF三元组,为什么需要定义这样的格式呢?

http://one.example/subject1, http://one.example/predicate1, http://one.example/object1

我甚至可以轻松扩展支持N-Quads、N-Quints等,使用CSV。相比于CSV序列化RDF三元组,N-Triples有哪些优势?


2
这可能是不相关的,因为它似乎主要基于个人观点。 然而,其主要优点可能在于使三元组的表示更像其他RDF工具中使用的表示法;例如,N-Triples内容可以注入到SPARQL查询和N3和Turtle文档中。由于人们在CSV中编码字符串等方式存在差异,定义一个新的标准意味着有一个明确的规范可供使用。 - Joshua Taylor
1个回答

7

免责声明:我是N-Triples的原始编辑者,并在Raptor http://librdf.org/raptor/中实现了它,包括原始版本和2013年版本。

这个问题有多个答案,但基本上是模棱两可。CSV无法区分类似于http://foo.com/的URI和字符串http://foo.com/之间的区别。

在CSV中

http://foo.com/,http://foo.com/,http://foo.com/

这可能是一个三元组

(URI http://foo.com/, URI http://foo.com/, URI http://foo.com/)

或者

(URI http://foo.com/, URI http://foo.com/, Literal http://foo.com/)

N-Triples 添加了 <>"" 来区分这些情况。

但是为什么区分类似于URI的文字和实际URI很重要呢?如果我可以将一个字符串解析为URI,因为它看起来像xxx://yyy,那么我可以将其视为URI。否则,我会将其视为Literal。真的有必要引入像<>这样的额外标记吗? - asmaier
4
如果作者A将RDF模型写成N-Triples格式,消费者B读取该文件时,希望它与原始模型完全相同 - 整个目的是让B理解A的意图。只有在文件语法格式不会引入歧义的情况下,才能保证这一点。 - Jeen Broekstra
好的,我现在明白了。答案已被接受。 - asmaier

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接