我有一些RDF数据结构如下:
[ pref:ip_address "127.0.0.1" ;
pref:time "1459630844.482" ;
pref:url "https://google.com" ;
pref:user "johndoe"
] .
我需要查询将返回与给定IP,时间范围(时间和结束时间之间),网址(甚至部分匹配)和用户(甚至部分匹配)匹配的所有结果。
我现在拥有的是基于单个值获取结果的简单查询,如下所示:
PREFIX pref: <http://something> SELECT DISTINCT * WHERE { ?u pref:user USER_VALUE . ?u ?p ?o . }
这将返回给定用户的所有结果,但仅限于给定的用户名完全匹配。这意味着如果USER_VALUE为johndoe
,它将返回johndoe
的所有结果,但如果是john
则不会返回。{
我对SPARQL的了解非常有限,我感谢您的帮助。谢谢。
答案 0 :(得分:1)
要完成除完全匹配以外的任何操作,您需要使用FILTER
并使用CONTAINS
或REGEX
等操作。
示例:
{ ?u pref:user ?user .
?u ?p ?o .
FILTER( CONTAINS(?user, "john") )
}
有许多FILTER功能可能很有用,包括REGEX。有关详细信息,请参阅规范。