簡體   English   中英

Sparql查詢返回值integer,無法過濾得到int

[英]Sparql query returned value integer, cant filter it to get the int

雖然查詢返回國家名稱而不過濾人口,但我使用過濾器獲取 integer 什么都不返回。

PREFIX  dbo:  <http://dbpedia.org/ontology/>

SELECT DISTINCT  str(?country_label) ?population
WHERE
  { 
?country  dct:subject  <http://dbpedia.org/resource/Category:Countries_in_Europe>.
?country rdfs:label ?country_label.
?country dbo:populationTotal ?population.
FILTER langMatches( lang(?country_label), "EN" )
FILTER datatype((?population) = xsd:integer ) 

 }

我不確定你想用這個 FILTER 條件實現什么,但你的查詢返回零結果的原因是沒有一個人口值是數據類型xsd:integer

順便說一句,您的查詢中還有其他問題:在 SELECT 子句中使用類似str()的 function 而不將 function 的結果綁定到新變量是不是合法as?new_var 我知道 DBPedia 端點允許它,但您應該知道,如果您在不同的 SPARQL 引擎上嘗試它,它可能會給您帶來錯誤。

如果您在沒有數據類型過濾器的情況下運行查詢:

PREFIX  dbo:  <http://dbpedia.org/ontology/>
SELECT DISTINCT  (str(?country_label) as ?cl) ?population
WHERE
  { 
?country  dct:subject  <http://dbpedia.org/resource/Category:Countries_in_Europe>.
?country rdfs:label ?country_label.
?country dbo:populationTotal ?population.
FILTER langMatches( lang(?country_label), "EN" )

}

您將看到結果僅包含數據類型xsd:nonNegativeInteger的值。 這是一個不同的數據類型,雖然每個非負 integer 也是一個 integer 當然是正確的,但這種形式的數據類型推斷並不是大多數 SPARQL 端點支持的。

另外:在您對人口的原始過濾條件中,括號放置錯誤。 如果您按如下方式修改查詢:

PREFIX  dbo:  <http://dbpedia.org/ontology/>
SELECT DISTINCT  (str(?country_label) as ?cl) ?population
WHERE
  { 
?country  dct:subject  <http://dbpedia.org/resource/Category:Countries_in_Europe>.
?country rdfs:label ?country_label.
?country dbo:populationTotal ?population.
FILTER langMatches( lang(?country_label), "EN" )
FILTER ( datatype(?population) = xsd:nonNegativeInteger ) 

 }

您將取回屬於該數據類型的所有值 - 盡管如前所述,我不確定您在這里實現了什么,因為這與您在沒有數據類型檢查的情況下獲得的結果相同,盡我所能告訴。

如果您的目標是取回數字,但表示為xsd:integer而不是xsd:nonNegativeInteger

PREFIX  dbo:  <http://dbpedia.org/ontology/>
SELECT DISTINCT  (str(?country_label) as ?cl) (xsd:integer(?population) as ?pop)
WHERE
  { 
?country  dct:subject  <http://dbpedia.org/resource/Category:Countries_in_Europe>.
?country rdfs:label ?country_label.
?country dbo:populationTotal ?population.
FILTER langMatches( lang(?country_label), "EN" )
 }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM