通过为Graph
和DatasetGraph
提供impl,我在MongoDB上合理地实现了Jena。 SPARQL查询转换为MongoDB中的相应查询表达式,并且至少在三重匹配的基础上,以高性能方式进行物化。这并不奇怪;索引做了他们应该做的事情。 <{1}}包含一个RDFS推理器Graph
,一切都很好。
我现在有兴趣探索优化过滤下推到MongoDB的方法。例如,这个SPARQL:
Model
导致MongoDB ?s a:attested "2017-06-01T00:00:00Z"^^xsd:dateTime .
表达式的设置:
find
一切都很好。但是这个SPARQL:
{ "P" : "a:attested", "O" : { "$date" : 1496275200000 } }
导致ARQ仅将谓词传递给?s a:attested ?theDate .
FILTER (?theDate = "2017-06-01T00:00:00Z"^^xsd:dateTime)
:
Graph::find()
从数据库中提取了很多东西,过滤在ARQ中完成。上面的{ "P" : "a:attested" }
表达式显然不需要简单的相等,但它证明了这一点。
TDB documentation says“...... TDB使用ARQ的FILTER
扩展点。”但是OpExecutor
goes to a To-Do的链接。
任何人都可以指出在ARQ调用OpExecutor
时可以挂钩或以其他方式访问某些内容的任何示例吗?正是在这一点上,我的实现跳转到制作查询,如果我可以询问是否存在过滤器,那么我可以“改进”对查询的限制。在这个时候,我处理阻止过滤在ARQ本身中再次发生再次并不是那么重要。