-
Notifications
You must be signed in to change notification settings - Fork 0
/
SPARQL_Queries.txt
129 lines (116 loc) · 4.02 KB
/
SPARQL_Queries.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
Cabeçalho que deve estar presente antes de todas as queries:
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX ep: <http://www.semanticweb.org/kaiqu/ontologies/2019/10MAC444-EP#>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
Os prefixos, que sucedem as instruções PREFIX, são termos que facilitam a referenciação das URIs nas queries em SPARQL.
Nas consultas utilizamos três prefixos:
O prefixo ep se refere à nossa ontologia criada nesse projeto.
O prefixo foaf se refere à ontologia 'Friend of Another Friend', importada na nossa ontologia para uso das classes Person e Agent e das propriedades firstName, familyName, gender, made e maker.
O prefixo rdf se refere ao modelo padrão de ontologias web 'Resource Description Framework'.
Queries em SPARQL:
1. SELECT ?TituloDoFilme
WHERE {
?Filme ep:titulo ?TituloDoFilme ;
ep:dirigidoPor ?dir .
FILTER (?dir = ep:D)
} ORDER BY ASC(?TituloDoFilme)
2. SELECT ?PrimeiroNome ?UltimoNome ?Personagem
WHERE {
?Atuacao ep:noFilme ?filme ;
ep:temAtor ?ator ;
ep:comoPersonagem ?Personagem .
?filme ep:titulo ?title .
?ator foaf:firstName ?PrimeiroNome ;
foaf:familyName ?UltimoNome .
FILTER (STR(?title) = "Ft")
} ORDER BY ASC(?PrimeiroNome) ASC(?UltimoNome)
3. SELECT ?Filme ?Diretor ?Ano
WHERE {
?at1 rdf:type ep:Atuacao ;
ep:noFilme ?Filme ;
ep:temAtor ?a1 .
?at2 rdf:type ep:Atuacao ;
ep:noFilme ?Filme ;
ep:temAtor ?a2 .
?Filme ep:dirigidoPor ?Diretor ;
ep:dataEstreia ?Ano .
FILTER (?a1 = ep:X && ?a2 = ep:Y)
} ORDER BY DESC(?Ano)
4. SELECT DISTINCT ?Filme ?Duracao
WHERE {
?dir rdf:type ep:Diretor .
?dir ep:dirige ?filme .
?Filme ep:dirigidoPor ?dir .
?Filme ep:duracao ?Duracao .
?Atuacao ep:noFilme ?Filme ;
ep:temAtor ?ator .
VALUES ?ator { ep:X ep:Y }
FILTER (?filme = ep:F)
} ORDER BY ASC(?Duracao)
5. SELECT ?Pessoa (SAMPLE(?filmeat) AS ?FilmeAt) (SAMPLE(?filmedir) AS ?FilmeDir)
WHERE {
?Pessoa rdf:type ep:Diretor .
?Pessoa ep:dirige ?filmedir .
?Atuacao ep:temAtor ?Pessoa ;
ep:noFilme ?filmeat.
} GROUP BY (?Pessoa)
6. SELECT ?Ano ?Diretor ?Filme
WHERE {
?at1 rdf:type ep:Atuacao;
ep:temAtor ?a1 ;
ep:noFilme ?Filme .
?at2 rdf:type ep:Atuacao;
ep:temAtor ?a2 ;
ep:noFilme ?Filme .
?Diretor rdf:type ep:Diretor .
?Diretor ep:dirige ?Filme .
?Filme ep:dataEstreia ?Ano .
FILTER(?a1 = ep:X && ?a2 = ep:Y).
FILTER(?Ano >= N1 && ?Ano <= N2).
} ORDER BY ASC (?Ano)
7. SELECT (SAMPLE(?atriz)AS ?Atriz) (SAMPLE(?ator)AS ?Ator) ?Filme (SAMPLE(?duracao) AS ?Duracao)
WHERE {
?Filme rdf:type ep:Filme ;
ep:duracao ?duracao.
?at1 rdf:type ep:Atuacao ;
ep:noFilme ?Filme ;
ep:temAtor ?ator .
?ator foaf:gender ?gm .
?at2 rdf:type ep:Atuacao ;
ep:noFilme ?Filme ;
ep:temAtor ?atriz .
?atriz foaf:gender ?fm .
FILTER (?duracao >= M1 && ?duracao <= M2) .
FILTER (STR(?gm) = "male" && STR(?fm) = "female") .
} GROUP BY ?Filme ORDER BY ASC (?Duracao)
8. SELECT ?Diretor
WHERE{
{
SELECT ?Diretor (count(?Diretor) as ?count)
WHERE {
?ator rdf:type ep:Ator ;
foaf:firstName ?fn ;
foaf:familyName ?ln .
?at rdf:type ep:Atuacao ;
ep:temAtor ?ator ;
ep:noFilme ?filme .
?filme ep:dirigidoPor ?Diretor .
FILTER (STR(?fn) = "Xp" && STR(?ln) = "Xu") .
} GROUP BY ?Diretor ORDER BY DESC(?count)
}
} LIMIT 1
9. SELECT ?Filme ?Ano ?Personagem
WHERE {
?at rdf:type ep:Atuacao ;
ep:temAtor ?ator ;
ep:noFilme ?Filme ;
ep:comoPersonagem ?Personagem .
?Filme ep:dataEstreia ?Ano .
FILTER (?ator = ep:X) .
} ORDER BY ASC(?Ano) LIMIT 1
10. SELECT ?Filme ?Duracao
WHERE {
?dir ep:dirige ?Filme .
?Filme ep:duracao ?Duracao .
FILTER (?dir = ep:D) .
} ORDER BY DESC(?Duracao) LIMIT 1