2
我將用戶定義的查詢轉換爲SPARQL。例如,當用戶說「abc」時,它意味着給我一個給定類型的所有節點,它們有一些名爲「abc」的屬性。作爲這個的擴展,如果用戶說「abc或(pqr和lmn)」,我需要找到某個屬性爲「abc或(pqr和lmn)」的給定類型的所有節點。以下是我已經提出的查詢:使用SPARQL查詢進行聯合和交集
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"))
我不明白你爲什麼不與一個大'FILTER'使用第二種方法。它更簡單,它的工作原理。 – cygri 2012-04-13 20:49:45
每個術語可能會更復雜,使得{}的主體更大,並且這些術語將與這些基本案例混合在一起。 FILTER只適用於這種情況。 – 2012-04-13 23:26:02
另外,我發現上面的查詢不適用於Redland。然後我嘗試安裝ARQ,並對其進行處理。所以,它可能與那個特定的實現有關。 – 2012-04-13 23:28:10