- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 Stardog 中创建了一个自定义聚合函数来计算标准差。当您将 SPARQL 查询发布到端点或通过管理控制台中的查询面板时,这非常有用。
到目前为止,一切顺利,但我们面临一些问题。首先,当我们执行如下查询时,它会通过Stardog完美执行,但会在 the SPARQL validator 中失败。 (以及耶拿 API):
PREFIX : <http://our/namespace#>
PREFIX agg: <urn:aggregate:>
SELECT (agg:stardog:stdev(?age) AS ?stdLMD) (AVG(?age) AS ?avg)
WHERE {
?pat a :Person .
?pat :age ?age .
}
Stardog 给出了标准差和平均年龄的正确结果,但 SPARQL validator 抛出异常:
Non-group key variable in SELECT: ?age in expression (?age)
Stardog 对规范的解释是否不同,或者这是我不知道的功能?
另一个问题是,我们在 CONSTRUCT 查询中使用自定义聚合函数 (stdev),并且通过 Stardog API 似乎也可以正常工作。我们的大部分代码都是基于 Jena,并且它似乎无法识别自定义的 stdev 函数。我猜是因为这个扩展仅与 Stardog 相关并且不适用于耶拿?让我举个例子。 ATM,我们通过以下 Jena 代码执行 CONSTRUCT 查询:
final Query dbQuery = QueryFactory.create(query.getContent());
final QueryExecution queryExec = QueryExecutionFactory.create(dbQuery, model);
queryExec.execConstruct(infModel);
只要我们不使用聚合函数,这就像一个魅力。当我们在多个命名图中构建三元组时,拥有一个可用的模型(代表命名图)会非常方便。
我想用 Stardog java API 做类似的事情。我只做到了:
UpdateQuery dbQuery;
try {
dbQuery = connection.update(query.getContent());
dbQuery.execute();
} catch (final StardogException e) {
LOGGER.error("Cannot execute CONSTRUCT query", e);
}
问题是您明确需要指定要在 CONSTRUCT 查询中操作的命名图。没有什么比 Jena 模型更能代表数据库的一部分,这样我们就可以避免在查询中指定它。这里有什么好的方法吗?
所以我的问题是双重的:为什么 Stardog 中的查询解析方式不同?是否可以让 Jena 检测自定义 Stardog 聚合函数?谢谢!
更新
最后,我们想要完成的是对给定的命名图执行构造查询,但将新构造的三元组写入不同的图。在我的 Jena 示例中,您可以看到我正在使用两个 Jena 模型来实现这一目标。您将如何使用 SNARL API 来做到这一点?我已经得到了以下代码片段,但这仅定义了将执行此查询的数据集,而不定义了三元组将写入的位置。对此的任何帮助仍然值得赞赏!
UpdateQuery dbQuery;
try {
dbQuery = connection.update(query.getContent());
final DatasetImpl ds = new DatasetImpl();
ds.addNamedGraph(new URIImpl(infDatasource));
dbQuery.dataset(ds);
dbQuery.execute();
} catch (final StardogException e) {
LOGGER.error("Cannot execute CONSTRUCT query", e);
}
最佳答案
错误的可能原因
Non-group key variable in SELECT: ?age in expression (?age)
SPARQL validator 和 ARQ 不知道 agg:stardog:stdev
是一个聚合,并且不会以这种方式解释它。正如 AndyS 所说,语法与标准投影表达式没有什么不同,例如 (?x + ?y as ?sum)
。
虽然 SPARQL 规范并不完全排除自定义聚合,但语法本身并未考虑它们。 Stardog 和 Jena 都允许自定义聚合,尽管方式不同。
Another problem, we're using a custom aggregate function (stdev) in a CONSTRUCT query and again that seems to be working fine via the Stardog API's. Most of our code though is based on Jena, and it doesn't seem to recognize the custom stdev fuction. I guess because this extension is only Stardog related and unavailable for Jena?
是的,Jena 和 Stardog 是不同的。您在 Stardog 中定义的任何自定义内容(例如自定义聚合)将无法直接在 Jena 中使用。
您可能会以这样的方式构建模型:Jena 通过 ARQ 作为查询引擎,而不是 Stardog。这可以解释为什么您会遇到 Jena 不知道您在 Stardog 中定义的自定义聚合的异常。
There's nothing like a Jena model that represents a part of the database so that we can avoid specifying it in the query. What would be a good approach here?
您可以使用 dataset 通过 SNARL API 以编程方式指定查询的 Activity 图
So my question is twofold: why are queries parsed differently in Stardog and is it possible to have Jena detect the custom Stardog aggregate functions? Thanks!
它们的解析方式不同,因为没有定义自定义聚合的标准方法,而 Stardog 和 Jena 选择以不同的方式实现它。此外,Jena 不会知道 Stardog 的自定义聚合,反之亦然。
关于java - Stardog 自定义聚合函数在耶拿不可用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35849008/
C语言sscanf()函数:从字符串中读取指定格式的数据 头文件: ?
最近,我有一个关于工作预评估的问题,即使查询了每个功能的工作原理,我也不知道如何解决。这是一个伪代码。 下面是一个名为foo()的函数,该函数将被传递一个值并返回一个值。如果将以下值传递给foo函数,
CStr 函数 返回表达式,该表达式已被转换为 String 子类型的 Variant。 CStr(expression) expression 参数是任意有效的表达式。 说明 通常,可以
CSng 函数 返回表达式,该表达式已被转换为 Single 子类型的 Variant。 CSng(expression) expression 参数是任意有效的表达式。 说明 通常,可
CreateObject 函数 创建并返回对 Automation 对象的引用。 CreateObject(servername.typename [, location]) 参数 serv
Cos 函数 返回某个角的余弦值。 Cos(number) number 参数可以是任何将某个角表示为弧度的有效数值表达式。 说明 Cos 函数取某个角并返回直角三角形两边的比值。此比值是
CLng 函数 返回表达式,此表达式已被转换为 Long 子类型的 Variant。 CLng(expression) expression 参数是任意有效的表达式。 说明 通常,您可以使
CInt 函数 返回表达式,此表达式已被转换为 Integer 子类型的 Variant。 CInt(expression) expression 参数是任意有效的表达式。 说明 通常,可
Chr 函数 返回与指定的 ANSI 字符代码相对应的字符。 Chr(charcode) charcode 参数是可以标识字符的数字。 说明 从 0 到 31 的数字表示标准的不可打印的
CDbl 函数 返回表达式,此表达式已被转换为 Double 子类型的 Variant。 CDbl(expression) expression 参数是任意有效的表达式。 说明 通常,您可
CDate 函数 返回表达式,此表达式已被转换为 Date 子类型的 Variant。 CDate(date) date 参数是任意有效的日期表达式。 说明 IsDate 函数用于判断 d
CCur 函数 返回表达式,此表达式已被转换为 Currency 子类型的 Variant。 CCur(expression) expression 参数是任意有效的表达式。 说明 通常,
CByte 函数 返回表达式,此表达式已被转换为 Byte 子类型的 Variant。 CByte(expression) expression 参数是任意有效的表达式。 说明 通常,可以
CBool 函数 返回表达式,此表达式已转换为 Boolean 子类型的 Variant。 CBool(expression) expression 是任意有效的表达式。 说明 如果 ex
Atn 函数 返回数值的反正切值。 Atn(number) number 参数可以是任意有效的数值表达式。 说明 Atn 函数计算直角三角形两个边的比值 (number) 并返回对应角的弧
Asc 函数 返回与字符串的第一个字母对应的 ANSI 字符代码。 Asc(string) string 参数是任意有效的字符串表达式。如果 string 参数未包含字符,则将发生运行时错误。
Array 函数 返回包含数组的 Variant。 Array(arglist) arglist 参数是赋给包含在 Variant 中的数组元素的值的列表(用逗号分隔)。如果没有指定此参数,则
Abs 函数 返回数字的绝对值。 Abs(number) number 参数可以是任意有效的数值表达式。如果 number 包含 Null,则返回 Null;如果是未初始化变量,则返回 0。
FormatPercent 函数 返回表达式,此表达式已被格式化为尾随有 % 符号的百分比(乘以 100 )。 FormatPercent(expression[,NumDigitsAfterD
FormatNumber 函数 返回表达式,此表达式已被格式化为数值。 FormatNumber( expression [,NumDigitsAfterDecimal [,Inc
我是一名优秀的程序员,十分优秀!