SPARQL能否统计重复三元组语句?Apache Jena Fuseki技术问询
SPARQL统计重复三元组的方法
首先明确:SPARQL可以统计重复三元组,但结果取决于你的Apache Jena Fuseki存储配置:
- 若使用默认的TDB/TDB2存储(遵循RDF集合模型),重复三元组会被自动去重,你例子里的统计结果是1;
- 若配置了支持重复的存储(如允许重复的内存存储或特殊配置的TDB2),则能统计到实际的重复次数6。
具体操作步骤
1. 确认存储是否保留重复
默认Fuseki的TDB/TDB2存储会自动合并完全相同的三元组(主语、谓语、宾语均一致),所以导入你的Turtle文件后,重复的:pemerintah :sejahterahkan :positif只会存储一条。
如果需要保留重复三元组,需修改Fuseki配置:
- 内存存储:使用
DatasetGraphTxnMem并开启allowDuplicates=true; - TDB2:在存储配置中添加
duplicates=true(非标准配置,需参考Jena官方文档)。
2. 统计特定三元组的重复次数
存储保留重复时的查询
直接统计匹配的三元组数量,结果为6:
SELECT (COUNT(*) AS ?重复次数) WHERE { :pemerintah :sejahterahkan :positif . }
存储已去重时的结果
上述查询会返回1,若要获取原始Turtle文件中的重复次数,需在导入前预处理文件,或更换支持重复的存储。
3. 统计所有重复三元组的通用查询
如果想找出数据集中所有存在重复的三元组及其次数,可用以下查询(仅在存储保留重复时有效):
SELECT ?s ?p ?o (COUNT(*) AS ?重复次数) WHERE { ?s ?p ?o . } GROUP BY ?s ?p ?o HAVING (?重复次数 > 1) ORDER BY DESC(?重复次数)
内容的提问来源于stack exchange,提问作者Marshall
相关产品推荐
相关产品推荐

