RDF和OWL有什么区别?

229

我正在尝试理解语义网的概念。我很难理解RDF和OWL之间的确切区别。OWL是RDF的扩展还是这两种技术完全不同?

我试图理解语义网的概念。我发现很难理解RDF和OWL之间的具体区别。OWL是基于RDF的扩展,而不是完全不同的技术。请保留原文中的HTML标签。

1
我个人认为这份幻灯片非常有用且易于理解: http://www.slideshare.net/rlovinger/rdf-and-owl - dgorissen
我试着简短回答一下:RDF 提供了用于表征本体论的词汇的标准化,这些词汇总结在 Web Ontology Language(OWL)家族下,例如构建知识系统的本体论时。 - PlagTag
2
虽然它已经关闭很久了,但我发现答案非常令人困惑。 我从Piotr Szwed(AGH科技大学在克拉科夫)那里找到了这个问题最简单和清晰的答案:
  • 使用OWL可以指定对象关系和数据类型属性(属性)的基数
  • 可以在定义中使用逻辑运算符(例如,将类的并集用作关系的范围)
来源:https://www.researchgate.net/post/What-is-the-difference-between-RDF-Schema-and-Ontology-OWL/53bd6283d4c11835588b45fc/citation/download
- Banik
12个回答

302

语义网分为不同的层级。以下是我认为你可能感兴趣的一些层级的简要概述。

更新:请注意,RDFS 用于定义数据结构,而 不是 OWL。OWL 描述语义关系,而常规编程(如 C 结构)并不在乎这些关系,它更接近 AI 研究和集合论。

三元组 & URI

Subject - Predicate - Object

这些描述了一个事实。通常,URI用于主语和谓语。对象可以是另一个URI或文字值,例如数字或字符串。文本值可以具有类型(也是一个URI),并且它们还可以具有语言。是的,这意味着三元组可以包含多达5个数据位!

例如,一个三元组可能描述Charles是Harry的父亲这一事实。

<http://example.com/person/harry> <http://familyontology.net/1.0#hasFather> <http://example.com/person/charles> .

三元组是把数据库规范化推向逻辑极致的一种方式。它们的优点在于您可以从多个来源加载三元组到一个数据库中,无需重新配置。

RDF和RDFS

下一层是RDF - 资源描述框架。 RDF为三元组定义了一些额外的结构。 RDF定义的最重要的东西是称为“rdf:type”的谓词。这用于说明事物的某些类型。每个人都使用rdf:type使其非常有用。

RDFS(RDF模式)定义了代表主题、对象、谓词等概念的一些类。这意味着您可以开始对事物类别和关系类型进行陈述。在最简单的级别上,您可以说明像http://familyontology.net/1.0#hasFather 这样的关系是人与人之间的关系。它还允许您以可读的文本方式描述关系或类的含义。这是一个模式。它告诉您各种类别和关系的合法用途。 它还用于指示类或属性是更一般类型的子类型。例如,“HumanParent”是“Person”的子类。“Loves”是“Knows”的子类。

RDF串行化

RDF可以以多种文件格式导出。最常见的是RDF + XML,但它有一些弱点。

N3是一种非XML格式,更易于阅读,并且有一些子集(Turtle和N-Triples)更加严格。

重要的是要知道,RDF是使用三元组的方法,而不是文件格式。

XSD

XSD是一个命名空间,主要用于描述属性类型,例如日期、整数等。它通常在RDF数据中看到,用于识别文本的特定类型。它还用于XML模式,这是稍微不同的问题。

OWL

OWL为模式添加了语义。 它允许您指定有关属性和类的更多信息。 它也用三元组表示。例如,它可以表明“如果A与B结婚”,则这意味着“B与A结婚”。或者,“C是D的祖先”和“D是E的祖先”那么“C是E的祖先”。OWL添加的另一个有用功能是能够说两个事物是相同的,这对于连接不同模式中表达的数据非常有帮助。 您可以说一个模式中的关系“被生成”是某些其他模式中的“父亲”。您还可以使用它来说两个事物是相同的,例如维基百科上的“Elvis Presley”与BBC上的“Elvis Presley”是相同的。 这非常令人兴奋,因为它意味着您可以开始从多个站点(这是“链接数据”)连接数据。

您还可以使用OWL推断隐含事实,例如“C是E的祖先”。


23
这是一个语义网层次结构的图片:http://www.w3.org/2001/12/semweb-fin/swlevels.png仅供参考。 - Timo Westkämper
11
有一部分我仍然不太清楚的是,RDFS 和 OWL 可表达的内容似乎有重叠。例如,owl:Class 看起来非常类似于 rdfs:Class。(例如,类型为 owl:Class 的实体通常是多个 RDFS 谓词(如 rdfs:comment 和 rdfs:subclassOf)的主语。)我很难理解 OWL 如何是建立在 RDFS 之上的一层,因为在定义类方面,它更像是一种丰富你可以使用 RDFS 的方式。 - Ian Griffiths
4
事实上,在OWL2语义中,owl:Class和rdfs:Class(以及其他一些令人惊讶的配对)是等价的:http://answers.semanticweb.com/questions/30954/rdfs-vs-owl-vocabulary-terms-are-equivalent-classes - Vladimir Alexiev
OWL、RDFS 和 XSD 是互补的语言,每种语言都在描述您的领域中发挥着作用,并共同丰富它。 - Sergio
我并不是很喜欢这个答案。它令人困惑,因为它暗示 Linked Data 直到 OWL 才成为可能。实际上,由于使用了 RDF,Linked Data 已经开始变得可能(例如:https://en.wikipedia.org/wiki/Linked_data 中明确说明:“它建立在标准的 Web 技术(如 HTTP、RDF 和 URIs)之上。”)。数据的“连接”已经可以通过 RDF 实现了!当然,OWL 为此增加了更多的功能。 - Banik
显示剩余2条评论

94

简而言之:

  • RDF定义了如何编写内容
  • OWL定义了什么要编写的内容

正如之前的帖子所写,RDF是一个规范,告诉您如何定义三元组。

问题在于RDF允许您定义任何东西,因此您可以组成这样的声明:

| subject | predicate | object |
|---------|-----------|--------|
| Alex    | Eats      | Apples |
| Apples  | Eats      | Apples |
| Apples  | Apples    | Apples |

这些三元组构成了有效的RDF文档。

但是从语义上讲,您知道这些陈述是不正确的,而且RDF不能帮助您验证您所编写的内容。

这不是一个有效的本体论。

OWL规范精确定义了您可以使用RDF编写什么以获得有效的本体论。

本体可以具有多个属性。

这就是为什么OWL(版本1)定义了几个版本,例如OWL DL、OWL Lite、OWL Full。


31
请注意,OWL 不会限制您在 RDF 存储中可以放置的内容 - OWL 模式信息主要用于推理,而不是强制执行约束。 - DNA
此外,为了强制执行RDF和/或OWL上的约束条件,还有另一种标准/语言称为Shapes Constraint Language (SHACL) - user0221441

35
RDF、RDFS和OWL是表达越来越复杂的信息或知识的手段。它们都可以以RDF/XML语法(或其他RDF序列化语法,例如Turtle或N3)进行序列化。
这些技术是相关的,应该是可互操作的,但它们具有不同的起源,可能这就是它们之间关系难以理解的原因。选择其中一种取决于您所建模情况所需的复杂度。
表达能力总结:
RDF:直接的表示,侧重于实例及其类型的映射(rdf:type)。可以定义自定义属性来链接数据并创建三元组。RDF数据使用SPARQL查询。 以下是以Turtle序列化的RDF示例:
@prefix : <http://www.example.org/> .
:john    rdf:type           :Man .
:john    :livesIn  "New-York" .
:livesIn    rdf:type    rdf:Property .

RDFS: 有些情况仅使用RDF难以建模,例如表示更复杂的关系,如子类(类型的类型)。RDFS提供了特殊手段来表示这些情况,使用像rdfs:subClassOfrdfs:rangerdfs:domain这样的结构。理想情况下,推理器可以理解RDFS语义并根据关系扩展三元组的数量:例如,如果您有三元组John a ManMan rdfs:subClassOf Human,那么您也应该生成三元组John a Human。请注意,仅使用RDF时无法做到这一点。使用SPARQL查询RDFS数据。 以下是用Turtle格式序列化的RDFS示例:

@prefix : <http://www.example.org/> .
:john    rdf:type           :Man .
:Man    rdfs:subClassOf    :Human .
:john    :livesIn  "New-York" .
:livesIn    rdf:type    rdf:Property .
# After reasoning
:john    rdf:type    :Human .

OWL:最高的表达能力。基于描述逻辑(数学理论)可以形式化地建模类之间的关系。OWL 严重依赖推理器,可以表达复杂的构造,例如链接属性或类之间的限制。OWL 用于在 RDF 数据集的顶部构建本体或模式。由于 OWL 可以序列化为 RDF/XML,因此理论上可以通过 SPARQL 查询它,但通常使用 DL 查询(通常是标准的 OWL 类表达式)更加直观。以下是 Turtle 序列化的 OWL 构造示例。

@prefix : <http://www.example.org/> .
:livesIn    rdf:type    owl:DatatypeProperty .
:Human    rdf:type    owl:Class .
:Man   rdf:type    owl:Class .
:Man    rdfs:subClassOf    :Human .
:John    rdf:type    :Man . 
:John    rdf:type    owl:NamedIndividual .

3
子类不是“类型的类型”,那是元类。 “X是Y。 Y是Z。”与“X是Y。 Y是Z的子类”不同。 - Vladimir Alexiev

16
当你使用RDF这个术语时,你需要区分两件事情:
  1. You can refer to RDF as a concept:

    A way of describing things/logic/anything using collections of triples.

    Example:

    "Anna has apples." "Apples are healthy."

    Above you have two triples that describe two resources "Anna" and "apples". The concept of RDF (Resource Description Framework) is that you can describe resources (anything) with sets of only 3 words (terms). At this level you don't care about how you are storing information, whether you have a string of 3 words, or a painting on a wall, or a table with 3 columns etc.

    At this conceptual level the only thing that is important is that you can represent anything that you want using triple statements.

  2. You can refer to RDF as a vocabulary

    A vocabulary is just a collection of term definitions stored in a file or somewhere. These defined terms have the purpose of being generally reused in other descriptions so people can describe data (resources) more easily and in a standard manner.

    On the web you can find some standard vocabularies like:

    RDF (https://www.w3.org/1999/02/22-rdf-syntax-ns)

    RDFS (https://www.w3.org/2000/01/rdf-schema#)

    OWL (https://www.w3.org/2002/07/owl)

    The RDF vocubalary defines terms that help you to describe (at the most basic level as possible) individuals/instances of classes. Example: rdf:type, rdf:Property.

    With rdf:type you can describe that some resource is an instance of a class:

     <http://foo.com/anna> rdf:type <http://foo.com/teacher> 
    

    So the RDF vocabulary has terms that are targeting basic descriptions of class instances and some other descriptions (like the triple statement definition, or the predicate definition... in general things that are realted to the RDF concept).

    The RDFS vocabulary has term definitions that help you describe classes and relationships between them. RDFS vocabulary doesn't care about instances of classes (individuals) like the RDF vocabulary. Example: the rdfs:subClassOf property which you can use to describe that a class A is subclass of class B.

    The RDF and the RDFS vocabularies are dependent to one another. RDF defines it's terms using RDFS, and RDFS uses RDF for defining it's own terms.

    The RDF/RDFS vocabularies provide terms that can be used to create very basic descriptions of resources. If you want to have more complex and accurate descriptions you have to use the OWL vocabulary.

OWL词汇表带有一组新术语,旨在提供更详细的描述。这些术语使用RDF/RDFS词汇表中的术语进行定义。
owl:ObjectProperty a rdfs:Class ;
                   rdfs:label "ObjectProperty" ;
                   rdfs:comment "The class of object properties." ;
                   rdfs:isDefinedBy <http://www.w3.org/2002/07/owl#> ;
                   rdfs:subClassOf rdf:Property .

owl:DatatypeProperty a rdfs:Class ;
                     rdfs:label "DatatypeProperty" ;
                     rdfs:comment "The class of data properties." ;
                     rdfs:isDefinedBy <http://www.w3.org/2002/07/owl#> ;
                     rdfs:subClassOf rdf:Property .

 owl:TransitiveProperty a rdfs:Class ;
                        rdfs:label "TransitiveProperty" ;
                        rdfs:comment "The class of transitive properties." ;
                        rdfs:isDefinedBy <http://www.w3.org/2002/07/owl#> ;
                        rdfs:subClassOf owl:ObjectProperty .

如您所见,OWL词汇通过创建新类型的属性来扩展rdf:Property的概念,这些属性较少抽象并且可以提供更准确的资源描述。

结论:

  1. RDF是使用三元组集描述资源的概念或方法。
  2. RDF三元组可以以不同格式(XML/RDF、Turtle等)存储。
  3. RDF的概念是所有语义Web技术和结构(如词汇表)的基本模型。
  4. RDF也是一个词汇表,与RDFS词汇表一起提供了一组术语,可用于创建资源的通用/抽象描述。
  5. OWL是使用RDF和RDFS词汇表构建的词汇表,提供了用于创建更详细描述资源的新术语。
  6. 所有语义Web词汇表(RDF、RDFS、OWL等)都遵循RDF概念构建。
  7. 当然,OWL词汇背后有各种复杂的逻辑和概念,定义了Web本体语言。OWL词汇只是实际运用所有这些逻辑的一种方式。

16

首先,正如之前指出的那样,OWL可以以RDF序列化。

其次,OWL为RDF添加了本体能力(RDF本身仅提供极其有限的形式知识表示能力),通过提供使用形式可计算一阶描述逻辑定义三元组组件的设备。 这就是这里所说的“语义丰富性”的意思。

第三,重要的是要认识到,在OWL-Full(针对OWL 1)中,rdfs:class和owl:class是等效的,在OWL-DL中,owl:class是rdfs:class的子类。 实际上,这意味着您可以将OWL本体用作RDF的模式(RDF不正式要求模式)。

希望这可以进一步澄清。


非常好的帖子...我想在Oracle 11g中保存RDF三元组,我可以使用OWL作为我的RDF模式吗? - Saad

14

RDFS允许您通过标准化灵活的三元素格式来表达事物之间的关系,然后提供一个词汇表(“关键词”如rdf:typerdfs:subClassOf),可用于表述事物。

OWL类似,但更大、更好、更强大。OWL让您可以更多地说出有关数据模型的信息,向您展示如何高效地处理数据库查询和自动推理器,并提供有用的注释,将您的数据模型引入现实世界。

第一点不同:词汇表

RDFS和OWL之间最重要的区别是OWL提供了远远更大的词汇表,供您用于陈述事物

例如,OWL包括了RDFS中所有旧朋友,例如rdfs:typerdfs:domainrdfs:subPropertyOf。但是,OWL还为您提供了新的和更好的朋友!例如,OWL允许您用集合操作来描述数据:

Example:Mother    owl:unionOf     (Example:Parent, Example:Woman)

它允许您在数据库之间定义等效性:

AcmeCompany:JohnSmith  owl:sameAs    PersonalDatabase:JohnQSmith

它允许您限制属性值:

Example:MyState     owl:allValuesFrom     (State:NewYork, State:California, …)

事实上,OWL为数据建模和推理提供了许多新的、复杂的词汇,需要单独进行学习!

第二个区别:严格性

另一个主要区别是,与RDFS不同,OWL不仅告诉您如何使用某些词汇,还告诉您不能如何使用它。相比之下,RDFS为您提供了一个任何东西都可以添加的世界。

例如,在RDFS中,你可以随意将任何东西作为rdfs:Class的实例。你可能会决定说Beagle是一个rdfs:Class,然后说FidoBeagle的一个实例:

Example: Beagle    rdf:Type    rdfs:Class

Example:Fido    rdf:Type    Example: Beagle

接下来,您可能会决定要谈论比格犬,也许您想说Beagle在英国饲养的狗的一个实例:

Example:Beagle    rdf:Type    Example:BreedsBredInEngland

Example: BreedsBredInEngland    rdf:Type    rdfs:Class
在这个例子中,有趣的事情在于 Example:Beagle 同时被用作类和实例BeagleFido 的成员类,但 Beagle 本身是另一个类的成员:Things Bred in England。 在RDFS中,所有这些都是完全合法的,因为RDFS实际上并不限制您可以插入哪些语句。相比之下,在OWL中,或者至少在某些OWL版本中,上述语句实际上是不合法的:您不能说某物既可以是类又可以是实例。 这是RDFS和OWL之间的第二个主要区别。 RDFS使任何东西都可以随意添加,充满了荒野、Speak-Easies和Salvador Dali式的世界。 OWL的世界则施加了更加严格的结构。 第三个差异:注释,元元数据 假设您花了最后一个小时构建一个描述您无线电制造业务的本体论。中午休息时,您的任务是为您的钟表制造业务构建本体论。下午,在享用美味咖啡之后,你的老板现在告诉你,你必须为你的高利润收入的收音机钟组合业务构建本体论。有没有一种简单的方法可以轻松地重用今天上午的工作呢? OWL使这样的事情非常非常容易。在钟表-无线电情况下,您将使用Owl:Import,但是OWL还为您提供了丰富多样的注释,例如owl:versionInfoowl:backwardsCompatibleWithowl:deprecatedProperty,可以轻松地将数据模型链接到一个相互一致的整体中。 与RDFS不同,OWL肯定会满足您所有的元元数据建模需求。 结论 OWL为您提供了更大的词汇量,这使得很容易说出您想要说的任何关于数据模型的东西。它甚至允许您根据今天计算机的计算现实来定制您所说的话,并为特定应用程序进行优化(例如搜索查询)。此外,OWL允许您使用标准注释框架轻松地表示不同本体之间的关系。 所有这些都是与RDFS相比的优势,通常值得投入额外的精力来熟悉它们。 来源:RDFS vs. OWL

11
RDF是定义三元组“主语(subject)、谓语(predicate)、宾语(value)”的一种方式。例如,如果我想说:

“我的名字是Pierre”

我会这样写:

```html 我 名字 Pierre ```
<mail:me@where.com> <foaf:name> "Pierre"

看到<foaf:name>了吗?它是FOAF本体论的一部分。本体论是描述给定主题的属性和类的正式方式,而OWL是定义本体论的(RDF)方式。

您使用C++、Java等来定义类、子类、字段等。

class Person
{
    String email_as_id;
    String name;
}

RDF使用OWL来定义这些语句的类型。

另一个提出此类问题的地方:http://www.semanticoverflow.com/


17
不同意:“RDF使用OWL来定义这种语句。” RDF没有以任何方式使用OWL。事实上相反,OWL使用了使用RDF的RDF模式。 - alexkr
@Stefano 他们从哪里找到要运行的人,这才是真正的问题。 - Pascal Thivent

8
简而言之,可以说OWL是RDF的扩展。
更详细地说,RDF通过定义主语-谓语-宾语三元组来描述有向图。主语和宾语是节点,谓语是边或关系的描述。例如::Tolkien :wrote :LordOfTheRings:LordOfTheRings :author :Tolkien等。链接数据系统使用这些三元组来描述知识图谱,并提供存储和查询方法。虽然这些系统很大,但您可以在较小的项目中使用RDF。每个应用程序都有一种特定于领域的语言(或根据领域驱动设计术语的普及语言)。您可以在本体/词汇表中描述该语言,因此您可以使用图形描述应用程序的领域模型,将其可视化,向业务人员展示,基于该模型进行业务决策,并构建应用程序。您可以将应用程序的词汇绑定到其返回的数据以及搜索引擎所知道的词汇表上,例如微数据 (例如,可以使用RDFA和HTML来实现此目的),因此搜索引擎可以轻松找到您的应用程序,因为它的功能是机器可处理的。这就是语义Web的工作方式。(至少是我想象的方式。)
现在,要描述面向对象的应用程序,您需要类型、类、属性、实例等。使用RDF,您只能描述对象。 RDFS(RDF模式)可帮助您描述类、继承(基于对象),但它太广泛了。要定义约束(例如每个中国家庭一个孩子),您需要另一种词汇表。 OWL(Web本体语言)完成了这项工作。OWL是一种本体,可用于描述Web应用程序。它集成了XSD simpleTypes。
因此,RDF -> RDFS -> OWL -> MyWebApp是描述您的Web应用程序的更加具体的方法。

谢谢 - 这似乎很有帮助。我认为您是在说(如果我理解正确,请告诉我):(1)RDF允许指定对象之间的直接关系(personA friendsWith personB),(2)RDFS通过提供指定对象类之间关系的能力来扩展这一点,即class Person <has 'friendsWith' relationship> Person。然后,您可以通过类来表达RDF:A:typeof:person friendsWith B:<typeof:person>。而(3)OWL则允许您指定关系的约束条件? - Zach Smith
一个人最多可以有4个“朋友关系”连接。 - Zach Smith
@ZachSmith 是的。 - inf3rno
这是一个非常好的回答,谢谢。使得阅读页面上的其他内容变得更容易。 - Zach Smith
@ZachSmith 不用谢。 - inf3rno
@ZachSmith 你也可以使用SHACL定义约束:https://www.w3.org/TR/shacl/ 有些人推荐这样做,但我不确定,我需要在这个主题上阅读更多的资料,或者在一个例子上将其与OWL进行比较。 - inf3rno

6

4
在WC3文档对象模型中,一个文档是一个抽象的东西:一个带有文本、注释、属性和其他嵌套元素的元素
在语义网络中,我们处理一组“三元组”。每个三元组包括:
- 主题,三元组所涉及的事物,ID,数据库主键 - 一个URI; - 谓词,"动词","属性","数据库列" - 另一个URI; - 对象,原子值或某个URI。 OWL对于语义网络就像Schema对于W3C文档对象模型。它记录了各种URI的含义,并以可以由机器检查的正式方式指定了它们的使用方式。语义网络可能与适用于它的OWL一致,也可能不一致,就像文档可能与架构一致或不一致一样。
RDF对于语义网络就像XML对于DOM一样 - 它是一组三元组的序列化。
当然,RDF通常被序列化为XML文档...但重要的是要理解,RDF并不等同于"RDF的XML序列化"。同样,OWL可以使用OWL/XML进行序列化,或者(抱歉)可以表示为RDF,RDF本身通常以XML格式进行序列化。

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