1:- module(search_util,
    2          [
    3           % must be exposed so it can be expanded in query rewrites
    4           label_or_synonym_pred_hook/1,
    5
    6           lmatch/2,
    7           
    8           psearch/5,
    9           psearch/4,
   10           psearch/3,
   11
   12           tsearch/6,
   13           tsearch/5,
   14           tsearch/4,
   15           tsearch/3,
   16           tsearch/2,
   17           
   18           lsearch/2,
   19           lsearch/3,
   20           lsearch/4,
   21           lsearch/5
   22          ]).   23
   24:- use_module(library(semweb/rdf11)).   25:- use_module(library(semweb/rdfs)).   26:- use_module(library(sparqlprog/owl_util)).   27%:- use_module(library(sparqlprog/ontologies/owl), [label/2]).
   28:- use_module(library(sparqlprog/emulate_builtins)).
 lmatch(+Pattern:atom, ?Object) is nondet
Uses swi-prolog rdf11 'like' matching:

NOTE: this will NOT do a conversion to STR in SPARQL; e.g SELECT ?x WHERE {FILTER (regex(?v0,"^cell$","i")) . ?x http://www.w3.org/2000/01/rdf-schema#label ?v0}

   40lmatch(P,C) :-   {like(L,P)},rdf(C,rdfs:label,L).
 lsearch(+Pattern, ?Object, ?Label, +Flags:str, ?Graph) is nondet
search for objects with an rdfs:label matching Pattern

NOTE: this will do a conversion to STR in SPARQL; e.g SELECT ?x WHERE {?x http://www.w3.org/2000/01/rdf-schema#label ?v0 . FILTER (regex(STR(?v0),"^cell$","i"))}

   49lsearch(P,C,L,F,G) :-   rdf(C,rdfs:label,L,G),regex(str(L),P,F).
   50lsearch(P,C,L,F) :-   label(C,L),regex(str(L),P,F).
   51lsearch(P,C,L) :-   label(C,L),regex(str(L),P,"i").
   52lsearch(P,C) :-   label(C,L),regex(str(L),P,"i").
 lsearch(+Pattern, ?Object, ?Pred, ?Label, +Flags:str) is nondet
search for objects with any property matching Pattern
   57psearch(P,C,R,L,F) :-   rdf(C,R,L),regex(str(L),P,F).
   58psearch(P,C,R,L) :-   rdf(C,R,L),regex(str(L),P,"i").
   59psearch(P,C,R) :-   rdf(C,R,L),regex(str(L),P,"i").
 tsearch(+Pattern, ?Object, ?Label, +Flags:str, ?Graph) is nondet
term search: find objects with an rdfs:label or synonym-like property matching Pattern
   64tsearch(P,C,Pred,L,F,G) :-   label_or_synonym_pred_hook(Pred), rdf(C,Pred,L,G),regex(str(L),P,F).
   65tsearch(P,C,Pred,L,F) :-   tsearch(P,C,Pred,L,F,_).
   66tsearch(P,C,Pred,L) :-   tsearch(P,C,Pred,L,"i",_).
   67tsearch(P,C,Pred) :-   tsearch(P,C,Pred,_,"i",_).
   68tsearch(P,C) :-   tsearch(P,C,_,_,"i",_).
   69
   70:- rdf_meta label_or_synonym_pred_hook(r).
   71:- multifile label_or_synonym_pred_hook/1.   72label_or_synonym_pred_hook(rdfs:label).
   73label_or_synonym_pred_hook('http://www.geneontology.org/formats/oboInOwl#hasRelatedSynonym').
   74label_or_synonym_pred_hook('http://www.geneontology.org/formats/oboInOwl#hasNarrowSynonym').
   75label_or_synonym_pred_hook('http://www.geneontology.org/formats/oboInOwl#hasBroadSynonym').
   76label_or_synonym_pred_hook('http://www.geneontology.org/formats/oboInOwl#hasExactSynonym')