SPARQL if-then-else 语句
SPARQL if-then-else statement
我正在尝试创建一个 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)
}
编辑:如果您还想在没有 <?x ex:n ?n1>
但有 <?id ex:p ?x>
的地方检索 ?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)
}
我正在尝试创建一个 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)
}
编辑:如果您还想在没有 <?x ex:n ?n1>
但有 <?id ex:p ?x>
的地方检索 ?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)
}