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

我正在尝试对下面的数据集运行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: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 } }
}