SPARQL查询结果未显示图形中的任何内容
我正在尝试对下面的数据集运行sparql查询SPARQL查询结果未显示图形中的任何内容,sparql,Sparql,我正在尝试对下面的数据集运行sparql查询 @prefix ex: <http://www.example.com/ont#> . @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . @prefix xsd: <http://www.w3.org/2001/XMLSchema#> . { ex:repository ex:createdBy ex:repOwner; ex:tit
@prefix ex: <http://www.example.com/ont#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
{
ex:repository ex:createdBy ex:repOwner; ex:title "Rep_1".
}
ex:books
{
ex:book_1 a ex:Science; ex:size "100"; ex:title "Science book 1".
ex:book_2 a ex:Science; ex:size "1000"; ex:title "Science book 2".
ex:book_3 a ex:Fantasy; ex:size "100"; ex:title "Fantasy book 1".
}
@前缀ex:。
@前缀rdf:。
@前缀xsd:。
{
ex:repository ex:createdBy ex:repOwner;ex:title“Rep_1”。
}
例:书籍
{
例:书1例:科学;例:尺寸“100”;例:书名“科学书1”。
例:书2例:科学;例:尺寸“1000”;例:书名“科学书2”。
ex:book_3 a ex:Fantasy;ex:size“100”;ex:title“Fantasy book 1”。
}
当我尝试使用sparql进行查询时,得到一个空表结果。我没有从图表中得到任何结果。下面是我的问题
prefix ex: <http://www.example.com/ont#>
prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
prefix xsd: <http://www.w3.org/2001/XMLSchema#>
SELECT * WHERE
{
GRAPH ex:books
{
GRAPH ?g { }
{
?s ?p ?o;
}
}
}
前缀ex:
前缀rdf:
前缀xsd:
选择*WHERE
{
图表例:书籍
{
图?g{}
{
?s?p?o;
}
}
}
它用三角符号表示。有什么帮助吗?您确定已加载数据并正确进行查询吗?如果没有一个完整的最小示例,即用于加载和查询数据的代码(如果您使用命令行/GUI工具执行此操作,则使用相关步骤),我们只能推测 当我将您的数据加载到(免责声明-我是Apache Jena项目的提交者)中时,查询将成功运行并生成以下结果:
------------------------------------------------------
| g | s | p | o |
======================================================
| ex:books | ex:book_1 | ex:title | "Science book 1" |
| ex:books | ex:book_1 | ex:size | "100" |
| ex:books | ex:book_1 | rdf:type | ex:Science |
| ex:books | ex:book_3 | ex:title | "Fantasy book 1" |
| ex:books | ex:book_3 | ex:size | "100" |
| ex:books | ex:book_3 | rdf:type | ex:Fantasy |
| ex:books | ex:book_2 | ex:title | "Science book 2" |
| ex:books | ex:book_2 | ex:size | "1000" |
| ex:books | ex:book_2 | rdf:type | ex:Science |
------------------------------------------------------
你的问题
关于您的查询,有一件奇怪的事情是,您有一个GRAPH?g{}
子句,它是对所有图的空扫描,应该生成所有图的名称(假设行为良好的符合标准的SPARQL实现)。然后将其连接到对ex:books
图形上的s?p?o
扫描
这意味着您将在ex:books
中组合每个可能的图形名称和每个可能的匹配项,因此?g
变量不会告诉您数据来自哪个图形(除非您只有一个命名的图形),我认为这是您的实际意图
请尝试以下操作:
PREFIX ex: <http://www.example.com/ont#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
SELECT * WHERE
{
GRAPH ?g
{
?s ?p ?o;
}
}
如果您确实需要变量中ex:books
的值以供以后处理,则可以使用BIND
将其作为常量引入,例如
PREFIX ex: <http://www.example.com/ont#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
SELECT * WHERE
{
GRAPH ex:books
{
?s ?p ?o;
BIND(ex:books AS ?g)
}
}
如果此操作不返回任何内容,则表明您已错误加载数据或未正确查询数据。如果它确实返回了一些东西,它应该告诉您数据的确切位置和内容
通常情况下,您可能会看到您在某个地方无意中输入了错误,如果加载的数据中的URI与查询不匹配,这通常会导致查询无法返回
PREFIX ex: <http://www.example.com/ont#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
SELECT * WHERE
{
GRAPH ex:books
{
?s ?p ?o;
BIND(ex:books AS ?g)
}
}
SELECT * WHERE
{
{ ?s ?p ?o } UNION { GRAPH ?g { ?s ?p ?o } }
}