0

我想从 FOAF 本体中获取一些信息。我尝试了以下 SPARQL 查询,但它没有返回任何结果。我尝试了这个查询来熟悉 FOAF,但我真正想做的是找到某个特定人?x认识的所有人(使用 property foaf:knows)。我该怎么做呢?

PREFIX foaf:<http://xmlns.com/foaf/0.1/>
SELECT ?name ?mbox
WHERE { ?x foaf:name ?name .
        ?x foaf:mbox ?mbox .
}
4

1 回答 1

2

语义网由不同的组件组成。

知识表示为 RDF 三元组。这些三元组基于主题 - 谓词 - 对象语法描述资源。例如,"John is a Male"可以表示为 RDF 三元组。

在 RDF 之上,我们可以使用 RDFS 和 OWL 来指定这些数据的限制和其他信息。感谢 RDFS,我可以指定"Male is a subclass of Person"它,因此可以推断出"John is a Person". RDFS 和 OWL 有助于定义本体。本体是表示数据的词汇表(可以是通用的或特定于域的)。例如,我可能想创建一个本体 CAT 来表示关于猫的数据。

在这种情况下,我会创建我的 CAT 词汇表来定义它"Cat is a subclass of Animal"以及"hasOwner is a property that links a cat to a Person"其他一些属性。然后,我可以实例化一些人来创建关于猫的数据。例如,通过说"Baccara is a Cat"and "Baccara hasOwner John"

FOAF 基本上是一个词汇表,用于表示有关人的数据,尤其是这些人之间的联系。FOAF 词汇表提供了一些属性和类来轻松处理有关人员的信息。但它不提供任何信息,只提供“结构”/“模型”/“模式”来组织信息。FOAF 数据集中没有个体。这就是您的查询不返回结果的原因。由于 FOAF 数据集中没有人,因此查询没有返回任何内容是正常的。

您可能希望基于 FOAF 词汇构建自己的 RDF 数据集。为此,您可以尝试使用 Protégé 之类的工具,或者如果您熟悉 RDF/XML 或 Turtle,则使用文本编辑器更容易。

否则,如果您只需要熟悉FOAF,您可以查询模型。例如,您可能想要获取 Agent 的所有子类:

PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
SELECT distinct ?c 
WHERE { ?c rdfs:subClassOf foaf:Agent }

我建议您在进一步了解 FOAF 之前先阅读一下语义 Web 组件(尤其是 RDF 和 RDFS,以及它们之间的区别)。另外,学习 SPARQL 的一个很好的练习是查询 DBpedia:http ://dbpedia.org/sparql 。

于 2016-05-03T14:49:58.467 回答