Arquivos
SPARQL – Parte II – Consultas básicas (select)
Amigos,
Nesse post vou explicar algumas consultas básicas, usando SPARQL.
Vou fazer essas consultas baseado no meu tutorial preferido “SPARQL By Example da Cambridge Semantics”, esse post basicamente será um apanhado de query de lá, já que eles usam endpoints públicos.
?s ?p ?o
Essas consultas estão usando RDF, que é um modelo de ontologia baseado em triplas (?s ?p ?o).

Estrutura básica (esqueleto) de uma consulta SPARQL:
# declaracao do prefix (abreviacao das URIs) PREFIX foo: ... # declaracao dos acessos ao grafos FROM ... # parametros a serem encontrados SELECT ... # query pattern WHERE { ... } # organizador do resultado (ordenacao) ORDER BY ...
Vamos aos fatos (selects)
Select simples:
#De forma mais completa essa query, # procura todos os objetos de indivíduos # que tenham a propriedade foaf:name declarada. PREFIX foaf: SELECT ?name WHERE { ?person foaf:name ?name . }
Select simples com resultado composto:
#Seleciona o sujeito e a homepage, # de um sujeito onde o nome seja "Apollo 7". PREFIX foaf: SELECT ?craft ?homepage { ?craft foaf:name "Apollo 7" . ?craft foaf:homepage ?homepage }
Select utilizando o resultado a partir do resultado do objeto da tripla anterior:
#Nessa query também entramos no conceito de grafo,
# essa query busca em um grafo especifico.
# Essa consulta busca homepages de pessoas que conhece o Berners-Lee.
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX card: <http://www.w3.org/People/Berners-Lee/card#>
SELECT ?homepage
FROM <http://dig.csail.mit.edu/2008/webdav/timbl/foaf.rdf>
WHERE {
card:i foaf:knows ?known .
?known foaf:homepage ?homepage .
}

Organizando o resultado
Limit
Para modificar a apresentação do resultado, existem: Limit, Order By e Offset.
# Query que lista 50 indivíduos distintos.
SELECT DISTINCT ?concept
WHERE {
?s a ?concept .
} LIMIT 50
Filtro
Filter simples
#Seleciona paises que não tenham fronteira com o mar e
# com o filtro que apresenta apenas os que tenham
# população maior que 15 milhões de habitantes.
# Vemos também que não precisamos repetir
# o sujeito em todas as clausulas.
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX type: <http://dbpedia.org/class/yago/>
PREFIX prop: <http://dbpedia.org/property/>
SELECT ?country_name ?population
WHERE {
?country a type:LandlockedCountries ;
rdfs:label ?country_name ;
prop:populationEstimate ?population .
FILTER (?population > 15000000) .
}
Filtro composto
#Aplicamos na query o filtro de que é
# preciso que o nome tenha sido definido em inglês.PREFIX type: <http://dbpedia.org/class/yago/>
PREFIX prop: <http://dbpedia.org/property/>
SELECT ?country_name ?population
WHERE {
?country a type:LandlockedCountries ;
rdfs:label ?country_name ;
prop:populationEstimate ?population .
FILTER (?population > 15000000 && langMatches(lang(?country_name), "EN")) .
} ORDER BY DESC(?population)
Opcional
O option possibilita que a caso um param não exista, não impeça a apresentação da tripla.
# Apresenta o nome de todos artistas musicais,
# e caso exista a imagem, homepage e loc .
PREFIX mo: <http://purl.org/ontology/mo/>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
SELECT ?name ?img ?hp ?loc
WHERE {
?a a mo:MusicArtist ;
foaf:name ?name .
OPTIONAL { ?a foaf:img ?img }
OPTIONAL { ?a foaf:homepage ?hp }
OPTIONAL { ?a foaf:based_near ?loc }
}
Por hoje é só.
No próximo post falarei um pouco sobre como montar uma ontologia baseado em RDF, RDFs e OWL.
Abraços.
Boa noite.
Renan Oliveira
Related Articles
- Wikitravel:Turtle RDF – Wikitravel (wikitravel.org)
- Top 100 most popular RDF namespace prefixes (richard.cyganiak.de)
- The Social Semantic Web and Linked Data (slideshare.net)
- From Facebook to FOAF and Back Again (22) (ibiblio.org)
- The Cognitive Characteristics Ontology Specification (purl.org)