gpt4 book ai didi

sparql - SPARQL/CONSTRUCT 中的条件绑定(bind)

转载 作者:行者123 更新时间:2023-12-03 09:10:55 24 4
gpt4 key购买 nike

我有一个 SPARQL CONSTRUCT,其工作原理如下:

CONSTRUCT {
?uri rdfs:label ?label;
foo:has-value ?v.
}
WHERE {
?uri
rdfs:label ?label;
foo:has-flag ?f.

BIND ( IF ( ?f = 0, "Value for Zero", IF ( ?f = 1, "Value for One", '' ) ) AS ?v )
}

问题是,当 ?f 既不是 0 也不是 1(但仍然有一些值)时,我根本不需要 has-value 语句。使用上面的语法,我得到 ?uri has-value ''。如果我可以将某种“null”分配给 ?v 或避免绑定(bind),那么它会起作用,但我在规范中找不到类似的内容。

有什么解决办法吗?

编辑:solution by Scott适用于常见的基于图形的查询。我来自的案例涉及 VALUES 的使用,is more complicated到目前为止我还没有找到解决方案。

编辑/2:error-triggering solution ,安迪在耶拿邮件列表中建议的,效果很好!我发现更具可读性的另一种方法是 binding an unbound variable当我们想要跳过原始值时。

最佳答案

根据评论中的反馈,这是一个基于OPTIONAL的解决方案,该解决方案应满足所有标准:

CONSTRUCT {
?uri rdfs:label ?label;
foo:has-value ?v.
}
WHERE {
?uri rdfs:label ?label .
?uri foo:has-flag ?f.
OPTIONAL { FILTER (?f = 0)
BIND("Value for Zero" AS ?v)
}
OPTIONAL { FILTER (?f = 1)
BIND("Value for One" AS ?v)
}
}

正如所指出的,之前的解决方案不会涵盖有标签但 ?f 不是 0 或 1 的情况:

CONSTRUCT {
?uri rdfs:label ?label;
foo:has-value ?v.
}
WHERE {
?uri
rdfs:label ?label;
foo:has-flag ?f.
FILTER (?f = 0 || ?f = 1)
BIND ( IF ( ?f = 0, "Value for Zero", IF ( ?f = 1, "Value for One", '' ) ) AS ?v )
}

关于sparql - SPARQL/CONSTRUCT 中的条件绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42461194/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com