首先我应该提到我正在使用 C-SPARQL,它用于流推理,所以我有与三元组相关的时间戳。下面是一个查询,它返回给我一个主题和谓词,以及使用 C-SPARQL 中的时间戳函数分配给它的最新时间戳(我希望),但是我希望它返回与此时间戳关联的对象值也是。有任何想法吗?我试图将 ?o 粘贴到 select 子句中,但这会产生 NON-group key 错误。
"REGISTER QUERY StreamQuery AS "
+ "PREFIX ex: <http://localhost/default/tr069#> "
+ "PREFIX f: <http://larkc.eu/csparql/sparql/jena/ext#> "
+ "SELECT DISTINCT ?s ?p (MAX(f:timestamp(?s,?p,?o)) AS ?ts)"
+ "FROM STREAM <http://localhost/default/tr069> [RANGE 5s STEP 1s] "
+ "WHERE { ?s ?p ?o . "
+ "} GROUP BY ?s ?p "
如果我还不够清楚,请询问。
编辑:经过一番摆弄,我似乎得到了看起来正确的结果,但不介意听到其他人对我所做的事情的看法。
"REGISTER QUERY StreamQuery AS "
+ "PREFIX ex: <http://localhost/default/tr069#> "
+ "PREFIX f: <http://larkc.eu/csparql/sparql/jena/ext#> "
+ "SELECT DISTINCT ?s ?p ?o "
+ "FROM STREAM <http://localhost/default/tr069> [RANGE 5s STEP 1s] "
+ "WHERE { ?s ?p ?o . "
+ "{SELECT ?s ?p (MAX(f:timestamp(?s,?p,?o)) AS ?ts) WHERE{?s ?p ?o} GROUP BY ?s ?p}"
+ " FILTER(f:timestamp(?s,?p,?o)=?ts) } "