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

Graph 如何使用SPARQL查询列出和统计图形数据中不同类型的节点和边实体?,graph,rdf,sparql,jena,fuseki,Graph,Rdf,Sparql,Jena,Fuseki,我希望为数据集提供一些汇总统计信息,并在图中列出不同类型的边实体和节点(顶点)实体 例如: ->在Twitter社交网络用户和跟随关系图(同质图)中,只有一种类型的顶点实体(用户),但在异构图(如ConceptNet data)中,它将具有多个值 ->边缘实体可以通过计算不同数量的谓词来计算,我相信使用查询: SELECT DISTINCT (?p AS ?DistinctEdges) { ?s ?p ?o } 但我不知道如何为顶点这样做。顶点类型可以来自三元组的“主题”或“对象”字段,而对

我希望为数据集提供一些汇总统计信息,并在图中列出不同类型的边实体和节点(顶点)实体

例如:

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

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

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

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


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

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

SELECT DISTINCT ?vertex
WHERE
{
  { 
    ?vertex ?p [] 
  }
  UNION
  { 
    [] ?p ?vertex 
    FILTER(!IsLiteral(?vertex))
  }
}
[]
是一个匿名变量,因为您不关心
联合体两侧的某些位置,所以通过给它们一个匿名变量,我们匹配任何值,但不在查询中执行这些值


union的RHS中的
FILTER
子句用于筛选出文本对象。因为RDF禁止文字主题,所以LHS中不必有此项,因此LHS中的任何
?顶点
值必须是资源,即URI/空白节点“顶点类型可以来自三元组的主题或对象字段,而对象可以是值(文字)或另一个资源本身。”通常类型由
rdf:type
表示。对象应该是资源(即,不是文本)。然后您只需选择distinct?type{[]rdf:type?type}
a la。我不认为OP谈论的是
rdf:type
而是节点类型,即uri、空白节点和Literals@RobV那可能是,我不认为这很清楚。我的评论是基于这一点:“在Twitter社交网络用户和跟随关系图(同质图)中,只有一种类型的顶点实体(用户)”。但是,根据您的评论,可能是“顶点类型可以来自三元组的主题或对象字段,而对象可以是值(文字)或另一个资源本身”,这意味着标识图形中的所有节点(也包括文字)。如果是这样的话,我认为你的答案是有效的,如果你删除了过滤器(并修复了bnodes)。多亏了评论和答案。现在更清楚了。为了澄清这一点,我想提取图形中的边和节点实体。边实体非常简单。对于节点实体,我需要的是资源或空白节点(不确定?)。示例:如果有一个由论文(节点)、作者(节点)、会议(节点)、iswrittenby(边缘)、ispublishedin(边缘)、presentsin(边缘)等组成的网络。。。我的查询必须返回节点类型:论文作者会议和边缘类型:iswrittenby、ispublishedin、presentsin etcI。我还有一个关于同一主题的后续问题:是的,我也得到了此查询的语法错误。