Rdf SPARQL图形模式比较

Rdf SPARQL图形模式比较,rdf,sparql,semantic-web,Rdf,Sparql,Semantic Web,SPARQL图形模式是UBVxUVxUBVL形式的三种模式的结合。 其中U是URI,B是空白节点,V是变量,L是文本 例子: 查询q1 Select ?author where ?author ex:wrote ?book 查询q2 Select ?author where ?author ex:wrote ?book ?book ex:title "Eaters of the dead" 比较这两种基本图形模式的最佳算法是什么?例如,q2的图形模式的结果是q1的结果的子集。我如何通过编程确

SPARQL图形模式是UBVxUVxUBVL形式的三种模式的结合。 其中U是URI,B是空白节点,V是变量,L是文本

例子: 查询q1

Select ?author where
?author ex:wrote ?book
查询q2

Select ?author where
?author ex:wrote ?book
?book ex:title "Eaters of the dead"

比较这两种基本图形模式的最佳算法是什么?例如,q2的图形模式的结果是q1的结果的子集。我如何通过编程确定这一点?

如果q2是q1的一部分,则更具体的模式应该返回更小的结果集。因此,计算这两个集合并从计数(q1)中减去计数(q2),将显示q1中不在q2中的作者数量,表明q2更具体。如果结果是否定的,那么Q2更具体

例如:

 SELECT ((?countQ1 - ?countQ2) as ?result) WHERE {

       {SELECT (count(distinct ?author) as ?countQ1) WHERE {
              ?author ex:wrote ?book .
       }}

       {SELECT (count(distinct ?author) as ?countQ2) WHERE {
              ?author ex:wrote ?book .
              ?book ex:title "Eaters of the dead"
       }}
 }

通过将where子句转换为图形,您可能能够完成您正在尝试的任务。然后,您可以使用标准的图形算法来比较查询,比如使用同构来查看它们是否相同。

您关心变量名吗?不,我不关心变量名,而是关心图形中模式的结果,因为您说q2包含在q1中(即使q2中有一个文字值,q1中有一个变量),听起来你在寻找某种图的同构和统一问题。这可能会很昂贵。此外,你说你关心的是“图中模式的结果”。如果您指的是结果集,那么q1将有
?z
的绑定,但q2甚至没有对应于
?z
的变量,这是一个重要的差距(并且
结果集中不会出现
“食死徒”
).你能试着更具体地确定你在寻找的关系吗?你可以通过将所有文字值转换为具有相应
块的变量,然后计算三重模式上的图形同构,然后查看相应变量的值是否正确其他人的子集…@JoshuaTaylor抱歉,这是我的错误。我更正了查询。问题是关于q1的结果集中包含的q2的结果集。感谢您的回答,但您的解决方案不会对这两个查询造成差异。这两个模式是等效的(它们具有相同的属性,即因此算法必须验证这种等价性,然后决定哪一个比另一个更具体。