3

ユーザー定義クエリを 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"))
4

1 に答える 1