当我查看查询的代数版本时,我发现上下文
我的四边形中的(图表)是错误的。
INFO exec :: ALGEBRA
(quadpattern (quad <file:///usr/local/apache-jena-2.12.1/bin/facts> ?s ?p ?o))
我知道四边形模式应该是:(quad ?s ?p ?o)
不,它是正确的(如果不是你所期望的)
A quadpattern
搜索四边形,因此包含 4 个字段,第一个字段是要搜索的图的名称
这就是你的问题所在,图形名称是 URI,但你只提供了facts
作为被视为相对 URI 的名称,因此受系统不同部分可能不同的解析的影响。
在您的示例中,查询解析器使用工作目录作为基本 URI,导致您在代数计划中看到奇怪的图形名称。
您可以通过发出以下查询来准确查看 TDB 存储中的图形名称:
SELECT ?g WHERE { GRAPH ?g { } }
如果您获得绝对 URI,则可以直接在原始查询中指定它,如果没有,则无法从命令行查询它。
解决您的问题
尽可能不要使用相对 URI。如果您确实想使用它们,则在未显式指定基本 URI 的情况下不要使用它们
因此,在加载数据的代码中,请确保为图表提供绝对 URI,例如
dataset.addNamedModel("http://example.org/facts", facts);
如果您确实希望能够使用相对 URI 来引用查询中的图表,请使用适当的BASE
声明,以便按照您的需要解析 URI,例如
./tdbquery -v --loc /tdb/ "BASE <http://example.org/> SELECT * { GRAPH <facts> { ?s ?p ?o } }"