如何使用SPARQL查询列出和计算图数据中不同类型的节点和边缘实体?

时间:2014-06-12 14:44:45

标签: graph rdf sparql jena fuseki

我希望为数据集提供一些摘要统计信息,我想在图表中列出不同类型的边缘实体和节点(顶点)实体。

例如:

- >在Twitter用户的社交网络图和以下关系(同构图)中,只有一种类型的顶点实体(用户),但在诸如ConceptNet数据的异构图中,它将具有多个值。

- >可以通过计算我认为使用查询的不同谓词数来计算边缘实体:

SELECT DISTINCT (?p AS ?DistinctEdges)  { ?s ?p ?o }

但我不知道如何为顶点做到这一点。顶点类型可以来自三元组的主题或对象字段,而对象又可以是值(文字)或其他资源本身。

如果我的词汇在任何地方出错,请原谅。我刚刚开始构建语义Web应用程序。

1 个答案:

答案 0 :(得分:2)

您可以使用UNION子句将两个模式与FILTER子句结合使用IsLiteral()函数来省略文字,例如

SELECT DISTINCT ?vertex
WHERE
{
  { 
    ?vertex ?p [] 
  }
  UNION
  { 
    [] ?p ?vertex 
    FILTER(!IsLiteral(?vertex))
  }
}

[]是一个匿名变量,因为你不关心UNION两边的某些位置,所以给它们一个匿名变量,我们匹配任何值,但不在查询中输出这些值。

union的RHS中的FILTER子句用于过滤掉文字对象。没有必要在LHS中使用它,因为RDF禁止文字主题,因此来自LHS的任何?vertex值必须是资源,即URI /空白节点