我正在尝试创建一个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
不会检查您的字符串是否为空。相反,它的字面意思是";四个空格后面跟着一个星号";。
为了检查字符串是否与模式匹配,应该使用SPARQLREGEX
函数。因此,您可能想要使用REGEX(?n1, "^ *$")
,其中^
和$
分别匹配模式的开始和结束,*
是零或更多的量词。
CONSTRUCT { ?x ex:n ?result . }
WHERE {
?x ex:n ?n1 .
BIND (IF(REGEX(?n1, "^ *$"), "0", "1") AS ?result)
}
编辑:如果您还想检索?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, "^ *$"), "0", "1") AS ?result)
}