(tentativa de resolução -- não confirmada) 1-a) (nao sei como fazer com repetitions) MATCH (p:Person)-[:ACTED_IN]-(m:Movie)-[:ACTED_IN]-(p2:Person) WITH p, count(m) as sameMovies WHERE p != p2 AND p2.name = "Tom Hanks" AND sameMovies > 1 RETURN p b) MATCH (p:Person)-[:ACTED_IN]-(m:Movie)-[:DIRECTED]-(p:Person) RETURN m c) MATCH (m:Movie) WITH m, m.rating as rating WITH m, avg(rating) as avgRating WHERE avgRating > 80 RETURN m d) 1-Retorna, para cada nó, esse nó tantas vezes quantas relações ele tiver com um outro nó, já que está a procurar nós (x) que estejam relacionados -- com um qualquer outro nó (). 2-Retorna filmes ou pessoas que estejam ligados a si mesmos por intermédio de x-pessoa-pessoa-x no caso de x ser um filme (ou seja, duas pessoas relacionadas com um mesmo filme e em que uma FOLLOWS a outra), ou por intermédio de x-filme-pessoa-x/x-pessoa-filme-x no caso de x ser uma pessoa. 2- b) 1- Entailed. By the interpolation lemma, we can map: _x to :p1 _y to :p2 _z: to :c1 2- Not entailed. The only node with a rides_in and drives relationship to the same node is :p2 to node :c1, but :c1 does not have any rdfs:label relationships. 3- Entailed. By mapping: _x: to :p1 _y: to :p2 _z: to _:p1 4- Not entailed. There is no node in the original graph with a loop to itself. c) We need to infer the following tuples: _:x rdf:type Agent _:x rdf:type Entity _:x :transported_in _:y _:y rdf:type Entity Using the interpolation lemma, the mapping will be: _:x to :p1 _:y to :c1 Justification: The tuples we will be using are (in addition to 1-7 presented in the question): 8. :p1 :likes :p2 9. :p1 :drives :c1 Using the RDFS entailment patterns, we can infer that: 10. :p1 rdf:type :Person, from 8 and 1 using rdfs2. 11. :p1 rdf:type :Agent, from 10 and 6 using rdfs9. (_:x a :Agent) 12. :p1 :transported_in :c1, from 9 and 3 using rdfs7. (_:x :transported_in _:y) 13. :p1 rdf:type :Entity, from 12 and 4 using rdfs2. (_:x a :Entity) 14. :c1 rdf:type :Vehicle, from 12 and 5 using rdfs3. 15. :c1 rdf:type :Entity, from 14 and 7 using rdfs9. (_:y rdf:type Entity) 3- a) https://www.w3.org/TR/2013/REC-sparql11-entailment-20130321/ - 1.2 Effects of Different Entailment Regimes Simple entailment basicamente nao é capaz de inferir praticamente nada. i. Como não temos nenhuma regra explícita no grafo onde dizemos que um nó é do tipo pessoa, simple entailment nunca vai conseguir obter nada, porque a unica coisa que sabe fazer é substituir ?person pelos vários nós até encontrar algum que tenha essa relação explicitamente definida. ii. RDF entailment também não vai encontrar nada. Embora seja capaz de inferir mais coisas do que simple entailment, neste caso isso não ajuda. Porque, para conseguir inferir que um nó é uma pessoa, já que isso nao está explicitamente definido no grafo, a única alternativa seria recorrer a rdfs rules. Mas como estamos em RDF entailment isso não é possível. b) SELECT ?name WHERE { ?person rdf:type :Person. ?person :drives ?car. ?car :rdfs:label ?label. ?person :age ?age. ?person :name ?name. Filter(?age > 30 && ?label = "AA-00-00") } c) SELECT ?person ?car WHERE { ?person rdf:type :Person. ?person :likes ?johnP. ?johnP :name ?johnName. Filter(johnName = "John"). OPTIONAL { ?person :drives ?car } } d) SELECT ?person, count(?transport) as ?transports WHERE { ?person rdf:type :Person. ?person :transported_in ?transport. } GROUP BY ?person