我想从FOAF本体中获得一些信息。我尝试了下面的SPARQL查询,但是它没有返回结果。我试着使用这个查询来熟悉FOAF,但我真正想要做的是找到?x所认识的所有特定人员(使用属性foaf:knows)。我该怎么做?
PREFIX foaf:<http://xmlns.com/foaf/0.1/>
SELECT ?name ?mbox
WHERE { ?x foaf:name ?name .
?x foaf:mbox ?mbox .
}发布于 2016-05-03 14:49:58
语义网由不同的组件组成。
知识被表示为RDF三元组。这些三元组基于主谓对象语法描述参考资料。例如,"John is a Male"可以表示为一个RDF三元组。
在RDF之上,我们可以使用RDFS和OWL来指定这些数据的限制和其他信息。由于RDFS,我可以指定"Male is a subclass of Person",因此可以推断出这个"John is a Person"。RDFS和OWL有助于定义本体。本体是表示数据的词汇表(可以是通用的,也可以是特定于域的)。例如,我可能希望创建一个本体猫来表示猫的数据。
在这种情况下,我将创建我的猫词汇表,定义"Cat is a subclass of Animal"和"hasOwner is a property that links a cat to a Person"以及其他一些属性。然后,我可以实例化一些人来创建猫的数据。比如说"Baccara is a Cat"和"Baccara hasOwner John"。
FOAF基本上是用来表示人的数据,特别是这些人之间的链接的词汇表。FOAF词汇表提供一些属性和类来轻松处理有关人员的信息。但是它没有提供任何信息,只有“结构”/“模型”/“模式”来组织信息。FOAF数据集中没有个人。这就是为什么查询不返回结果的原因。由于FOAF数据集中没有人员,所以查询不返回任何内容是正常的。
您可能希望基于FOAF词汇表构建自己的RDF数据集。要做到这一点,您可以尝试像Protégé这样的工具,如果您熟悉RDF/XML或Turtle,可以更容易地使用文本编辑器。
否则,如果您只需要熟悉FOAF,就可以查询模型。例如,您可能希望获得代理的所有子类:
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。
https://stackoverflow.com/questions/37001744
复制相似问题