我正在尝试理解语义网的概念。我很难理解RDF和OWL之间的确切区别。OWL是RDF的扩展还是这两种技术完全不同?
我试图理解语义网的概念。我发现很难理解RDF和OWL之间的具体区别。OWL是基于RDF的扩展,而不是完全不同的技术。请保留原文中的HTML标签。我正在尝试理解语义网的概念。我很难理解RDF和OWL之间的确切区别。OWL是RDF的扩展还是这两种技术完全不同?
我试图理解语义网的概念。我发现很难理解RDF和OWL之间的具体区别。OWL是基于RDF的扩展,而不是完全不同的技术。请保留原文中的HTML标签。语义网分为不同的层级。以下是我认为你可能感兴趣的一些层级的简要概述。
更新:请注意,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的祖先”。
简而言之:
正如之前的帖子所写,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。
@prefix : <http://www.example.org/> .
:john rdf:type :Man .
:john :livesIn "New-York" .
:livesIn rdf:type rdf:Property .
RDFS: 有些情况仅使用RDF难以建模,例如表示更复杂的关系,如子类(类型的类型)。RDFS提供了特殊手段来表示这些情况,使用像rdfs:subClassOf
、rdfs:range
或rdfs:domain
这样的结构。理想情况下,推理器可以理解RDFS语义并根据关系扩展三元组的数量:例如,如果您有三元组John a Man
和Man 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 .
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.
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: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的概念,这些属性较少抽象并且可以提供更准确的资源描述。
结论:
首先,正如之前指出的那样,OWL可以以RDF序列化。
其次,OWL为RDF添加了本体能力(RDF本身仅提供极其有限的形式知识表示能力),通过提供使用形式可计算一阶描述逻辑定义三元组组件的设备。 这就是这里所说的“语义丰富性”的意思。
第三,重要的是要认识到,在OWL-Full(针对OWL 1)中,rdfs:class和owl:class是等效的,在OWL-DL中,owl:class是rdfs:class的子类。 实际上,这意味着您可以将OWL本体用作RDF的模式(RDF不正式要求模式)。
希望这可以进一步澄清。
RDFS允许您通过标准化灵活的三元素格式来表达事物之间的关系,然后提供一个词汇表(“关键词”如rdf:type
或rdfs:subClassOf
),可用于表述事物。
OWL类似,但更大、更好、更强大。OWL让您可以更多地说出有关数据模型的信息,向您展示如何高效地处理数据库查询和自动推理器,并提供有用的注释,将您的数据模型引入现实世界。
RDFS和OWL之间最重要的区别是OWL提供了远远更大的词汇表,供您用于陈述事物。
例如,OWL包括了RDFS中所有旧朋友,例如rdfs:type
、rdfs:domain
和rdfs: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
,然后说Fido是Beagle的一个实例:
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
同时被用作类和实例。 Beagle 是 Fido 的成员类,但 Beagle 本身是另一个类的成员:Things Bred in England。
在RDFS中,所有这些都是完全合法的,因为RDFS实际上并不限制您可以插入哪些语句。相比之下,在OWL中,或者至少在某些OWL版本中,上述语句实际上是不合法的:您不能说某物既可以是类又可以是实例。
这是RDFS和OWL之间的第二个主要区别。 RDFS使任何东西都可以随意添加,充满了荒野、Speak-Easies和Salvador Dali式的世界。 OWL的世界则施加了更加严格的结构。
第三个差异:注释,元元数据
假设您花了最后一个小时构建一个描述您无线电制造业务的本体论。中午休息时,您的任务是为您的钟表制造业务构建本体论。下午,在享用美味咖啡之后,你的老板现在告诉你,你必须为你的高利润收入的收音机钟组合业务构建本体论。有没有一种简单的方法可以轻松地重用今天上午的工作呢?
OWL使这样的事情非常非常容易。在钟表-无线电情况下,您将使用Owl:Import
,但是OWL还为您提供了丰富多样的注释,例如owl:versionInfo
,owl:backwardsCompatibleWith
和owl:deprecatedProperty
,可以轻松地将数据模型链接到一个相互一致的整体中。
与RDFS不同,OWL肯定会满足您所有的元元数据建模需求。
结论
OWL为您提供了更大的词汇量,这使得很容易说出您想要说的任何关于数据模型的东西。它甚至允许您根据今天计算机的计算现实来定制您所说的话,并为特定应用程序进行优化(例如搜索查询)。此外,OWL允许您使用标准注释框架轻松地表示不同本体之间的关系。
所有这些都是与RDFS相比的优势,通常值得投入额外的精力来熟悉它们。
来源:RDFS vs. OWL“我的名字是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/
:Tolkien :wrote :LordOfTheRings
或:LordOfTheRings :author :Tolkien
等。链接数据系统使用这些三元组来描述知识图谱,并提供存储和查询方法。虽然这些系统很大,但您可以在较小的项目中使用RDF。每个应用程序都有一种特定于领域的语言(或根据领域驱动设计术语的普及语言)。您可以在本体/词汇表中描述该语言,因此您可以使用图形描述应用程序的领域模型,将其可视化,向业务人员展示,基于该模型进行业务决策,并构建应用程序。您可以将应用程序的词汇绑定到其返回的数据以及搜索引擎所知道的词汇表上,例如微数据 (例如,可以使用RDFA和HTML来实现此目的),因此搜索引擎可以轻松找到您的应用程序,因为它的功能是机器可处理的。这就是语义Web的工作方式。(至少是我想象的方式。)RDF -> RDFS -> OWL -> MyWebApp
是描述您的Web应用程序的更加具体的方法。personA friendsWith personB
),(2)RDFS通过提供指定对象类
之间关系的能力来扩展这一点,即class Person <has 'friendsWith' relationship> Person
。然后,您可以通过类来表达RDF:A:typeof:person friendsWith B:<typeof:person>
。而(3)OWL则允许您指定关系的约束条件? - Zach Smith