当SPARQL中有多个条目时,请使用第二个过滤器

时间:2018-01-16 18:20:51

标签: sparql

我有以下查询:

PREFIX  owl: <http://carre.kmi.open.ac.uk/ontology/risk.owl#>

SELECT distinct ?name ?value ?condition ?condition_json 
WHERE
{
?node owl:has_observable_condition ?condition .
?node owl:has_risk_evidence_ratio_value ?value .
?node owl:has_risk_factor ?factor.
?factor owl:has_risk_factor_target ?target.
?target owl:has_risk_element_name ?name.
?node owl:has_observable_condition_json ?condition_json .
FILTER regex(str(?condition), "OB_58") .}

查询结果可以找到here

正如您在第一列中看到的那样,所有条目(正确的术语?)都有3个元素名称,这使得数据自身重复2次。有没有办法只显示一个? (最好是英国人?)我试过

PREFIX  owl: <http://carre.kmi.open.ac.uk/ontology/risk.owl#>

SELECT distinct ?name ?value ?condition ?condition_json 
WHERE
{
  ?node owl:has_observable_condition ?condition .
  ?node owl:has_risk_evidence_ratio_value ?value .
  ?node owl:has_risk_factor ?factor.
  ?factor owl:has_risk_factor_target ?target.
  ?target owl:has_risk_element_name ?name.
  ?node owl:has_observable_condition_json ?condition_json .
  FILTER (regex(str(?condition), "OB_58")&&regex(str(?name), "en")) .}

但它返回一个空表。 This无效(或者我无法适应我的情况)。

1 个答案:

答案 0 :(得分:1)

您的“条目”似乎是risk_factor_target s(owl:has_risk_factor_target),其risk_element_name s(owl:has_risk_element_name)有多个值。

这些risk_element_name值似乎是不同的lang-tagged翻译,意思是具有相同的含义。

@ AKSW对filter(langmatches(lang(?name), 'en'))的建议很好,但请注意,这只会返回 英语?target的{​​{1}}。

完整修订后的queryresults -

?name