使用SPARQL匹配属性集
这个问题是关于使用带有SPARQL端点的三重存储(Fuseki 3.8.0)查找匹配的使用SPARQL匹配属性集,sparql,rdf,fuseki,Sparql,Rdf,Fuseki,这个问题是关于使用带有SPARQL端点的三重存储(Fuseki 3.8.0)查找匹配的候选者和路径 匹配条件是候选对象的属性必须包含路径的所有要求。在下面的最小示例数据中,匹配项应该是candi_1withpath_1和candi_2withpath_2 @prefix : <http://example.com/app#> . :candi_1 a :candidate ; :attribute "A", "B", "C" . :candi_2 a :candida
候选者
和路径
匹配条件是候选对象的属性
必须包含路径
的所有要求
。在下面的最小示例数据中,匹配项应该是candi_1
withpath_1
和candi_2
withpath_2
@prefix : <http://example.com/app#> .
:candi_1
a :candidate ;
:attribute "A", "B", "C" .
:candi_2
a :candidate ;
:attribute "C", "D" .
:candi_3
a :candidate ;
:attribute "C", "E" .
:path_1
a :path ;
:requires "A", "C" .
:path_2
a :path ;
:requires "C", "D" .
一种双重否定:
前缀:
选择?cand?路径
在哪里{
?C和a:候选人。
路径a:路径。
筛选器不存在{
?路径:需要?属性。
筛选器不存在{
?cand:属性?属性。
}
}
}
上述查询的性能应该不是很好。还可以尝试以下方法:
前缀:
选择?cand?路径
{
{
选择(计数(?属性)作为?计数)?路径?C
{
?路径a:path;:需要?attr。
?C和a:候选;:属性?属性。
}按路径进行分组
}
{
选择(计数(?属性)作为?计数?路径
{
?路径a:path;:需要?attr。
}按路径分组
}
}
但是,如果存在“空”候选项和路径,则后一个查询将不起作用。如果使用类似SPARQL的Turtle表示数据,您几乎肯定会发现这更容易实现(和理解)。第二个查询统计:path
和:candidate
之间共享的:attribute
的数量,然后统计:path
的:attribute
。我不太清楚这个函数如何将响应限制为仅匹配的计数。计数被要求为马赫数,因为两者都被分配到?count
,对吗?@ColinGross,是的,它们是“连接的”,就像在常规的三重模式中一样。或者,可以编写类似于过滤器(?path1=?path2)
的代码。
+------------+-------------+
| ?candidate | ?valid_path |
+------------+-------------+
| :candi1 | :path1 |
| :candi2 | :path2 |
+------------+-------------+