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


当前回答

RDF、RDFS和OWL是表示日益复杂的信息或知识的方法。它们都可以用RDF/XML语法(或任何其他RDF序列化语法,例如Turtle或N3)序列化。

这些技术是相关的,应该是可互操作的,但它们有不同的起源,这可能就是为什么它们之间的关系很难掌握的原因。选择一种还是另一种取决于建模所需要的情况有多复杂。

表达能力的总结

RDF:简单的表示,主要关注实例及其类型的映射(RDF: type)。可以定义自定义属性来链接数据和创建三元组。使用SPARQL查询RDF数据。 在Turtle中序列化RDF的例子:

@prefix : <http://www.example.org/> .
:john    rdf:type           :Man .
:john    :livesIn  "New-York" .
:livesIn    rdf:type    rdf:Property .

RDFS: Some situations are not easily modelled by RDF alone, it is sometimes interesting to represent more complex relations like subclasses (the type of a type) for example. RDFS provides special means to represent such cases, with constructs like rdfs:subClassOf, rdfs:range or rdfs:domain. Ideally, a reasoner can understand the RDFS semantics and expand the number of triples based on the relations: For instance if you have the triples John a Man and Man rdfs:subClassOf Human then you should generate as well the triple John a Human. Note that this is not possible to do with RDF alone. RDFS data are queried using SPARQL. Example of RDFS serialised in Turtle:

@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: The highest level of expressivity. Relation between classes can be formally modelled based on description logics (mathematical theory). OWL relies heavily on the reasoner, it is possible to express complex constructs such as chained properties for instance or restriction between classes. OWL serves to build ontologies or schema on the top of RDF datasets. As OWL can be serialised as RDF/XML, it is theoretically possible to query it via SPARQL, yet it is much more intuitive to query an OWL ontology with a DL query (which is usually a standard OWL class expression). Example of OWL constructs serialised in Turtle.

@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 .

其他回答

简而言之:

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。

一图胜千言!下面这张图应该可以加强克里斯托弗·古特里奇的观点 在这个回答中说语义网是一个“分层架构”。

来源:https://www.obitko.com/tutorials/ontologies-semantic-web/semantic-web-architecture.html

RDF是一种定义三元“主语”、“谓语”、“值”的方法。 例如,如果我想说,

"我叫皮埃尔"

我会写

<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/

RDF、RDFS和OWL是表示日益复杂的信息或知识的方法。它们都可以用RDF/XML语法(或任何其他RDF序列化语法,例如Turtle或N3)序列化。

这些技术是相关的,应该是可互操作的,但它们有不同的起源,这可能就是为什么它们之间的关系很难掌握的原因。选择一种还是另一种取决于建模所需要的情况有多复杂。

表达能力的总结

RDF:简单的表示,主要关注实例及其类型的映射(RDF: type)。可以定义自定义属性来链接数据和创建三元组。使用SPARQL查询RDF数据。 在Turtle中序列化RDF的例子:

@prefix : <http://www.example.org/> .
:john    rdf:type           :Man .
:john    :livesIn  "New-York" .
:livesIn    rdf:type    rdf:Property .

RDFS: Some situations are not easily modelled by RDF alone, it is sometimes interesting to represent more complex relations like subclasses (the type of a type) for example. RDFS provides special means to represent such cases, with constructs like rdfs:subClassOf, rdfs:range or rdfs:domain. Ideally, a reasoner can understand the RDFS semantics and expand the number of triples based on the relations: For instance if you have the triples John a Man and Man rdfs:subClassOf Human then you should generate as well the triple John a Human. Note that this is not possible to do with RDF alone. RDFS data are queried using SPARQL. Example of RDFS serialised in Turtle:

@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: The highest level of expressivity. Relation between classes can be formally modelled based on description logics (mathematical theory). OWL relies heavily on the reasoner, it is possible to express complex constructs such as chained properties for instance or restriction between classes. OWL serves to build ontologies or schema on the top of RDF datasets. As OWL can be serialised as RDF/XML, it is theoretically possible to query it via SPARQL, yet it is much more intuitive to query an OWL ontology with a DL query (which is usually a standard OWL class expression). Example of OWL constructs serialised in Turtle.

@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 .

基本的语义web堆栈已经在这篇文章中解释了很多。我想把重点放在最初的问题上,并比较RDF和OWL。

OWL是RDF和RDF- s的超级集(在上面) OWL允许有效地使用RDF和RDF- s OWL有一些扩展的词汇表 类和个人(“实例”) 属性和数据类型(“谓词”) OWL是正确的推理和推断所必需的 OWL有三种方言,精简,描述逻辑和完整

使用OWL是通过了解一些事实来获得更多意义(推理和推断)的必要条件。这种“动态创建”的信息可以进一步用于像SPARQL中那样的一致查询。

一些例子将显示这实际上与OWL一起工作——这些都是从我2015年在西班牙马略卡的TYPO3camp上关于语义网基础知识的演讲中摘录出来的。

规则等价

Spaniard: Person and (inhabitantOf some SpanishCity)

这意味着西班牙人必须是一个人(因此继承了推理部分中的所有财产),并且必须至少居住在一个(或多个)西班牙城市。

属性的含义

<Palma isPartOf Mallorca>
<Mallorca contains Palma>

该示例显示了对属性isPartOf和contains应用inverseOf的结果。

逆 对称的 传递 不相交的 ...

属性的基数

<:hasParent owl:cardinality “2“^^xsd:integer>

这定义了每个事物(在这个场景中很可能是人)都有两个父元素——基数被分配给hasParent属性。

最低 最大 确切的