2017-05-24 81 views
-1

我想在data.admin.ch使用SPARQL查詢:SPARQL前綴與篩選

PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> 
SELECT distinct (?z as ?Variable) (?ptype as ?Bevoelkerungstyp) (?remuniuri as ?Meldegmeinde) ?age ?sex ?person 
where 
{ 
?z <http://data.admin.ch/bfs/property/POPULATIONTYPE> ?ptype. 
?z <http://data.admin.ch/bfs/property/REPORTINGMUNICIPALITYID> ?remuniuri. 
?z <http://data.admin.ch/bfs/property/AGE> ?age. 
?z <http://data.admin.ch/bfs/property/SEX> ?sex. 

我需要年齡限制爲7-22,但它不工作。

我想:

SELECT distinct (SUM(xsd:int(?number)) AS ?child_inhabitants) WHERE 

,然後用過濾:

FILTER ((xsd:int(?pnumber)) <= 22 && (xsd:int(?agenumber)) <= 7) 
+0

是你的數據嗎?如果是這樣,爲什麼年齡建模爲URI? – AKSW

+0

是的,這是我的。因爲我需要過濾出Z世代(1995 - 2010年)。 – TK7

+0

Ehm,我理解FILTER,但不明白爲什麼數據集中的年齡被建模爲URI而不是純整數值。這就是我所問的。 – AKSW

回答

2
  • 您的查詢似乎缺少一個右}
  • 的兩個年齡過濾器是小於
  • 數字,?pnumber或?agenumber如何綁定到查詢的頂部?

的替代斯坦尼斯的答案,不使用任何字符串操作

PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> 
PREFIX skos: <http://www.w3.org/2004/02/skos/core#> 
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> 

SELECT DISTINCT * 
WHERE 
    { ?z <http://data.admin.ch/bfs/property/POPULATIONTYPE> ?ptype ; 
      <http://data.admin.ch/bfs/property/REPORTINGMUNICIPALITYID> ?remuniuri ; 
      <http://data.admin.ch/bfs/property/AGE> ?age ; 
      <http://data.admin.ch/bfs/property/SEX> ?sex . 
    ?age skos:notation   ?ageval 
    FILTER ((xsd:int(?ageval) <= 22) && (xsd:int(?ageval) >= 7)) 
    } 
LIMIT 99 
+0

非常感謝! – TK7