当 SPARQL 中有多个条目时使用第二个过滤器
Use second filter when there are multiple entries in 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")&®ex(str(?name), "en")) .}
但它 returns 是一个空的 table。 This 没有用(或者我不能适应我的情况)。
您的 "entries" 似乎是 risk_factor_target
s (owl:has_risk_factor_target
),它们的 risk_element_name
s (owl:has_risk_element_name
) 有多个值。
这些 risk_element_name
值似乎是不同的语言标记翻译,但本应具有相同的含义。
@AKSW 对 filter(langmatches(lang(?name), 'en'))
的建议很好,但请注意,这只会 return ?target
有 是 英语?name
.
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'))
}
我有以下查询:
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")&®ex(str(?name), "en")) .}
但它 returns 是一个空的 table。 This 没有用(或者我不能适应我的情况)。
您的 "entries" 似乎是 risk_factor_target
s (owl:has_risk_factor_target
),它们的 risk_element_name
s (owl:has_risk_element_name
) 有多个值。
这些 risk_element_name
值似乎是不同的语言标记翻译,但本应具有相同的含义。
@AKSW 对 filter(langmatches(lang(?name), 'en'))
的建议很好,但请注意,这只会 return ?target
有 是 英语?name
.
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'))
}