Answers:
语义网是分层的。这是我认为您感兴趣的内容的快速摘要。
更新:请注意,RDFS用于定义数据的结构,而不是 OWL。OWL描述了语义关系,而普通的编程(例如C结构)则不会被这种语义关系所困扰,它更接近于AI研究和集合论。
三元组和URI
Subject - Predicate - Object
这些描述了一个事实。通常,URI用于主题和谓词。该对象可以是另一个URI或文字,例如数字或字符串。文字可以具有类型(也是URI),也可以具有语言。是的,这意味着三元组最多可以包含5位数据!
例如,三元组可能描述了查尔斯是哈里斯的父亲这一事实。
<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”的子类。“爱”是“知识”的子类。
RDF序列化
RDF可以以多种文件格式导出。最常见的是RDF + XML,但这有一些缺点。
N3是一种非XML格式,更易于阅读,并且有一些子集(Turtle和N-Triples)更严格。
重要的是要知道,RDF是使用三元组而不是文件格式的一种方法。
XSD
XSD是一个命名空间,主要用于描述属性类型,例如日期,整数等。通常在RDF数据中可以识别出文字的特定类型。它也用在XML模式中,这有点不同。
猫头鹰
OWL将语义添加到架构。它允许您指定更多有关属性和类的信息。它也以三元组表示。例如,它可以指示“如果A isMarriedTo B”,则意味着“ B isMarriedTo A”。或者说,如果“ C isAncestorOf D ”和“ D isAncestorOf E ”,那么“ C isAncestorOf E 猫头鹰添加的另一个有用的功能是可以说两件事是相同的,这对于将以不同模式表示的数据进行联接非常有帮助。您可以说,一个模式中的“需要”关系是owl:sameAs“ fathered”其他模式。您也可以使用它来表示两件事是相同的,例如Wikipedia上的“ Elvis Presley”在BBC上是相同的。这非常令人兴奋,因为这意味着您可以开始从多个站点合并数据(这是“链接数据”)。
您也可以使用OWL推断隐式事实,例如“ C isAncestorOf 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。
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 .
首先,如前所述,猫头鹰可以在RDF中序列化。
其次,OWL通过提供使用形式可计算的一阶描述逻辑来定义三元组的组件的设备,为RDF增加了本体功能(它本身仅提供形式上有限的知识表示形式的能力非常有限)。这就是张贴者在谈论“语义丰富性”时的意思。
第三,重要的是要认识到,在OWL-Full(对于OWL 1)中,rdfs:class和owl:class是等效的,在OWL-DL中,owl:class是rdfs:class的子类。实际上,这意味着您可以将OWL本体用作RDF的架构(正式不需要架构)。
我希望这有助于进一步澄清。
使用术语RDF时,必须区分两件事:
您可以将RDF称为概念:
一种使用三元组集合描述事物/逻辑/任何事物的方式。
例:
“安娜有苹果。” “苹果很健康。”
在上方,您有两个三元组,它们描述了两个资源“安娜”和“苹果”。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#)
猫头鹰(https://www.w3.org/2002/07/owl)
RDF术语定义的术语可帮助您(尽可能在最基本的层次上)描述类的个人/实例。例如: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的概念,这些类型的属性不太抽象,可以提供更准确的资源描述。
结论:
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和OWL之间到底有什么区别。OWL是RDF的扩展,还是这两种是完全不同的技术?
简而言之,是的,您可以说OWL是RDF的扩展。
更详细地,使用RDF可以通过定义主谓谓对象三元组来描述有向图。主语和宾语是节点,谓词是边缘,换句话说,谓语描述了主语和宾语之间的关系。例如:Tolkien :wrote :LordOfTheRings
或:LordOfTheRings :author :Tolkien
等等。链接的数据系统使用这些三元组来描述知识图,并且它们提供了存储,查询它们的方式。现在这些都是巨大的系统,但是您可以在较小的项目中使用RDF。每个应用程序都具有特定于域的语言(或按DDD术语通用的语言)。您可以在本体/词汇表中描述该语言,因此可以使用图形描述应用程序的领域模型,您可以将其可视化显示给业务人员,讨论基于该模型的业务决策,并在顶部构建应用程序其中。您可以将应用程序的词汇绑定到它返回的数据,以及绑定到搜索引擎已知的词汇表,例如微数据(例如,您可以将HTML与RDFA结合使用来执行此操作),因此搜索引擎可以轻松找到您的应用程序,因为有关其功能的知识将是可机器处理的。这就是语义网的工作方式。(至少这是我的想象。)
现在,要描述面向对象的应用程序,您需要类型,类,属性,实例等。使用RDF,您只能描述对象。RDFS(RDF架构)可帮助您描述类,继承(基于对象的对象),但是它太宽泛了。要定义约束条件(例如每个中国家庭一个孩子),您需要另一个词汇。OWL(网络本体语言)可以完成这项工作。OWL是可用于描述Web应用程序的本体。它集成了XSD simpleTypes。
用RDF -> RDFS -> OWL -> MyWebApp
越来越具体的方式描述您的Web应用程序的命令也是如此。
personA friendsWith personB
)之间的直接关系,(2)RDFS通过提供指定object classes
- 之间的关系的能力来扩展此关系class Person <has 'friendsWith' relationship> Person
。这让你再那句RDF通过类:A:typeof:person friendsWith B:<typeof:person>
。然后(3),OWL允许您指定关系的约束?
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是an 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
它既用作类又用作实例。比格犬是菲多(Fido)所属的一类,但比格犬(Beagle)本身又是另一类的成员:英国物联网(Things Bred)。
在RDFS中,所有这一切都是完全合法的,因为RDFS并不真正限制您可以插入和不能插入哪些语句。相比之下,在OWL中,或者至少在某些形式的OWL中,以上声明实际上是不合法的:根本不允许您说某物既可以是类又可以是实例。
这是RDFS和OWL之间的第二个主要区别。RDFS使所有人都能享受免费服务,无论是在狂野西部,说容易的语言还是萨尔瓦多·达利(Salvador Dali)的世界里,一切都是如此。OWL的世界具有更严格的结构。
假设您花了最后一个小时来构建一个描述您的无线电制造业务的本体。午餐期间,您的任务是为钟表制造业务构建本体。今天下午,在喝了一杯咖啡之后,您的老板告诉您,您必须为利润丰厚的时钟无线电业务构建一个本体。有没有一种方法可以轻松地重复使用早晨的工作?
OWL非常非常容易地执行此类操作。Owl:Import
是你将在时钟收音机情况下使用什么,但是OWL还为您提供了丰富多样的注解如owl:versionInfo
,owl:backwardsCompatibleWith
和owl:deprecatedProperty
,它可以很容易地用于链接数据模型连成一个相互连贯的整体。
与RDFS不同,OWL一定可以满足您的所有元元数据建模需求。
OWL为您提供了更大的词汇量,使您可以轻松地说出任何有关数据模型的知识。它甚至允许您根据当今计算机的计算现实情况来定制您的内容,并针对特定的应用程序进行优化(例如,针对搜索查询)。此外,OWL允许您使用标准注释框架轻松地表达不同本体之间的关系。 。
与RDFS相比,所有这些都是优势,通常值得您花费额外的精力来熟悉它们。
资料来源:RDFS与OWL
在WC3文档对象模型中,文档是抽象的东西:一个元素,其中包含文本,注释,属性和其他嵌套在其中的元素。
在语义网中,我们处理一组“三元组”。每个三元组为:
OWL适用于语义网,而Schema适用于W3C文档对象模型。它记录了各种URI的含义,并指定了如何以正式的方式使用它们,以供计算机检查。语义网对于适用于它的OWL可能有效或无效,就像文档相对于架构可能有效或无效一样。
RDF指向语义网,XML指向DOM,这是一组三元组的序列化。
当然,RDF通常序列化为XML文档......但要明白,RDF是不一样的东西“XML序列化是很重要的 RDF”。
同样,OWL可以使用OWL / XML进行序列化,或者(对此很抱歉)可以将其表示为RDF,而其本身通常被序列化为XML。
在该线程中已经对基本语义Web堆栈进行了很多解释。我想关注最初的问题,并将RDF与OWL进行比较。
仅通过了解一些事实,使用OWL对于获得更多含义(推理和推断)至关重要。这种“动态创建”的信息可以进一步用于诸如SPARQL中的一致查询。
一些示例将表明该功能实际上可用于OWL- 这些是我于2015年在西班牙马略卡岛TYPO3camp上谈论语义网络的基础知识而获得的。
Spaniard: Person and (inhabitantOf some SpanishCity)
这意味着a Spaniard
必须为a Person
(并因此继承了推理部分中的所有属性),并且必须存在于至少一个(或多个)中SpanishCity
。
<Palma isPartOf Mallorca>
<Mallorca contains Palma>
该示例显示了应用inverseOf
到属性isPartOf
和的结果contains
。
<:hasParent owl:cardinality “2“^^xsd:integer>
这定义了每个Thing
(在这种情况下,很可能是a Human
)都恰好有两个父对象-基数已分配给该hasParent
属性。
图片讲一千个字!下图显示了克里斯托弗·古特里奇(Christopher Gutteridge) 在此答案中所说的内容,即语义网是“分层体系结构”。
资料来源:https : //www.obitko.com/tutorials/ontologies-semantic-web/semantic-web-architecture.html
在资源描述框架(RDF)是一个功能强大的正规知识表示语言和语义网的基本标准。它有自己的词汇表,用于定义核心概念和关系(例如,rdf:type对应于isA关系),以及一个数据模型,该数据模型可以使机器可解释的语句以subject-predicate-object(资源-属性-值)的形式出现三元组,称为RDF三元组,例如Picture-depicts-book。使用创建受控词汇表和基本本体所需的概念扩展RDF词汇表称为RDF Schema或RDF词汇表描述语言(RDFS)。RDFS使得可以编写有关类和资源的语句,并表达分类结构,例如通过超类-子类关系。
复杂的知识领域比RDFS中需要的功能更多,因此引入了OWL。OWL支持类之间的关系(联合,相交,不相交,等价),属性基数约束(最小,最大,确切数目,例如每个人都有一个父亲),属性的丰富类型,属性和特殊属性(可传递,对称,函数,逆函数,例如A ex:hasAncestor B和B ex:hasAncestor C表示A ex:hasAncestor C),指定给定属性是特定类实例的唯一键以及域和范围限制属性。