rdf - 如何在现有数据集上使用替代/新本体

标签 rdf sparql semantic-web ontology linked-data

通常在讨论语义数据库和本体的力量时,我听到人们说 RDF 数据是通用的,因为本体可以应用于数据以以不同的方式查看它。

然而,根据我的经验,数据集通常通过谓词绑定(bind)到特定的本体,即在 subject-predicate-object 中。 ,其中谓词根据某种本体定义了某种性质或关系。因此,例如,在关于电影的查询中,如果没有数据引用某个人的新“电影本体”,那么我不能只在查询 DBPedia 或 LinkedMDB 时使用它的术语,对吗?

然后我偶尔会在一个数据集中看到“链接”,它基本上将一个特定资源连接到另一个具有自己本体的数据集中的类似资源。即linkedmdb有owl:sameAs ,但这似乎并不是人们将本体应用于数据的意思。

它是如何工作的,我如何在对数据集的 SPARQL 查询中使用关于某些主题的不同本体?

最佳答案

Then I'll occasionally see "linkages" in a data set that essentially joins one particular resource to a similar resource in another dataset that has its own ontology. i.e. linkedmdb has owl:sameAs, but this doesn't seem to be what people mean by applying ontologies to data.



不一定是owl:sameAs ,但我认为这可能是您正在寻找的那种东西。使用 RDFS 或 OWL,您可以对属性和类做出许多不同类型的断言,只需稍加推理,您就可以对数据有一个新的“ View ”。例如,假设一个本体定义了一些类和属性:
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 (inverse playsRole)



尤其是最后一条公理,您会发现在电影中扮演角色的任何人都是电影中的 Actor 。 OWL 也可以让您做更多事情,但这是本体或模式映射的一般概念。要使用这种方法,您需要定义映射公理并将推理器应用于它们和原始数据集的联合。

你也可以通过基于规则的推理做更多的事情。例如,您可以编写一条规则,而不是声明上面的第三个 OWL 公理:

hasRole(?movie,?role) ∧ playsRole(?actor,?role) → hasActor(?movie,?actor)



虽然应用规则只是另一种推理,但它与 SPARQL 的联系更紧密,因为您可以使用 SPARQL construct作为使用另一个数据查询的结果,查询根据本体生成数据。例如,您可以这样做:
construct {
  ?movie :hasActor ?actor
}
where {
  ?movie :hasRole ?role .
  ?actor :playsRole ?role .
}

你是对的,虽然数据互操作性的想法有时有点被夸大了,或者至少听起来比它更容易和更迷人。一般来说,要使用数据,您需要熟悉它所表达的词汇表。如果您想使用基于原始数据的另一个词汇表来获取一些新数据,您将需要了解这些关系这些词汇之间的关系非常好,并且您将需要应用某种翻译(通常这将是某种 RDF 或 OWL 推理器)。

关于rdf - 如何在现有数据集上使用替代/新本体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21317794/

相关文章:

drupal - 将 SPARQL 查询转化为可视化

sql - SPARQL 中的字符串匹配?

java - RDF4J 仅针对三重存储调度 5 个查询

sparql - 如何从 CONSTRUCT 在图上创建聚合

php - 是否可以在 ARC2 中对已解析的三元组进行 SPARQL 查询?

algorithm - 如何建立电影推荐系统?

sparql - 数据库百科/sparql : get population & lat/lng of all cities/towns/villages in UK

css - 语义标记和语义网有什么区别?

rdf - 我如何知道等效的 DBPedia 和 Wikidata 属性

java - 从本体实例中提取数据属性值