2017-06-04 44 views
0

我想要做一个测试查询,并且我想根据从表达式分配的变量进行过滤。以下是在美国总统奥巴马出生之前找到美国总统的测试查询:通过从表达式中的变量过滤

PREFIX db: <http://dbpedia.org/resource/> 
    PREFIX dbprop: <http://dbpedia.org/property/> 
    PREFIX dbc: <http://dbpedia.org/resource/Category:> 
    PREFIX dct: <http://purl.org/dc/terms/> 

    SELECT ?president (min(?termStart) as ?minTermStart) ?birthDate 
    WHERE { 
    db:Barack_Obama dbprop:birthDate ?birthDate . 
    ?president dct:subject dbc:Presidents_of_the_United_States . 
    ?president dbprop:termStart ?termStart . 
    filter($minTermStart < ?birthDate) . 
    } 

没有结果。

拿走filter(minTermStart < ?birthDate)给出如下:

           president minTermStart birthDate 
1  <http://dbpedia.org/resource/John_Quincy_Adams> -5527303492 -265456800 
2  <http://dbpedia.org/resource/William_Howard_Taft> -2454919492 -265456800 
3  <http://dbpedia.org/resource/William_McKinley> -2929428292 -265456800 
4   <http://dbpedia.org/resource/Woodrow_Wilson> -1860573600 -265456800 
5  <http://dbpedia.org/resource/Chester_A._Arthur> -3439706692 -265456800 
6   <http://dbpedia.org/resource/James_Monroe> -5653274692 -265456800 
7   <http://dbpedia.org/resource/Zachary_Taylor> -3813041092 -265456800 
8   <http://dbpedia.org/resource/Calvin_Coolidge> -1703757600 -265456800 
9   <http://dbpedia.org/resource/John_F._Kennedy> -725709600 -265456800 
10 <http://dbpedia.org/resource/Franklin_D._Roosevelt> -1792317600 -265456800 
11   <http://dbpedia.org/resource/George_W._Bush> 790261200 -265456800 
12   <http://dbpedia.org/resource/Gerald_Ford> -662551200 -265456800 
13   <http://dbpedia.org/resource/Barack_Obama> 852642000 -265456800 
14   <http://dbpedia.org/resource/Bill_Clinton> 221058000 -265456800 
15  <http://dbpedia.org/resource/Abraham_Lincoln> -3876199492 -265456800 
16   <http://dbpedia.org/resource/Richard_Nixon> -725709600 -265456800 
17  <http://dbpedia.org/resource/Millard_Fillmore> -4317962692 -265456800 
18 <http://dbpedia.org/resource/Rutherford_B._Hayes> -3308119492 -265456800 
19  <http://dbpedia.org/resource/Warren_G._Harding> -2082016800 -265456800 
20  <http://dbpedia.org/resource/Thomas_Jefferson> -6138929092 -265456800 
21  <http://dbpedia.org/resource/Martin_Van_Buren> -4696653892 -265456800 
22   <http://dbpedia.org/resource/Herbert_Hoover> -1540893600 -265456800 
23   <http://dbpedia.org/resource/Jimmy_Carter> -219837600 -265456800 
24   <http://dbpedia.org/resource/James_K._Polk> -4570423492 -265456800 
25  <http://dbpedia.org/resource/Lyndon_B._Johnson> -1032861600 -265456800 
26 <http://dbpedia.org/resource/Dwight_D._Eisenhower> -777981600 -265456800 
27  <http://dbpedia.org/resource/George_Washington> -6142471492 -265456800 
28   <http://dbpedia.org/resource/James_Buchanan> -4696653892 -265456800 
29    <http://dbpedia.org/resource/John_Tyler> -4829537092 -265456800 
30   <http://dbpedia.org/resource/Ronald_Reagan> -94644000 -265456800 
31  <http://dbpedia.org/resource/James_A._Garfield> -3371277892 -265456800 
32 <http://dbpedia.org/resource/William_Henry_Harrison> -5412391492 -265456800 
33    <http://dbpedia.org/resource/John_Adams> -6142471492 -265456800 
34  <http://dbpedia.org/resource/George_H._W._Bush> -94557600 -265456800 
35   <http://dbpedia.org/resource/Andrew_Johnson> -4002429892 -265456800 
36   <http://dbpedia.org/resource/James_Madison> -5959130692 -265456800 
37  <http://dbpedia.org/resource/Benjamin_Harrison> -2803197892 -265456800 
38  <http://dbpedia.org/resource/Ulysses_S._Grant> -3339223492 -265456800 
39   <http://dbpedia.org/resource/Andrew_Jackson> -5461725892 -265456800 
40  <http://dbpedia.org/resource/Grover_Cleveland> -2776932292 -265456800 
41  <http://dbpedia.org/resource/Franklin_Pierce> -4317962692 -265456800 
42  <http://dbpedia.org/resource/Harry_S._Truman> -1356256800 -265456800 
43  <http://dbpedia.org/resource/Theodore_Roosevelt> -2777018692 -265456800 

使用filter(minTermStart < \"1961-08-03\"^^xsd:date)还没有给出结果。 为什么过滤器表达式不起作用?我错过了什么?

回答

0

“没有结果”?

您的查询不编译,并导致一个错误,如果你对http://dbpedia.org/sparql运行:

  1. minTermStart缺少?
  2. 它必须是termStart代替
PREFIX dbc: <http://dbpedia.org/resource/Category:> 
PREFIX dct: <http://purl.org/dc/terms/> 
PREFIX db: <http://dbpedia.org/resource/> 
PREFIX dbprop: <http://dbpedia.org/property/> 

SELECT ?president (MIN(?termStart) AS ?minTermStart) ?birthDate 
WHERE 
    { db:Barack_Obama 
       dbprop:birthDate ?birthDate . 
    ?president dct:subject  dbc:Presidents_of_the_United_States ; 
       dbprop:termStart ?termStart 
    FILTER (?termStart < ?birthDate) 
    } 
GROUP BY ?president ?birthDate 

从哪里获得r也不清楚结果如果你没有过滤器运行,我的显示如下(样本)

+-------------------------------------------------+--------------+------------+ 
|     president     | minTermStart | birthDate | 
+-------------------------------------------------+--------------+------------+ 
| http://dbpedia.org/resource/John_Quincy_Adams | 1794-11-06 | 1961-08-04 | 
| http://dbpedia.org/resource/William_Howard_Taft | 1892-03-17 | 1961-08-04 | 
| http://dbpedia.org/resource/William_McKinley | 1877-03-04 | 1961-08-04 | 
| http://dbpedia.org/resource/Woodrow_Wilson  | 1911-01-17 | 1961-08-04 | 
| http://dbpedia.org/resource/Chester_A._Arthur | 1861-01-01 | 1961-08-04 | 
| http://dbpedia.org/resource/James_Monroe  | 1790-11-09 | 1961-08-04 | 
| http://dbpedia.org/resource/Zachary_Taylor  | 1849-03-04 | 1961-08-04 | 
| ...            | ...   | ...  | 
+-------------------------------------------------+--------------+------------+ 
+0

谢谢,有没有什么办法可以使用$ minTermStart变量进行过滤? – bot3663369

+0

按什么过滤?结果不一样吗?结果不一样吗?如果在birthDate之前有'termStart'的任何值,那么在该数据之前的所有termStart值也有一个最小值。或者有什么区别? – AKSW

+0

否则,'HAVING'可用于过滤聚集函数的值,即'SELECT ... WHERE {...} GROUP BY ... HAVING(?minTermStart AKSW