如何解决SPARQL if-then-else 语句
我正在尝试创建一个 RDF 图,其中:
如果 ?n1
存在,则将创建以下形式的三元组:<?x ex:n "1">
。
否则,将创建 <?x ex:n "0">
形式的三元组。
我的代码如下:
CONSTRUCT {?x ex:n ?result .}
WHERE {
?x ex:n ?n1 .
BIND (IF(?n1 =" *"^^xsd:string,"0","1") AS ?result)
}
但是,只创建值 ?n1
存在的三元组 (<?x ex:n "1">
)。
我想念形式的三元组:<?x ex:n "0">
。
为什么会这样?
解决方法
" *"^^xsd:string
不会检查您的字符串是否为空。相反,它的字面意思是“四个空格后跟一个星号”。
要检查字符串是否与模式匹配,您应该使用 SPARQL REGEX
函数。因此,您可能需要使用 REGEX(?n1,"^ *$")
,其中 ^
和 $
分别匹配模式的开始和结束,而 *
是零个或多个量词。>
CONSTRUCT { ?x ex:n ?result . }
WHERE {
?x ex:n ?n1 .
BIND (IF(REGEX(?n1,"^ *$"),"0","1") AS ?result)
}
EDIT:如果您还想检索没有 ?x
但有 <?x ex:n ?n1>
的 <?id ex:p ?x>
的值,您可以执行以下操作:
CONSTRUCT { ?x ex:n ?result . }
WHERE {
{ ?id ex:p ?x . } UNION { ?x ex:n ?n1 . }
BIND (IF(!BOUND(?n1) || REGEX(?n1,"1") AS ?result)
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。