在iSQL中的SPARQL查询的Virtuoso SQL查询

时间:2016-11-02 00:55:51

标签: sparql virtuoso

我正在浏览此link,它使用EXPLAIN()向我们展示Virtuoso为输入SPARQL查询生成(内部使用)的SQL查询。我在我的Virtuoso 7.x版本上试过它,发现我得到了不同的输出。我无法完全理解输出。是否有可能解释iSQL的这个输出意味着什么以及如何从中解释SQL查询?

SPARQL查询

SPARQL SELECT DISTINCT ?s FROM <http://dbpedia.org> WHERE {
?s a <http://dbpedia.org/ontology/Cricketer> . 
?s <http://dbpedia.org/property/testdebutyear> ?o . 
};

我得到的输出是

{ 
Subquery 27 
{ 
RDF_QUAD   3.2e+03 rows(s_1_2_t1.S)
 inlined  P =  #/testdebutyear  G =  #/dbpedia.org 
RDF_QUAD unq       0.8 rows (s_1_2_t0.S)
 inlined  P =  ##type  ,  S = s_1_2_t1.S ,  O =  #/Cricketer  ,  G =  #/dbpedia.org 
Distinct (s_1_2_t0.S)

After code:
      0: s :=  := artm s_1_2_t0.S
      4: BReturn 0
Subquery Select(s)
}

After code:
      0: s := Call __ro2sq (s)
      5: BReturn 0
Select (s)
}

20 Rows. -- 2 msec.

在这种情况下如何找到SQL查询?是否有我遗失的命令或链接?

1 个答案:

答案 0 :(得分:1)

要回答您的具体问题,您可以阅读further down the same page you pointed to above,了解如何“将SPARQL查询转换为对应的SQL”。

还讨论了on another feature-specific page

(另请注意,这两个页面上的示例输出来自Virtuoso 6.x,而您运行的是7.x,因此您的输出可能仍会有所不同。)

这是我从当地的Virtuoso 7.2.4(商业版)获得的内容 -

SQL> SET SPARQL_TRANSLATE ON ; 
SQL> SELECT DISTINCT ?s FROM <http://dbpedia.org> WHERE { ?s a <http://dbpedia.org/ontology/Cricketer> . ?s <http://dbpedia.org/property/testdebutyear> ?o . } ; 
SPARQL_TO_SQL_TEXT
LONG VARCHAR
_______________________________________________________________________________

 SELECT  __ro2sq ("s_1_2_rbc"."s") AS "s" FROM (SELECT DISTINCT "s_1_2_t0"."S" AS "s"
  FROM DB.DBA.RDF_QUAD AS "s_1_2_t0"
    INNER JOIN DB.DBA.RDF_QUAD AS "s_1_2_t1"
    ON (
      "s_1_2_t0"."S" = "s_1_2_t1"."S")
  WHERE
    "s_1_2_t0"."G" = __i2idn ( __bft( 'http://dbpedia.org' , 1))
    AND 
    "s_1_2_t0"."P" = __i2idn ( __bft( 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type' , 1))
    AND 
    "s_1_2_t0"."O" = __i2idn ( __bft( 'http://dbpedia.org/ontology/Cricketer' , 1))
    AND 
    "s_1_2_t1"."G" = __i2idn ( __bft( 'http://dbpedia.org' , 1))
    AND 
    "s_1_2_t1"."P" = __i2idn ( __bft( 'http://dbpedia.org/property/testdebutyear' , 1))
OPTION (QUIETCAST)) AS "s_1_2_rbc"

1 Rows. -- 3 msec.
SQL> SET SPARQL_TRANSLATE OFF ;

注意 - 此功能仅在命令行iSQL中可用;在基于浏览器的iSQL界面中找不到它。

所有这一切......我强烈建议你向我们提出你的初步问题,而不是被XY Problems分散注意力。关于四元数据的单个表(DB.DBA.RDF_QUAD)几乎没有什么可以理解的,默认情况下它有2个完整索引和3个部分索引,这些索引足以满足大多数典型用途all as discussed in the documentation

对于特定于Virtuoso的问题,Virtuoso Users mailing list通常是比这里更好的资源,在这里您往往会得到相当多的猜测答案。

(ObDisclaimer:我为OpenLink Software的制作人Virtuoso工作。)