RDF和OWL有什么区别?
我试图把握语义网的概念。 我发现很难理解RDF和OWL究竟有什么区别。 OWL是RDF的扩展,还是两者完全不同?
语义网层出现。 这是我认为你感兴趣的一个快速总结。
更新 :请注意,RDFS用于定义数据的结构, 而不是 OWL。 OWL描述了正常编程的语义关系,比如一个C结构,并没有被提及,更接近于AI研究和集合论。
三元组和URI
Subject - Predicate - Object
这些描述了一个事实。 通常,URI用于主题和谓词。 该对象是另一个URI或文字(如数字或string)。 文字可以有一个types(这也是一个URI),他们也可以有一个语言。 是的,这意味着三元组可以有多达5位的数据!
例如,三重奏可能会描述查尔斯是哈里斯的父亲这一事实。
<http://example.com/person/harry> <http://familyontology.net/1.0#hasFather> <http://example.com/person/charles> .
数据库规范化是逻辑极端的三倍。 它们的优点是可以将来自多个源的三元组加载到一个数据库中,而无需重新configuration。
RDF和RDFS
下一层是RDF – 资源描述框架。 RDF定义了一些额外的三元组结构。 RDF定义的最重要的是谓词“rdf:type”。 这是用来说事情是某种types的。 每个人都使用rdf:type,这使得它非常有用。
RDFS(RDF Schema)定义了一些表示主体,对象,谓词等概念的类。这意味着你可以开始关于事物类和关系types的陈述。 在最简单的层面上,你可以说像http://familyontology.net/1.0#hasFather是一个人和一个人之间的关系。; 它也允许你在人类可读的文本中描述关系或类的含义。 这是一个模式。 它告诉你各种类别和关系的合法使用。 它也被用来表示类或属性是更一般types的子types。 例如“HumanParent”是“Person”的一个子类。 “爱”是“知道”的一个子类。
RDF序列化
RDF可以以多种文件格式导出。 最常见的是RDF + XML,但是这有一些弱点。
N3是一种非XML格式,更容易阅读,还有一些更加严格的子集(Turtle和N-Triples)。
知道RDF是一种使用三元组的方式,而不是文件格式,这一点很重要。
XSD
XSD是一个主要用于描述属性types的名称空间,如date,整数等等。 通常在RDF数据中可以看到文字的具体types。 它也被用于XML模式,这是一个稍微不同的水壶。
猫头鹰
OWL将语义添加到模式。 它允许您更详细地指定属性和类。 它也以三倍表示。 例如,它可以表明“如果A是马列成B”,那么这意味着“B是马列成A”。 或者如果“ C是祖先的D ”和“ D是祖先的E ”,那么“ C是祖先的B ”。 猫头鹰的另一个有用的东西是能够说两件事情是相同的,这是非常有用的join不同模式expression的数据。 你可以说在一个模式中“被发现”的关系是owl:same在另一个模式中“生成”的。 你也可以用它来说两件事情是一样的,比如维基百科上的“埃尔维斯·普雷斯利”就是BBC上的一样。 这非常令人兴奋,因为这意味着您可以开始连接来自多个站点的数据(这是“关联数据”)。
您也可以使用OWL来推断隐含的事实,例如“ C isAncestorOf E ”。
简而言之,RDF定义了如何写东西,OWL定义了写什么 。
正如前面的海报写的,RDF是一个规范,告诉你如何定义三元组。 问题是,RDF允许定义一切,所以你这样的消退:
subj predicate object Alex Eats Apples Apples Eats Apples Apples Apples Apples
当这样的三元组用RDF编写时,它们会形成有效的RDF文档。 但! 从语义上讲,您明白这些陈述是不合理的,RDF不能帮助您validation您所写的内容。 这不是一个有效的本体论。
OWL规范确切地定义了你可以用RDF编写的东西 ,以便拥有有效的本体。 本体可以有几个属性。 这就是为什么OWL(版本1)定义了几个版本,如OWL DL,OWL Lite,OWL Full。
RDF,RDFS和OWL是expression日益复杂的信息或知识的手段。 所有这些都可以用RDF / XML语法(或任何其他的RDF序列化语法,如Turtle或N3)进行序列化。
这些技术是相关的,应该是互操作的,但是它们有不同的起源,也许为什么它们之间的关系是复杂的。 一方或另一方的select取决于你正在build模的情况需要多less复杂性。
expression概要
RDF :直接表示,集中于实例和映射到它们的types( rdf:type
)。 可以定义自定义属性来链接数据和创build三元组。 使用SPARQL查询RDF数据。 Turtle序列化的RDF示例:
@prefix : <http://www.example.org/> . :john rdf:type :Man . :john :livesIn "New-York" . :livesIn rdf:type rdf:Property .
RDFS:有些情况不容易被RDF单独模拟,有时代表更复杂的关系像子类( types的types )是有趣的。 RDFS提供了一些特殊的方法来表示这种情况,例如rdfs:subClassOf
, rdfs:range
或rdfs:domain
。 理想情况下, 推理人员可以理解RDFS语义,并根据关系扩展三元组的数量:例如,如果您有三元组John a Man
and 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:最高水平的performance力。 类之间的关系可以根据描述逻辑(math理论)进行forms化build模。 OWL在很大程度上依赖于推理器,可以expression复杂的构造,例如链式属性或者类之间的限制。 OWL用于在RDF数据集顶部构build本体或模式。 由于OWL可以被序列化为RDF / XML,理论上可以通过SPARQL查询它,但是用DL查询(这通常是一个标准的OWL类expression式)查询OWL本体更为直观。 在乌龟中序列化的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 .
首先,正如前面已经指出的,猫头鹰可以在RDF中被序列化。
其次,OWL通过提供使用forms化可计算的一阶描述逻辑来定义三元组成部分的装置,为RDF增加了本体能力(RDF本身只能为forms化知识表示提供极其有限的能力)。 当他们谈论“语义丰富性”时,这就是海报的意思。
第三,认识到在OWL-Full(对于OWL 1)中rdfs:class和owl:class是等同的,而在OWL-DL中,owl:class是rdfs:class的子类是很重要的。 实际上,这意味着您可以使用OWL本体作为RDF模式(不正式需要模式)。
我希望这有助于进一步澄清。
我个人发现这个幻灯片很有用和可以理解: http : //www.slideshare.net/rlovinger/rdf-and-owl
我试图把握语义网的概念。 我发现很难理解RDF和OWL究竟有什么区别。 OWL是RDF的扩展,还是两者完全不同?
总之,是的,你可以说OWL是RDF的扩展。
更详细地说,使用RDF,您可以通过定义主谓词对象三元组来描述有向图。 主体和客体是节点,谓词是边,或者换句话说,谓词描述主体和客体之间的关系。 例如:Tolkien :wrote :LordOfTheRings
或:LordOfTheRings :author :Tolkien
等等……链接的数据系统使用这些三元组来描述知识图,并提供存储方法来查询它们。 现在这些是巨大的系统,但是可以通过较小的项目使用RDF。 每个应用程序都有一个领域特定的语言(或DDD术语无处不在的语言)。 您可以在您的本体/词汇表中描述该语言,以便您可以使用graphics来描述应用程序的领域模型,您可以通过该graphics将其展示给业务人员,根据模型讨论业务决策,并在上面构build应用程序那个。 您可以将应用程序的词汇与其返回的数据以及search引擎已知的词汇(如微数据 )绑定(例如,您可以使用HTML和RDFA来执行此操作),因此search引擎可以轻松find您的应用程序,因为关于它做什么的知识将是机器可处理的。 这就是语义networking的工作原理。 (至less我是这么想的)
现在来描述面向对象的应用程序,你需要types,类,属性,实例等等…使用RDF,你只能描述对象。 RDFS(RDF模式)可以帮助你描述类,inheritance(基于c的对象),但是它太宽泛了。 要定义约束(例如,每个中国家庭一个孩子),你需要另一个词汇。 OWL(networking本体语言)完成这项工作。 OWL是一个可以用来描述Web应用程序的本体。 它集成了XSD simpleTypes。
所以RDF -> RDFS -> OWL -> MyWebApp
是以更具体的方式描述您的Web应用程序的顺序。
当你使用RDF这个术语时,你必须区分两件事:
-
您可以参考RDF作为一个概念 :
用三元组集合来描述事物/逻辑/任何事物的一种方式。
例:
“安娜有苹果。” “苹果是健康的。”
在上面,你有两个三元组描述两个资源“安娜”和“苹果”。 RDF(资源描述框架)的概念是,你可以描述资源(任何东西)只有3个词(术语)的集合。 在这个层面,你不关心你是如何存储信息的,不pipe你有3个字的string,还是墙上的画,还是有3列的表格等等。
在这个概念层面,唯一重要的是你可以使用三元语句来表示任何你想要的东西。
-
你可以参考RDF作为一个词汇
词汇只是存储在文件或某处的词汇定义的集合。 这些定义的术语的目的是通常在其他描述中重复使用,以便人们可以更容易和标准地描述数据(资源)。
在网上你可以find一些标准的词汇表,如:
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词汇表提供了可用于创build非常基本的资源描述的术语。 如果你想要更复杂和准确的描述,你必须使用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词汇表通过创build新types的不太抽象的属性来扩展rdf:Property的概念,并且可以提供更准确的资源描述。
结论:
- RDF是一种使用三元组来描述资源的概念或方法。
- RDF三元组可以以不同的格式存储(XML / RDF,Turtle等)
- RDF的概念是所有语义Web技术和结构(如词汇表)的基础模型。
- RDF也是一个词汇,与RDFS词汇一起提供了一组可用于创build资源的一般/抽象描述的术语。
- OWL是一个用RDF和RDFS词汇表构build的词汇表,为创build更详细的资源描述提供了新的术语。
- 所有语义Web词汇表(RDF,RDFS,OWL等)都是通过尊重RDF概念而构build的。
- 当然,OWL词汇在幕后还有定义Web本体语言的各种复杂的逻辑和概念。 OWL词汇只是在实践中使用所有逻辑的一种方式。
RDFS允许你通过标准化一个灵活的,基于三重的格式来expression事物之间的关系,然后提供一个可用于说事情的词汇表(“关键字”,如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提供了许多新的,复杂的词汇来用于数据build模和推理,从而得到了自己的教训!
第二个区别:刚性
另一个主要区别是,与RDFS不同,OWL不仅告诉你如何使用某些词汇,它实际上告诉你如何不能使用它。 相比之下,RDFS为你提供了一个任何世界,你可以添加任何你想要的三倍。
例如,在RDFS中,任何你觉得可以成为rdfs:Class
的实例。 你可能会决定说Beagle是一个rdfs:Class
,然后说Fido是Beagle的一个实例:
Example: Beagle rdf:Type rdfs:Class Example:Fido rdf:Type Example: Beagle
接下来,你可能会决定你想说一些关于小猎犬的事情,也许你想说比格 犬是在英国繁殖的狗的一个例子:
Example:Beagle rdf:Type Example:BreedsBredInEngland Example: BreedsBredInEngland rdf:Type rdfs:Class
在这个例子中有趣的是, Example:Beagle
被用作一个类和一个实例 。 比格犬是菲多所属的一类,但比格犬本身就是另一个阶级的成员:在英格兰繁殖的东西。
在RDFS中,这一切都是完全合法的,因为RDFS并没有真正限制你可以插入哪些语句。 在OWL中,相比之下,或者至less在某种口味的OWL中,上面的语句实际上是不合法的: 你根本不被允许说某些东西既可以是一个类,也可以是一个实例。
这是RDFS和OWL之间的第二个主要区别。 RDFS可以为所有人提供一个免费的世界,任何东西都可以遍布狂野西部,Speak-Easies和Salvador Dali。 OWL的世界强加了更为严格的结构。
第三差异:注释,元元数据
假设你已经花了最后一小时build立一个描述你的无线电制造业务的本体论。 在午餐期间,您的任务是为钟表制造业务build立一个本体。 今天下午,喝了一杯好咖啡之后,老板现在告诉你,你必须为你的高利润的钟表收音机业务build立一个本体论。 有没有办法轻松地重用早上的工作?
OWL使得这样做非常非常简单。 Owl:Import
是你在时钟收音机的情况下使用的,但是OWL也给你提供了各种各样的注释,比如owl:versionInfo
, owl:backwardsCompatibleWith
和owl:deprecatedProperty
,它们可以很容易的被用于链接数据模型一个相互连贯的整体。
与RDFS不同,OWL肯定会满足您所有的元元数据build模需求。
结论
OWL给你一个更大的词汇来玩,这使得你可以很容易地说出你想说的关于你的数据模型。 它甚至可以让你根据当今计算机的计算实际来定制你所说的话,并针对特定的应用程序进行优化(例如search查询)。此外,OWL允许你使用标准的注释框架容易地expression不同的本体之间的关系。
与RDFS相比,所有这些都是有优势的,通常值得花费额外的精力来熟悉它们。
来源: RDFS与OWL
RDF是定义三个“主体”,“谓词”,“价值”的一种方式 。 例如,如果我想说,
“我的名字是皮埃尔”
我会写
<mail:me@where.com> <foaf:name> "Pierre"
看到<foaf:name>
? 它是FOAF本体的一部分。 本体是描述属性的forms化方式,给定主体的类, OWL是定义本体的(RDF)方法。
你使用C ++,Java等来定义一个类,一个子类,一个字段等等。
class Person { String email_as_id; String name; }
RDF使用OWL来定义这种语句。
另一个地方要问这样的问题: http : //www.semanticoverflow.com/
在WC3文档对象模型中, 文档是一个抽象的东西:包含文本,注释,属性和嵌套在其中的其他元素的元素。
在语义networking中,我们处理一组“三元组”。 每个三元组都是一个主题,三元组是关于的 ,id,数据库主键 – 一个URI; 谓词,“动词”,“属性”,“数据库列” – 另一个URI; 和对象 ,一个primefaces值或一些URI。
OWL是语义Web,因为Schema是W3C的文档对象模型。 它logging了各种URI的含义,并指定如何以正式的方式使用它们,以便通过机器来检查。 语义网可能适用OWL,也可能不适用于OWL,就像文档可能对模式有效或不适用一样。
RDF是语义networking,因为XML就是DOM – 这是一组三元组的序列化。
当然,RDF通常是作为一个XML文档序列化的……但是了解RDF和“RDF的XML序列化”并不是一回事。
同样的,OWL可以使用OWL / XML进行序列化,或者(对此抱歉)它可以表示为RDF,RDF本身通常被序列化为XML。
基本的语义networking堆栈已经在这个线程中解释了很多。 我想专注于最初的问题,并比较RDF和OWL。
- OWL是RDF和RDF-S的超集(在上面)
- OWL允许有效地使用RDF和RDF-S
- OWL有一些扩展的词汇
- class级和个人(“实例”)
- 属性和数据types(“谓词”)
- OWL是正确的推理和推理所必需的
- OWL有三种方言lite,描述逻辑和完整
通过了解一些事实,使用OWL对获得更多的意义(推理和推理)至关重要。 这个“dynamic创build的”信息可以进一步用于像SPARQL中一致的查询。
一些例子将显示,实际上与OWL一起工作 – 这些都是从我在2015年在西class牙TYPO3camp Mallorca的关于语义网基础知识的谈话中拿出来的。
等同于规则
Spaniard: Person and (inhabitantOf some SpanishCity)
这意味着一个Spaniard
必须是一个Person
(因此inheritance了推理部分的所有属性),并且必须居住在至less一个(或更多) SpanishCity
。
属性的含义
<Palma isPartOf Mallorca> <Mallorca contains Palma>
该示例显示了将inverseOf
应用于属性isPartOf
并contains
。
- 逆
- 对称
- 及物
- 不相交的
- …
性质的基数
<:hasParent owl:cardinality “2“^^xsd:integer>
这定义了每个Thing
(在这种情况下最可能是一个Human
)恰好有两个父母 – 基数被分配给hasParent
属性。
- 最低限度
- 最大
- 精确
最好的答案是从James Hendler开发的Semantic Web自己的“The Ontology on Ontologists语义Web”一书中读到这本书。 如果你正在寻找一个快速课程。 检查这个udemy课程:
资源描述框架(RDF)是一种强大的forms化知识表示语言,是语义网的基本标准。 它具有定义核心概念和关系(例如,rdf:type对应于isA关系)的自己的词汇表,以及使主体 – 谓词 – 对象(资源 – 属性 – 值)forms的机器可解释语句的数据模型,称为RDF三元组的三元组,如图片描述书。 将RDF词汇扩展为创build受控词表和基本本体所需的概念被称为RDF模式或RDF词汇描述语言(RDFS)。 RDFS使得可以编写关于类和资源的语句,并且expression分类结构,例如通过超类 – 子类关系。
复杂的知识领域需要比RDFS中更多的function,这导致了OWL的引入。 OWL支持类之间的联系(联合,交集,不相交,等价),属性基数约束(最小值,最大值,确切数量,例如每个人只有一个父亲),丰富的属性types,属性特性和特殊属性对称的,function的,反函数的,例如,A ex:hasAncestor B和B ex:hasAncestor C意味着A ex:hasAncestor C),指定给定属性是特定类实例的唯一键,以及域和范围限制为属性。