Publicação de Dados Governamentais no Padrão Linked Data 3.1 Fundamentos de SPARQL Karin Breitman José Viterbo Edgard Marx Percy Salas L A C Laboratory for Advanced Collaboration
Objetivo deste módulo 1.Apresentar conceitos básicos sobre SPARQL 2
Sumário 1. Introdução 2. Arquitetura 3. SPARQL em 3 partes 4. Consulta 5. Protocolo 6. Conclusão 3
Introdução Triplas RDF Constituem realmente a primeira camada semântica da Web 4
Introdução SPARQL no topo... Uma linguagem de consulta e protocolo de acesso a dados em RDF 5
Introdução SPARQL significa SPARQL Protocol and RDF Query Language 6
7 Arquitetura
SparQL SPARQL em 3 partes parte 1: linguagem de consulta parte 2: formato dos resultados parte 3: protocolo de acesso 8
SELECT... FROM... WHERE {... } 9
Cláusula SELECT Para identificar que valores irão retornar 10
Cláusula FROM Para identificar que fontes de dados devem ser consultadas 11
Cláusula WHERE Os padrões de triplas/grafos a serem localizados na base RDF 12
Cláusula WHERE Uma conjunção de triplas: {?x rdf:type ex:person?x ex:name?name } 13
PREFIX Para declarar o esquema usado na consulta 14
Exemplo: Pessoas e seus nomes PREFIX ex: <http://inria.fr/schema#> SELECT?person?name WHERE {?person rdf:type ex:person }?person ex:name?name. 15
<?xml version="1.0"?> <sparql xmlns="http://www.w3.org/2005/sparql-results#" > <head> <variable name="person"/> <variable name="name"/> </head> <results ordered="false" distinct="false"> <result> <binding name="person"> <uri>http://inria.fr/schema#fg</uri> </binding> <binding name="name"> <literal>gandon</literal> </binding> </result> <result>... 16
FILTER Para adicionar restrições aos padrões de grafos. (p.ex., numerical like X>17 ) 17
Exemplo: Pessoas com pelo menos 18 anos PREFIX ex: <http://inria.fr/schema#> SELECT?person?name WHERE {?person rdf:type ex:person?person ex:name?name.?person ex:age?age. FILTER (?age > 17) } 18
FILTER Pode usar diversos operadores, funções (p.ex: expressões regulares) e mesmo extensões do usuário 19
OPTIONAL Para tornar uma parte do padrão opcional 20
Exemplo: Recuperar a idade, se disponível PREFIX ex: <http://inria.fr/schema#> SELECT?person?name?age WHERE {?person rdf:type ex:person?person ex:name?name. OPTIONAL {?person ex:age?age } } 21
UNION Para definir padrões alternativos em uma consulta. 22
23 Exemplo: Adultos implícitos e explícitos PREFIX ex: <http://inria.fr/schema#> SELECT?name WHERE {?person ex:name?name. { {?person rdf:type ex:adult} UNION {?person ex:age?age FILTER (?age > 17) } } }
Classificação e Formato ORDER BY para classificar LIMIT para o número de resultados OFFSET antes do primeiro resultado 24
25 Exemplo: Resultados 21 a 40 ordenados por nome PREFIX ex: <http://inria.fr/schema#> SELECT?person?name WHERE {?person rdf:type ex:person?person ex:name?name. } ORDER BY?name LIMIT 20 OFFSET 20
UNBOUND Testa se uma variável está ou não instanciada usado para negação por falha 26
Exemplo: Pessoas que não são autores conhecidos PREFIX ex: <http://inria.fr/schema#> SELECT?name WHERE {?person ex:name?name. OPTIONAL {?person ex:author?x } FILTER (!bound(?x)) } 27
Negação É traiçoeira e erros podem ocorrer facilmente. 28
Exemplo: PREFIX ex: <http://inria.fr/schema#> SELECT?name WHERE {?person ex:name?name.?person ex:knows?x FILTER (?x!= "Java" ) } Isto encontra as pessoas que não sabem "java"? 29
NÃO! Também recupera todas as pessoas que sabem Java e alguma coisa a mais! João ex:knows "Java" João ex:knows "C++" João é uma resposta... 30
Pessoas que não se conhece saber Java"... Negação de uma opção. PREFIX ex: <http://inria.fr/schema#> SELECT?name WHERE {?person ex:name?name. OPTIONAL {?person ex:knows?x FILTER (?x = "Java" ) } FILTER (!bound(?x) ) } 31 AGORA SIM!
ASK Para verificar se há pelo menos uma resposta. O resultado é "true" ou "false" 32
Exemplo: Há uma pessoa com mais de 17 anos? PREFIX ex: <http://inria.fr/schema#> ASK {?person ex:age?age FILTER (?age > 17) } 33
CONSTRUCT Retorna um grafo RDF específico para cada resultado 34 34
35 Exemplo: Resultados instâncias de adultos para pessoas com mais de 17 anos PREFIX ex: <http://inria.fr/schema#> CONSTRUCT {?person rdf:type ex:adult } WHERE {?person ex:age?age FILTER (?age > 17) }
Protocolo Protocolo SPARQL Envia consultas e seus resultados através da Web 36
Protocolo Exemplo com HTTP GET /sparql/?query=<encoded query> HTTP/1.1 Host: www.inria.fr User-agent: my-sparql-client/0.1 37
Protocolo Exemplo com SOAP <?xml version="1.0" encoding="utf-8"?> <soapenv:envelope xmlns:soapenv="http://www.w3.org/2003/05/soapenvelope/" xmlns:xsd="http://www.w3.org/2001/xmlschema" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance"> <soapenv:body> <query-request xmlns="http://www.w3.org/2005/09/sparqlprotocol-types/#"> <query>select?x?p?y WHERE {?x?p?y}</query> </query-request> </soapenv:body> </soapenv:envelope> 38
Conclusão SPARQL é... uma linguagem de consulta... um formato para os resultados... um protocolo de acesso...... para RDF 39
Conclusão SPARQL query language baseado no modelo de triplas?x?p?y filtros para adicionar restrições 40
Principais Referências Baseado na apresentação SPARQL Básico, de Luiz A M Palazzo. Disponível em http://ia.ucpel.tche.br/~lpalazzo/aulas/iws/m03/recursos/sparql.ppt E. Prud'hommeaux e A. Seaborne (editores). SPARQL Query Language for RDF. Online, 2008. Disponível em: http://www.w3.org/tr/rdf-sparql-query/; K.G. Clark, L. Feigenbaum e E. Torres (editores). SPARQL Protocol for RDF. Online, 2008. Disponível em: http://www.w3.org/tr/2008/rec-rdf-sparqlprotocol-20080115/; 41