然后我偶尔会在一个数据集中看到“链接”,它本质上将一个特定资源连接到另一个具有自己本体的数据集中的类似资源。即linkedmdb 有owl:sameAs,但这似乎不是人们将本体应用于数据的意思。
它可能不一定是owl:sameAs
,但我认为这可能是您正在寻找的那种东西。使用 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,那么您可以使用一些更具表现力的公理,例如,
Movie ≡ Film
Actor ⊑ Person
hasActor ⊑ hasRole o (反向扮演角色)
尤其是最后一条公理,您会发现在电影中扮演角色的任何人都是电影中的演员。OWL 也可以让您做更多事情,但这是本体或模式映射的一般概念。要使用这种方法,您需要定义映射公理并将推理器应用于它们和原始数据集的联合。
你也可以通过基于规则的推理做更多的事情。例如,您可以编写一条规则,而不是声明上面的第三个 OWL 公理:
hasRole(?movie,?role) ∧playsRole(?actor,?role) → hasActor(?movie,?actor)
虽然应用规则只是另一种推理,但它与 SPARQL 的联系更紧密,因为您可以使用 SPARQLconstruct
查询根据本体生成数据,因为使用另一个查询数据。例如,您可以这样做:
construct {
?movie :hasActor ?actor
}
where {
?movie :hasRole ?role .
?actor :playsRole ?role .
}
你是对的,虽然数据互操作性的想法有时有点被夸大了,或者至少听起来比它更容易和更迷人。一般来说,要使用数据,您需要熟悉它所表达的词汇表。如果您想使用基于原始数据的另一个词汇表来获取一些新数据,您将需要了解这些关系这些词汇之间的关系非常好,并且您将需要应用某种翻译(通常这将是某种 RDF 或 OWL 推理器)。