通俗地说,什么是 RDF 三元组?
14 回答
我认为这个问题需要分成两部分——什么是三元组,是什么让“RDF 三元组”如此特别?
首先,正如这里的大多数其他评论者已经指出的那样,三元组是“主语/谓语/宾语”形式的语句 - 即将一个对象(主语)链接到另一个对象(对象)或文字的语句,通过谓词。我们都熟悉三元组:三元组是二元关系的最小不可约表示。简而言之:电子表格是三元组的集合,例如,如果电子表格中的一列具有标题“Paul”,一行具有标题“has Sister”,并且单元格中的值为“Lisa”。这里有一个三元组:Paul(主语)有 Sister(谓语)Lisa(字面/宾语)。
RDF 三元组的特别之处在于,三元组的每个部分都有一个与之关联的 URI,因此日常声明“Mike Smith 知道 John Doe”在 RDF 中可能表示为:
uri://people#MikeSmith12 http://xmlns.com/foaf/0.1/knows uri://people#JohnDoe45
与电子表格的类比是,通过为 URI 的每个部分提供一个唯一地址,您可以为电子表格中的单元格提供其整个地址空间......所以原则上您可以粘贴每个单元格(如果以 RDF 三元组表示)将电子表格放入不同服务器上的不同文档中,并通过单个查询重新构建电子表格。
编辑: 官方文档的这一部分解决了原始问题。
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> .
RDF 文件应该向下解析为三元组列表。
三元组由主语、谓语和宾语组成。但这些实际上是什么意思?
主题就是主题。它标识了三元组正在描述的对象。
谓词定义了我们要为其赋值的对象中的数据片段。
对象是实际值。
来自:http ://www.robertprice.co.uk/robblog/archive/2004/10/What_Is_An_RDF_Triple_.shtml
关于 Adam N 的回答。我相信 OP曾问过关于社交网络数据的先前问题,所以虽然答案很好,但我将就“原始原始”问题进行澄清。(因为我觉得有责任)。
约翰 | 是朋友| 詹姆士 詹姆斯 | 是朋友| 吉尔 吉尔 | 喜欢 | 单板滑雪 单板滑雪 | 是一个| 运动
使用这样的三元组,您可以拥有一个非常灵活的数据结构。
看看朋友的朋友(FOAF)也许是一个更好的例子。
RDF 是一种语言,即用于编码和解码信息(某些上下文中的数据)的符号、句法和语义系统。
在 RDF 中,一个观察单元(数据)由一个句子表示,该句子由三个部分组成:主语、谓语、宾语。基本上,这是自然语言语音的基本结构。
用于表示参与由 RDF 表示的实体关系的实体(事物)的符号是 IRI(包括 HTTP URI)。RDF 句子的每个主语和谓语(以及可选的宾语)组件都由 IRI 表示。
句法(语法)是抽象的(意味着它可以用各种符号表示),以主语、谓语和宾语排列顺序的形式出现。
语义(最常被忽略的部分)与 RDF 语句中的主语、谓语和宾语角色的含义有关。
当您使用 HTTP URI 来表示 RDF 语句主题、谓词和(可选)对象时,您最终会得到构成 Web 的结构化数据(实体关系类型的集合)——就像您今天在万维网上一样。
当 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 的实时链接数据演示,由相关 HTTP URI 和#
基于片段标识符(索引)提供。
本文中嵌入的 RDF 语句的结果,由 nanotation 提供(在任何接受文本的地方嵌入 RDF 语句):
- 基本实体描述页面——每个语句都由一个超链接标识,该超链接解析为它的描述(主语、谓语、宾语部分)
- Deeper Faceted Browsing Page -- 通过构成数据网络或链接数据网络的超链接跟随您的鼻子进行更深入的探索和发现的替代视图。
- 嵌入语句的描述——关于特定的 RDF 语句。
这是从这篇文章中嵌入的三元组生成的可视化(使用我们的结构化数据嗅探器浏览器扩展,使用 RDF-Turtle 表示法:
请注意,它可能会变得更复杂一些。RDF 三元组也可以被认为是主题或对象,所以你可以有类似的东西: Bart -> said -> (三元组 -> 可以是 -> 对象)
我将不得不部分同意 A Pa,即使他被否决了。
背景:我是一名语言学家,拥有该学科的博士学位,我从事计算语言学方面的工作。
“......一个由三部分组成的句子:主语,谓语,宾语。基本上,这是自然语言语音的基本结构”(A Pa 引用 Kingsley Uyi Idehen 的回答)的说法是完全错误的。不仅 Kingsley 这么说,我还从许多 RDF 三元组的拥护者那里听到过。
错误的原因有很多,例如:谓词(在英语中,可以说,在许多其他自然语言中)由动词(或类似动词的事物)+宾语(可能还有其他补语)组成。英语的句法结构绝对不是Subj-Pred-Obj。
此外,并非所有英语中的自然语言句子都有宾语。特别是不及物动词,根据定义不带宾语。天气动词(除其他外)甚至不带“真实”主语(“下雨”的“它”没有参考)。另一方面,像“give”这样的双及物动词同时接受直接宾语和间接宾语。然后有像“put”这样的动词除了直接宾语之外还带有方位词,或者“tell”带有宾语和从句。更不用说附加词了,比如时间状语和方式状语。
是的,当然您可以将嵌入的子句表示为嵌入的三元组(在某种程度上,您可以将任何语句表示为三元组,我希望您已经明确表示,您不能),但我认为您不能在 RDF 中做(至少我从未见过它做过,而且似乎需要四倍)是同时拥有一个对象和一个嵌入的子句。同样,直接和间接宾语或附属语。
因此,无论 RDF 三元组的动机是什么,我希望倡导者不要再假装存在语言动机,或者三元组在任何方面都类似于自然语言语法。因为他们没有。
自从我使用 RDF 以来已经有一段时间了,但它就在这里:D
三元组是主语、谓语和宾语。
主题是唯一标识某物的 URI。例如,您的 openid 唯一标识您。
客体定义了主体和客体的关系。
谓词是主语的一些属性。例如一个名字。
鉴于此,三元组形成一个图 S->P。给定更多的三元组,图形会增长。例如,您可以将同一个人标识为一组三元组的主语,然后您可以通过该唯一主语连接所有谓词。
RDF Triple 是一个实际的表达式,它定义了一种表示对象之间关系的方式。三元组包含三个部分:主语、谓语和宾语(通常以相同的顺序编写)。谓词涉及主语和宾语。
主语----谓语--->宾语
更多有用的信息可以在以下位置找到:
可以将三元组视为一种陈述关于资源的单一“事实”的句子。首先要了解 RDF Triple,您应该知道 RDF 中的每一件事都是根据 URIhttp://www.w3.org/TR/2004/REC-rdf-concepts-20040210/#dfn-URI-reference
或空白节点定义的http://www.w3.org/TR/2004/REC-rdf-concepts-20040210/#dfn-blank-node
。
RDF 三元组由三个部分组成:- 1) 主语 2) 谓词 3) 宾语 例如:- Pranay hasCar Ferrari 这里主语是 Pranay,hasCar 是谓词,而 Ferrari 是宾语。这都是用 RDF-URI 定义的。欲了解更多信息,您可以访问:- http://www.w3.org/TR/owl-ref/
一个简单的答案可以是 RDF 三元组是使用 RDF 数据模型的一些知识的表示。该模型基于以主-谓-宾表达式的形式对资源(特别是 Web 资源 URI)进行陈述的想法。RDF 也是Web 上数据交换的标准模型。即使底层模式不同,RDF 也具有促进数据合并的特性,并且它特别支持模式随时间的演变,而无需更改所有数据使用者。我推荐这篇文章来了解如何:https ://www.w3.org/DesignIssues/RDF-XML.html
作为一名开发人员,我已经挣扎了一段时间,直到我终于理解了 RDF 及其相关内容,主要是因为我一直通过代码而不是通过数据来看待这个世界。
鉴于这是发布在 StackOverflow 上的,这里是 Java 类比,它最终让我点击:RDF 三元组是数据,就像类的方法/参数是编码一样。
所以:
- 带有包名的类是 Subject
- 这个类的一个方法是 Predicate
- 方法上的参数是对象,它们本身由类表示
- 上下文是导入语句,以避免编写类的完整规范名称
这个类比有点不成立的唯一一点是谓词也有命名空间,而方法没有。但是,当使用 Predicate 时,作为 Subject 和 Object 的类实例之间创建的整体关系反映了调用方法来做某事的想法。
基本上,RDF 之于数据就像 OO 之于编码。
三重举例说明
有一张将用户和问题联系起来的表格。
表直流:创建者 ------------------------- | 问题 | 用户 | ------------------------- | 45 | 485527 | | 44 | 485527 | | 40 | 485528 |
这在概念上可以用三个RDF 三元组来表达,例如...
<question:45> <dc:creator> <user:485527>
<question:44> <dc:creator> <user:485527>
<question:40> <dc:creator> <user:485528>
...以便将每一行转换为triple
将用户与问题相关联的行。每个三元组的一般形式可以描述为:
<Subject> <Predicate> <Object>
RDF 的一个特点是,您可以(或必须)使用URIs / IRIs来识别实体和关系。在这里找到更多。这使得每个人都可以重用已经存在的关系(谓词)并在 www中发布关于任意实体的语句。
将 SO 答案与其创建者相关的示例:
<https://stackoverflow.com/a/49066324/1485527>
<http://purl.org/dc/terms/creator>
<https://stackoverflow.com/users/1485527>
见: http ://www.w3.org/TR/2004/REC-rdf-concepts-20040210/#dfn-rdf-triple
一个 RDF 三元组包含三个组件:
- 主题,它是一个 RDF URI 引用或一个空白节点
- 谓词,它是一个 RDF URI 引用
- 对象,它是一个 RDF URI 引用、文字或空白节点
其中文字本质上是带有可选语言标签的字符串,空白节点也是字符串。URI、文字和空白节点必须来自成对不相交的集合。