我想从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 .
}
答案 0 :(得分:1)
语义网由不同的组件组成。
知识表示为RDF三元组。这些三元组基于主题 - 谓词 - 对象语法描述资源。例如,DbPersist
可以表示为RDF三元组。
在RDF之上,我们可以使用RDFS和OWL来指定有关这些数据的限制和其他信息。感谢RDFS,我可以指定ReaderT
,因此可以推断出"John is a Male"
。 RDFS和OWL有助于定义本体。 本体是表示数据的词汇表(可以是一般的或特定于域的)。例如,我可能想创建一个本体CAT来表示猫的数据。
在这种情况下,我会创建定义"Male is a subclass of Person"
和"John is a Person"
以及其他一些属性的CAT词汇表。然后,我能够实例化一些人来创建猫的数据。例如,通过说"Cat is a subclass of Animal"
和"hasOwner is a property that links a cat to a Person"
。
FOAF基本上是一个词汇来表示人们的数据,特别是这些人之间的联系。 FOAF词汇表提供了一些属性和类,可以轻松处理人们的信息。但它不提供任何信息,只提供“结构”/“模型”/“架构”来组织信息。 FOAF数据集中没有个人。这就是你的查询没有返回结果的原因。由于FOAF数据集中没有人,因此查询不返回任何内容是正常的。
您可能希望根据FOAF词汇表构建自己的RDF数据集。为此,您可以尝试像Protégé这样的工具,或者如果您熟悉RDF / XML或Turtle,可以使用文本编辑器更轻松地尝试。
否则,如果您只需要熟悉FOAF,就可以查询模型。例如,您可能想要获取代理的所有子类:
"Baccara is a Cat"
我建议您在进一步了解FOAF之前,先阅读一下语义Web组件(特别是RDF和RDFS,以及它们之间的差异)。另外,学习SPARQL的一个很好的练习包括查询DBpedia:http://dbpedia.org/sparql。