Casamento em Grafos permite que sejam encontrados padrões no grafo. Essa seção descreve como os valores numa solução podem ser restritas. Há muitas comparações disponíveis – vamos apenas cobrir dois casos destes.
SPARQL fornece uma operação para testar strings, baseada em expressões regulares. Isso inclui a habilidade de testes como SQL "LIKE", no entanto, a sintaxe de expressões regulares é diferente de SQL.
A sintaxe é:
FILTER regex(?x, "pattern" [, "flags"])
O argumento flags é opcional. A flag "i" significa casamento de padrão case-insensitivo.
A consulta (q-f1.rq) procura nomes com um “r” ou “R” neles.
PREFIX vcard: <http://www.w3.org/2001/vcard-rdf/3.0#> SELECT ?g WHERE { ?y vcard:Given ?g . FILTER regex(?g, "r", "i") }
resultados:
------------- | g | ============= | "Rebecca" | | "Sarah" | -------------
A linguagem de expressão regular XQuery regular expression language é a versão codificada da mesma encontrada em Perl.
Muitas vezes, a aplicação necessita filtrar com o valor de uma variável. No arquivo vc-db-2.rdf, nós adicionamos um campo extra para idade. Idade não é definida no esquema de vcard então tivemos que criar uma nova propriedade para usar neste tutorial. RDF permite a mistura de diferentes definições de informação porque URIs são únicas. Note também que a propriedade info:age é tipada.
Nesse pedaço de dado, nós mostramos o valor tipado.
<http://somewhere/RebeccaSmith/> info:age "23"^^xsd:integer ; vCard:FN "Becky Smith" ; vCard:N [ vCard:Family "Smith" ; vCard:Given "Rebecca" ] .
Então a consulta (q-f2.rq) para procurar as pessoas mais velhas que 24 anos é:
PREFIX info: <http://somewhere/peopleInfo#> SELECT ?resource WHERE { ?resource info:age ?age . FILTER (?age >= 24) }
A expressão aritmética precisa estar em parêntesis. A única solução é:
--------------------------------- | resource | ================================= | <http://somewhere/JohnSmith/> | ---------------------------------
Apenas um resultado, resultando na URI para o recurso Jonh Smith. Se consultássemos os mais novos que 24 anos, resultaria em Rebecca Smith. Nada sobre os Jones.
O banco de dados não contém informação sobre a idade dos Jones: não há propriedades info:age nos seus vcards, então a variável age
não recebe um valor, então não é testada.