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

当SPARQL中有多个条目时,使用第二个过滤器,sparql,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:h

我有以下疑问:

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") .}
前缀owl:
选择不同的?名称?值?条件?条件
哪里
{
节点猫头鹰:具有可观察的条件。
?节点owl:具有\u风险\u证据\u比率\u值?值。
?节点猫头鹰:有风险因素。
因子owl:有风险因子目标。
?目标猫头鹰:具有\u风险\u元素\u名称?名称。
?节点owl:具有可观察的条件?条件?条件?json。
过滤正则表达式(str(?条件),“OB_58”)。}
可以找到查询的结果

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

前缀owl:
选择不同的?名称?值?条件?条件
哪里
{
节点猫头鹰:具有可观察的条件。
?节点owl:具有\u风险\u证据\u比率\u值?值。
?节点猫头鹰:有风险因素。
因子owl:有风险因子目标。
?目标猫头鹰:具有\u风险\u元素\u名称?名称。
?节点owl:具有可观察的条件?条件?条件?json。
过滤器(正则表达式(str(?condition),“OB_58”)&正则表达式(str(?name),“en”)。}
但它返回一个空表。你的“条目”似乎是
risk\u factor\u target
s(
owl:has\u risk\u factor\u target
),它们的
risk\u元素名称有多个值(
owl:has\u risk\u element\u name

那些
risk\u element\u name
值似乎是具有相同含义的不同语言标记的翻译

@AKSW建议使用
过滤器(langmatches(lang(?name),'en'))
,这很好,但请注意,这只会返回有英文
名称的
?目标

完成修订和--

前缀owl:
选择不同的?名称?值?条件?条件
哪里
{
节点猫头鹰:具有可观察的条件。
?节点owl:具有\u风险\u证据\u比率\u值?值。
?节点猫头鹰:有风险因素。
因子owl:有风险因子目标。
?目标猫头鹰:具有\u风险\u元素\u名称?名称。
?节点owl:具有可观察的条件?条件?条件?json。
过滤正则表达式(str(?条件),“OB_58”)。
过滤器(langmatches(lang(?name),'en'))
}

filter(langmatches(lang(?name),'en'))
谢谢你,我想所有条目都至少有一个英文名称,我需要的所有条目都会出现在结果中。我最终使用了FILTER(regex(str(?condition),“ob58”)&langmatches(lang(?name),“en”),我不知道你可以像那样堆叠过滤器(第一次使用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")&&regex(str(?name), "en")) .}
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") .
  FILTER (langmatches(lang(?name), 'en')) 
}