我试图掌握语义Web的概念。我发现很难理解RDF和OWL之间究竟有什么区别。 OWL是RDF的扩展还是这两种技术完全不同?
答案 0 :(得分:258)
语义网分层次存在。这是我认为您感兴趣的内容的快速摘要。
更新:请注意,RDFS用于定义数据的结构,不是 OWL。 OWL描述了语义关系,正常的编程,例如C结构,没有被讨论,并且更接近AI研究和集理论。
三倍&的URI 强>
Subject - Predicate - Object
这些描述了一个事实。通常,URI用于主题和谓词。该对象是另一个URI或文字,如数字或字符串。文字可以有一个类型(也是一个URI),它们也可以有一种语言。是的,这意味着三元组最多可以有5位数据!
例如,三人可能会描述Charles是Harrys父亲的事实。
<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 Schema)定义了一些表示主题,对象,谓词等概念的类。这意味着您可以开始创建关于事物类和关系类型的语句。在最简单的层面上,您可以说http://familyontology.net/1.0#hasFather之类的东西是一个人与一个人之间的关系。它还允许您在人类可读文本中描述关系或类的含义。这是一个架构。它告诉您各种类和关系的合法使用。它还用于指示类或属性是更一般类型的子类型。例如,“HumanParent”是“Person”的子类。 “爱”是“知道”的子类。
RDF序列化
RDF可以以多种文件格式导出。最常见的是RDF + XML,但这有一些缺点。
N3是一种非XML格式,更易于阅读,并且有一些更严格的子集(Turtle和N-Triples)。
重要的是要知道RDF是一种处理三元组的方式,而不是文件格式。
<强> XSD 强>
XSD是一个命名空间,主要用于描述属性类型,如日期,整数等。它通常在RDF数据中看到,用于识别文字的特定类型。它也用于XML模式,这是一个略有不同的鱼。
<强> OWL 强>
OWL为模式添加了语义。它允许您指定更多有关属性和类的信息。它也以三元组表示。例如,它可以指示“如果A已经结婚到B”那么这意味着“B isMarriedTo A”。或者,如果“ C isAncestorOf D ”和“ D isAncestorOf E ”那么“ C isAncestorOf E ”。 owl添加的另一个有用的东西是能够说两件事情是相同的,这对于连接不同模式中表达的数据非常有帮助。你可以说在一个模式中“sired”的关系是owl:sameAs在其他模式中“生长”。你也可以用它来说两件事情是一样的,比如维基百科上的“Elvis Presley”和BBC上的一样。这非常令人兴奋,因为这意味着您可以开始加入来自多个站点的数据(这是“关联数据”)。
您还可以使用OWL来推断隐含的事实,例如“ C isAncestorOf E ”。
答案 1 :(得分:74)
简而言之:
正如之前的海报所写,RDF是一个告诉你如何定义三元组的规范。
问题在于RDF允许您定义所有内容,因此您可以撰写如下声明:
| subject | predicate | object |
|---------|-----------|--------|
| Alex | Eats | Apples |
| Apples | Eats | Apples |
| Apples | Apples | Apples |
这些三元组构成有效的RDF文件。
但是,从语义上讲,您理解这些语句不正确,RDF无法帮助您验证您所编写的内容。
这不是一个有效的本体论。
OWL规范准确定义了您可以使用RDF编写的内容,以便拥有有效的本体。
本体可以有几个属性。
这就是为什么OWL(ver 1)定义了几个版本,如OWL DL,OWL Lite,OWL Full。
答案 2 :(得分:29)
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:有些情况不容易单独通过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类表达式)查询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 :(得分:14)
首先,如前所述,owl可以在RDF中序列化。
其次,OWL通过提供使用正式可计算的一阶描述逻辑来定义三元组件的装置,为RDF增加了本体能力(RDF本身仅提供非常有限的正式已知表示能力)。这就是当他们谈论“语义丰富”时海报的意思。
第三,重要的是要意识到在OWL-Full(对于OWL 1)中,rdfs:class和owl:class是等价的,在OWL-DL中,owl:class是rdfs:class的子类。实际上,这意味着您可以使用OWL本体作为RDF的模式(它不正式要求模式)。
我希望这有助于进一步澄清。
答案 4 :(得分:9)
我个人发现这个幻灯片非常有用且易懂: http://www.slideshare.net/rlovinger/rdf-and-owl
答案 5 :(得分:8)
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/
答案 6 :(得分:7)
当您使用术语RDF时,您必须区分两件事:
您可以将RDF称为概念:
使用三元组集描述事物/逻辑/任何事物的方法。
示例:
&#34;安娜有苹果。&#34; &#34;苹果是健康的。&#34;
上面你有两个描述两种资源的三元组&#34; Anna&#34;和&#34;苹果&#34;。 RDF(资源描述框架)的概念是,您可以使用仅3个单词(术语)的集合来描述资源(任何内容)。在这个级别,你不关心你如何存储信息,你是否有一个3字的字符串,或墙上的绘画,或3列的表等。
在这个概念层面,唯一重要的是你可以使用三重语句代表任何你想要的东西。
您可以将RDF称为词汇
词汇表只是存储在文件或某个地方的术语定义的集合。这些定义的术语的目的通常是在其他描述中重复使用,以便人们可以更容易地以标准方式描述数据(资源)。
在网络上,您可以找到一些标准词汇表,如:
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)
RDF vocubalary定义的术语可以帮助您(尽可能在最基本的级别)描述类的个体/实例。示例:rdf:type,rdf:Property。
使用rdf:type,您可以描述某些资源是类的实例:
<http://foo.com/anna> rdf:type <http://foo.com/teacher>
因此,RDF词汇表的术语主要针对类实例的基本描述和其他一些描述(如三重语句定义或谓词定义......一般来说,这些内容都适用于RDF概念)。
RDFS词汇表具有术语定义,可帮助您描述它们之间的类和关系。 RDFS词汇表并不关心像RDF词汇表这样的类(个体)实例。示例:rdfs:subClassOf属性,可用于描述类A是类B的子类。
RDF和RDFS词汇表彼此依赖。 RDF使用RDFS定义它的术语,RDFS使用RDF来定义它自己的术语。
RDF / RDFS词汇表提供了可用于创建资源的基本描述的术语。如果您想要更复杂和准确的描述,则必须使用OWL词汇表。
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的概念,并且可以提供更准确的资源描述。
结论:
答案 7 :(得分:7)
RDFS允许您通过标准化灵活的三重格式然后提供词汇表来表达事物之间的关系(&#34;关键字&#34;例如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 本身就是另一个类的成员:在英格兰培育的东西。
在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允许您使用OWL轻松表达不同本体之间的关系一个标准的注释框架。
与RDFS相比,所有这些都是优势,并且通常值得花费额外的精力来熟悉它们。
来源:RDFS vs. OWL
答案 8 :(得分:6)
我试图掌握语义Web的概念。我发现很难 了解RDF和OWL之间究竟有什么区别。是 OWL是RDF的扩展,或者这两者完全不同 技术?
简而言之,是的,你可以说OWL是RDF的扩展。
更详细地说,使用RDF,您可以通过定义主题 - 谓词 - 对象三元组来描述有向图。主题和对象是节点,谓词是边缘,或者换句话说,谓词描述主体和对象之间的关系。例如:Tolkien :wrote :LordOfTheRings
或:LordOfTheRings :author :Tolkien
等...链接数据系统使用这些三元组来描述知识图,它们提供了存储它们,查询它们的方法。现在这些都是庞大的系统,但您可以通过较小的项目使用RDF。每个应用程序都有一个特定于域的语言(或通过DDD术语无处不在的语言)。您可以在本体/词汇表中描述该语言,因此您可以使用图形描述应用程序的域模型,您可以将其显示给业务人员,根据模型讨论业务决策,并在顶部构建应用程序那个。您可以将应用程序的词汇绑定到它返回的数据和搜索引擎已知的词汇表,例如microdata(例如,您可以使用带RDFA的HTML来执行此操作),以便搜索引擎可以找到您的应用程序很容易,因为它所做的知识将是机器可处理的。这就是语义网的工作方式。 (至少这是我的想象。)
现在要描述面向对象的应用程序,您需要类型,类,属性,实例等......使用RDF,您只能描述对象。 RDFS(RDF模式)可以帮助您描述类,继承(基于ofc的对象),但它太宽泛了。要定义约束(例如每个中国家庭一个孩子),您需要另一个词汇。 OWL(网络本体语言)完成这项工作。 OWL是一个可用于描述Web应用程序的本体。它集成了XSD simpleTypes
因此,RDF -> RDFS -> OWL -> MyWebApp
是以更具体的方式描述您的Web应用程序的顺序。
答案 9 :(得分:4)
在WC3文档对象模型中,文档是一个抽象的东西:元素,其中包含文本,注释,属性和嵌套在其中的其他元素。
在语义网中,我们处理一组“三元组”。每个三元组是:
OWL属于语义Web,因为Schema属于W3C文档对象模型。它记录了各种URI的含义,并指明了它们如何以正式方式使用,可由机器检查。对于适用于它的OWL,语义Web可能有效,也可能无效,就像文档相对于模式可能有效或无效一样。
RDF是语义网,因为XML是DOM - 它是一组三元组的序列化。
当然,RDF通常被序列化为XML文档......但重要的是要理解RDF与“ RDF的XML序列化”不同。
同样,OWL可以使用OWL / XML进行序列化,或者(对不起)它可以表示为RDF,RDF本身通常被序列化为XML。
答案 10 :(得分:3)
基本语义Web堆栈已在此线程中进行了大量解释。我想关注最初的问题并将RDF与OWL进行比较。
使用OWL对于通过了解一些事实来获得更多意义(推理和推理)至关重要。这&#34;动态创建&#34;信息可以进一步用于SPARQL中的一致查询。
一些例子表明,这实际上适用于OWL - 这些是从2015年在西班牙TYPO3camp Mallorca的talk about the basics of semantic web获得的。
Spaniard: Person and (inhabitantOf some SpanishCity)
这意味着Spaniard
必须是Person
(因此会继承推理部分中的所有属性),并且必须至少存在一个(或更多)SpanishCity
。
<Palma isPartOf Mallorca>
<Mallorca contains Palma>
该示例显示了将inverseOf
应用于属性isPartOf
和contains
的结果。
<:hasParent owl:cardinality “2“^^xsd:integer>
这定义了每个Thing
(在这种情况下很可能是Human
)只有两个父母 - 基数被分配给hasParent
属性。
答案 11 :(得分:3)
最好的答案是阅读Semantic Web本身的先驱之一,以及James Hendler为工作本体论者提供的语义Web#34;如果您正在寻找快速速成课程。检查这个udemy课程:
答案 12 :(得分:2)
资源描述框架(RDF)是一种强大的形式知识表示语言和语义Web的基本标准。它有自己的词汇表来定义核心概念和关系(例如,rdf:type对应于isA关系),以及一个数据模型,它以subject-predicate-object(resource-property-value)的形式启用机器可解释的语句三倍,称为RDF三元组,如图片描绘书。 RDF词汇表的扩展与创建受控词汇表和基本本体所需的概念称为RDF Schema或RDF词汇描述语言(RDFS)。 RDFS可以编写有关类和资源的语句,并表达分类结构,例如通过超类 - 子类关系。
复杂的知识领域需要比RDFS中可用的功能更多的功能,这导致引入 OWL 。 OWL支持类之间的关系(并集,交集,不相交,等价),属性基数约束(最小值,最大值,确切数量,例如,每个人只有一个父亲),丰富的属性类型,属性特征和特殊属性(传递性,对称的,函数的,反函数的,例如,A ex:hasAncestor B和B ex:hasAncestor C暗示A ex:hasAncestor C),指定给定属性是特定类的实例的唯一键,以及域和范围限制对于属性。
答案 13 :(得分:2)
图片说出一千个字!下图说明了Christopher Gutteridge 在此answer中所说的语义网是一种“分层体系结构”。
来源:https://www.obitko.com/tutorials/ontologies-semantic-web/semantic-web-architecture.html