我将用户定义的查询到SPARQL。 例如,当用户说,“ABC”,它的意思给我这有一些属性名为“abc”给定类型的所有节点。 作为这样的一个延伸,如果用户说,“ABC或(PQR和LMN)”,我需要找到一个给定类型,其中一些属性是“ABC或(PQR和LMN)”的所有节点。 以下是我想出了查询:
SELECT DISTINCT ?node, ?type
WHERE
{
{
?node a ?type .
FILTER ( ?type != <sometype>)
}
{
{
?node ?reln0 ?obj0 .
FILTER ( regex(str(?obj0), 'abc', "i") )
}
UNION
{
{
?node ?reln1 ?obj1 .
FILTER ( regex(str(?obj1), 'pqr', "i") )
}
{
?node ?reln2 ?obj2 .
FILTER ( regex(str(?obj2), 'lmn', "i") )
}
}
}
}
ORDER BY ?node
但是,它不会返回正确的结果。 是不是有什么毛病上面给出的查询? 我不想用下面的,因为我需要动态生成的条件和每个子句必须分开。
FILTER (regex(str(?obj2), 'abc', "i") || regex(str(?obj2), 'pqr', "i") && regex(str(?obj2), 'lmn', "i"))