什么是RDF三元组?

72

通俗易懂地说,RDF三元组是什么?


2
前几天我也有同样的问题,所以我创建了一个维基百科文章,收集了来自其他几篇文章的信息,其中它们被简要描述:https://en.wikipedia.org/wiki/Semantic_triple(注意:我自己在这个领域是外行人) - waldyrious
参见:你是在搜索为什么有人想使用RDF后才到达这篇文章的吗?无论好坏,这已超出了StackOverflow的范围。提及这个方面的内容已被投票降低或删除。以下是一篇可能更符合您期望的文章链接语义Web的发展 - dreftymac
14个回答

67

我认为这个问题需要分成两部分来解答——什么是三元组,以及什么使得“RDF三元组”如此特殊?

首先,一个三元组就是一个陈述句,它采用“主语/谓语/宾语”的形式——也就是说,通过谓语将一个对象(主语)与另一个对象(宾语)或文字连接起来。我们都很熟悉三元组:一个三元组是二元关系的最小不可约表示形式。换句话说:电子表格是三元组的集合。例如,如果你的电子表格中有一列标题为“Paul”,一行标题为“has Sister”,并且单元格中的值为“Lisa”,那么你就有了一个三元组:Paul(主语)has Sister(谓语)Lisa(宾语/文字)。

RDF三元组之所以特殊,是因为三元组的每个部分都与一个URI相关联。因此,日常陈述句“Mike Smith知道John Doe”可能在RDF中表示为:

uri://people#MikeSmith12 http://xmlns.com/foaf/0.1/knows uri://people#JohnDoe45

类比于电子表格,通过为URI的每个部分提供唯一地址,您为电子表格中的单元格提供了整个地址空间......因此,原则上,如果以RDF三元组表示,则可以将电子表格的每个单元格粘贴到不同服务器上的不同文档中,并通过单个查询重新构建电子表格。
编辑: 官方文档的这一部分回答了最初的问题。

1
@Nico Adams N-Triple是RDF三元组吗?如果是的话,我看到一些n-triples对象是字符串文字。在某些情况下,它是一个URI。 例如: http://dbpedia.org/resource/Otto_Rank http://dbpedia.org/property/birthPlace "Vienna, Austria"@en。 - vinod

35
一个RDF三元组是一个将一个对象与另一个对象相关联的语句。例如:


"gcc" "Compiles" "c" .
"gcc" "compiles" "Java" . 
"gcc" "compiles" "fortran" .
"gcc" "has a website at" <http://gcc.gnu.org/> .
"gcc" "has a mailing list at" <mailto:gcc-help@gcc.gnu.org> .
"c" "is a" "programming language" .
"c" "is documented in" <http://www.amazon.com/Programming-Language-Prentice-Hall-Software/dp/0131103628/ref=pd_bbs_sr_1?ie=UTF8&s=books&qid=1226085111&sr=8-1> .

16
很遗憾,并没有固定。我鼓励您重新阅读RDF Primer。文字只允许在对象位置使用--主语和谓语均不能是文字。主语和谓语必须是IRI,而对象可以是IRI或者文字。 - TallTed

13

11

关于Adam N.的回答,我认为O.P.之前提出了关于社交网络数据的问题,所以虽然该答案很好,但是我仅仅是想在与“真正的原始”问题相关的方面进行澄清(因为我感到有责任)。

    John | 是 | James的朋友
    James | 是 | Jill的朋友
    Jill | 喜欢 | 滑雪
    滑雪 | 是 | 运动

使用这样的三元组可以拥有一个非常灵活的数据结构。

可以参考FOAF(Friend of a friend)来获得更好的例子。


6
RDF是一种语言,即编码和解码信息(某个上下文中的数据)的符号、语法和语义系统。
在RDF中,观察单位(数据)由包含三个部分的句子表示:主语、谓语、宾语。基本上,这是自然语言语音的基本结构。
用于表示RDF所代表的实体关系中参与实体的符号是IRI(包括HTTP URI)。每个RDF句子的主语和谓语(以及可选的宾语)组件都由IRI表示。
语法(语法)是抽象的(意味着可以用各种符号表示),形式为主语、谓语和宾语排列顺序。
语义(最常被忽视的部分)是关于RDF语句中主语、谓语和宾语角色意义的全部内容。
当您使用HTTP URI来表示RDF语句的主语、谓语和(可选的)宾语时,您将得到结构化数据(实体关系类型的集合),这些数据形成了一个网络,就像您今天在万维网上看到的一样。
当RDF语句中的谓词语义既可以被机器理解,也可以被人类理解时,您就拥有了一组实体关系类型的网络,这些类型提供了强大的信息编码,是知识(推理和推断)的基础。
以下是简单RDF语句的示例:
{
    <#this>             a  schema:WebPage                          .
    <#this>  schema:about  dbpedia:Resource_Description_Framework  .
    <#this>  skos:related  <https://stackoverflow.com/questions/30742747/convert-a-statement-with-adjective-in-rdf-triple/30836089#30836089>   . 
}

我已经使用大括号来包含示例,以便本帖子成为一个基于RDF的Linked Data演示,由相对HTTP URI和基于#的片段标识符(指示性)提供支持。
嵌入在本帖子中的RDF语句的结果,由nanotation提供(在接受文本的任何地方嵌入RDF语句):
  1. 基本实体描述页面 -- 每个语句都通过超链接进行标识,以解析其描述(主语、谓语、宾语部分)
  2. 更深入的分面浏览页面 -- 另一种视图,适合通过构成数据网络或链接数据的超链接跟随您的鼻子进行更深入的探索和发现。
  3. 嵌入式语句的描述 -- 关于特定的RDF语句。
这是从本帖子嵌入的三元组生成的可视化效果(使用我们的结构化数据探测器浏览器扩展程序,使用RDF-Turtle表示法: 输入图像描述

你是如何为这篇文章生成RDF的呢?就是你提到的link1。能否告诉我一下呢?我无法为任意维基百科页面(例如https://en.wikipedia.org/wiki/Giraffe)生成这样的输出。 - mtk
我使用一种叫做nanotation的概念,在任何文本被接受的地方嵌入RDF三元组。[1] http://kidehen.blogspot.com/2014/07/nanotation.html -- 关于Nanotation。 - Kingsley Uyi Idehen

5
请注意,这可能会变得更加复杂。RDF三元组也可以被视为主语或宾语,因此您可以有类似以下的内容: Bart -> 说 -> (三元组 -> 可以是 -> 宾语)

2
这并不是严格正确的。RDF提供了一种词汇来表达具体化,以便谈论RDF三元组(https://www.w3.org/TR/2004/REC-rdf-primer-20040210/#reification)。然而,今年早些时候提出了一个有趣的RDF扩展,称为RDF*,以及一个查询语言(SPARQL*),允许*完全*实现这一点。对于任何感兴趣的人,这里有一篇论文的参考链接:http://olafhartig.de/files/Hartig_AMW2017_RDFStar.pdf - Robin Keskisarkka

4
我必须在某种程度上同意A Pa的观点,尽管他被投票否决了。
背景:我是一名语言学家,拥有博士学位,并从事计算语言学工作。
“...一个由三个部分组成的句子:主语、谓语、宾语。基本上,这是自然语言演讲的基本结构”(A Pa引用Kingsley Uyi Idehen的答案)的说法是错误的。不仅是Kingsley这么说,我听过许多RDF三元组的支持者也这么说。
这是错误的原因有很多,例如:谓词(英语中,可以说,在许多其他自然语言中)由动词(或类似动词的东西)+宾语(以及可能的其他补语)组成。 英语的句法结构绝对不是Subj-Pred-Obj。
此外,并非所有英语自然语言句子都有宾语;特别是不及物动词,根据定义不带宾语。而天气动词(等等)甚至没有“真正”的主语(“下雨”中的“它”没有参照)。另一方面,像“give”这样的双及物动词需要直接和间接宾语。然后还有像“put”这样的动词,除了直接宾语外还需要位置宾语,或者像“tell”这样的动词,需要一个宾语和一个从句。更不用说时间和方式副词等附加成分了。
当然,你可以将嵌入式子句表示为嵌入式三元组(在你已经明确的情况下,你可以表示任何语句为三元组),但我认为在RDF中不能同时具有对象和嵌入式子句(至少我从未见过,并且似乎需要四元组)。同样地,直接宾语和间接宾语,或者附加成分也是如此。
因此,无论RDF三元组的动机是什么,我希望支持者停止假装有语言学动机,或者三元组以任何方式类似于自然语言句法。 因为它们不是。

我刚刚开始接触这个,已经在谷歌上搜索了一些相关内容。大多数文章都集中讨论查询语言的语法和/或三元组的概念。但我从未看到过将文本自动解析为这些三元组的方法。 - Woodsman

3
一个简单的回答是,RDF三元组是使用RDF数据模型表示某些知识的一种形式。该模型基于对资源(特别是Web资源URI)进行主语-谓语-宾语表达的思想。RDF还是Web上数据交换的标准模型。即使底层模式不同,RDF具有促进数据合并的功能,并特别支持模式随时间演化而无需更改所有数据消费者的能力。我推荐阅读这篇文章了解如何使用:https://www.w3.org/DesignIssues/RDF-XML.html

3

我有一段时间没有涉及RDF了,但是让我来试试:D

三元组由主语、谓语和宾语组成。

主语是一个URI,可以唯一地标识某个事物。例如,你的openid可以唯一地标识你。

宾语定义了主语和宾语之间的关系。

谓语是主语的某个属性。例如,一个名字。

基于这些,三元组形成了S->P的图形。添加更多的三元组,图形会变得更大。例如,你可以将同一个人作为多个三元组的主语,并通过该唯一主语连接所有的谓语。


3
RDF三元组是定义对象间关系的一种实际表达方式。三元组包括三个部分:主语、谓语和宾语(通常按照同样的顺序书写)。谓语将主语与宾语联系起来。有关更多有用信息,请访问:http://www.w3.org/TR/rdf-concepts/

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