通常在讨论语义数据库和本体的力量时,我听到人们说RDF数据是通用的,因为可以将本体应用于数据以便以不同的方式查看它。
然而,根据我的经验,数据集通常依赖于谓词,即subject-predicate-object
中的特定本体,其中谓词根据某些本体定义某些属性或关系。因此,例如,在关于电影的查询中,如果没有数据引用某个人的新“电影本体”,那么我不能在针对DBPedia或LinkedMDB的查询中使用它的术语,对吗?
然后,我偶尔会看到一个数据集中的“链接”,它实际上将一个特定资源连接到另一个具有自己的本体的数据集中的类似资源。即linkedmdb有owl:sameAs
,但这似乎不是人们将本体应用于数据的意思。
它是如何工作的,如何在数据集的SPARQL查询中使用关于某些主题的不同本体?
答案 0 :(得分:10)
然后,我偶尔会在数据集中看到“链接” 将一个特定资源连接到另一个数据集中的类似资源 它有自己的本体论。即linkedmdb有owl:sameAs,但是这个 似乎并不是人们将本体应用于数据的意思。
它可能不一定是owl:sameAs
,但我认为这可能是您正在寻找的 sort 。使用RDFS或OWL,您可以以这样一种方式对属性和类进行许多不同类型的断言,通过一些推理,您可以在数据上获得新的“视图”。例如,假设一个本体定义了一些类和属性:
o1:Film a rdfs:Class .
o1:Actor a rdfs:Class .
o1:hasActor a rdf:Property .
rdfs:domain o1:Film .
rdfs:range o1:Actor .
另一个本体论定义了其他一些:
o2:Movie a rdfs:Class .
o2:Person a rdfs:Class .
o2:Character a rdfs:Class .
o2:hasCharacter a rdf:Property ;
rdfs:domain o2:Movie ;
rdfs:range o2:Character .
o2:playsRole a rdf:Property ;
rdfs:domain o2:Actor ;
rdfs:range o2:Character .
现在,如果您有根据一个本体表达的数据,您可以使用这些公理来获取其他信息:
o2:Movie rdfs:subClassOf o1:Film .
o1:Film rdfs:subClassOf o2:Movie .
o1:Actor rdfs:subClassOf o2:Person .
这只是一些信息,但有了RDFS推理器,你突然知道了很多实例。如果你使用比RDFS更具表现力的本体语言,比如OWL,那么你可以使用一些更具表现力的公理,例如,
电影≡电影
演员⊑人
hasActor⊑hasRole o (反向 playsRole)
特别是最后一个公理,你会发现任何扮演电影角色的人都是电影中的演员。 OWL也会让你做更多的事情,但这就是本体或模式映射的一般概念。要使用这种方法,您需要定义映射公理并将推理器应用于它们与原始数据集的并集。
您也可以使用基于规则的推理做更多事情。例如,您可以编写规则,而不是声明上面的第三个OWL公理:
hasRole(?电影,?角色)∧playRole(?演员,?角色)→hasActor(?电影,?演员)
虽然应用规则只是另一种推理,但它与SPARQL的关系更密切,因为您可以使用SPARQL construct
查询根据使用其他数据查询数据的本体生成数据。例如,您可以这样做:
construct {
?movie :hasActor ?actor
}
where {
?movie :hasRole ?role .
?actor :playsRole ?role .
}
你是对的,虽然数据互操作性的想法有时有点超卖,或者至少听起来比现在更容易和更迷人。通常,要使用数据,您需要熟悉它所表达的词汇。如果您想使用基于原始数据的其他词汇表获取一些新数据,您将需要了解这些关系在这些词汇表之间相当好,你需要应用某种翻译(通常这将是某种RDF或OWL推理器)。