Noms
- EL KADI Youssef
- GALUBA MATHEO
2 Mise en pratique du langage SPARQL
BASE <https://swapi.co/resource/>
PREFIX voc: <https://swapi.co/vocabulary/>
PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX wd: <http://www.wikidata.org/entity/>
PREFIX xml: <http://www.w3.org/XML/1998/namespace>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>2.1 SparQL Query
Question 1
Lancer la commande DESCRIBE <human/14>. De qui s’agit-il ? (URI complète de la ressource : <https ://swapi.co/resource/human/14>)
Il s’agit de Han Solo.
Question 2
L’humain 14 est-il un homme ?
select ?o where {
<human/14> voc:gender ?o .
}Au sens biologique, c’est un mâle (chromosome XY) mais on ne sait pas exactement comment il s’identifie, il ne faut pas confondre genre et identité de genre.
Question 3
Lister l’ensemble des types (directs) de l’humain 14.
select ?o where {
<human/14> rdf:type ?o .
}
Question 4
Donner le nombre de personnages.
select (COUNT(DISTINCT ?s) as ?count) where {
?s rdf:type voc:Character .
}
Question 5
Donner les couleurs des yeux des personnages (sans doublons).
select DISTINCT ?s ?c where {
?s rdf:type voc:Character .
?s voc:eyeColor ?c .
}Question 6
Donner la couleur de cheveux des personnages originaires des pla- nètes 17 et 42.

Question 7
Lister les personnages qui apparaissent dans plus de deux films.
select ?c (COUNT(DISTINCT ?f ) as ?count) where {
?c rdf:type voc:Character .
?c voc:film ?f .
} group by ?c having(?count >= 2)Question 8
Quels sont les personnages qui sont apparus dans l’intégralité des films de la saga ?
Question 9
Donner la description du personnage qui s’apelle “Dart Fener” en italien. Attention, on souhaite cette fois-ci se limiter aux résultats en français.
select ?d where {
?c rdfs:label "Dart Fener"@it .
?c voc:desc ?d .
FILTER(langMatches(lang(?d), "fr")) .
}
Question 10
Construire le graph correspondant à Yoda. Si vous le souhaitez, vous pouvez limiter les informations descriptives (label et description) à une seule langue.
CONSTRUCT WHERE {
?s rdfs:label "Yoda"@fr .
?s ?p ?o .
}PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX voc: <https://swapi.co/vocabulary/>
BASE <https://swapi.co/resource/>
CONSTRUCT {
?s ?p ?o .
?s rdfs:label ?text .
?s voc:desc ?text2 .
} WHERE {
?s rdfs:label "Yoda"@fr .
?s ?p ?o .
?s rdfs:label ?text .
?s voc:desc ?text2 .
FILTER (langMatches(lang(?text), "fr")) .
FILTER (langMatches(lang(?text2), "fr")) .
FILTER (?p != rdfs:label) .
FILTER (?p != voc:desc) .
}

Question 11
Citer les personnages sauf ceux qui ont participé au 3eme film ?
SELECT
DISTINCT ?s ?o
WHERE {
?s rdf:type voc:Character .
FILTER NOT EXISTS { ?s voc:film <film/3>}
}Question 12
Lister les films dans lesquels au moins 4 planètes différentes sont visitées. Organiser la liste selon l’ordre alphabétique de leur nom.
SELECT ?s (COUNT(DISTINCT ?o) AS ?count)
WHERE {
?s rdf:type voc:Film .
?s voc:planet ?o .
} GROUP BY ?s HAVING(?count >= 4)Question 13
Reprendre la question précédente et y ajouter les planètes visitées et leur climat.
SELECT ?s ?o ?climate
WHERE {
{
SELECT ?s (COUNT(DISTINCT ?o) AS ?count)
WHERE {
?s rdf:type voc:Film .
?s voc:planet ?o .
} GROUP BY ?s HAVING(?count >= 4)
}
?s voc:planet ?o .
?o voc:climate ?climate .
}
Question 14
Quels sont les duos de personnages participants au même film ? Limiter votre réponse aux 100 premiers duos.
SELECT ?s1 ?s2
WHERE {
?s1 voc:film ?f .
?s2 voc:film ?f .
FILTER(?s1 != ?s2)
} limit 100Question 15
Pour chaque type, donner le poids moyen.
SELECT ?f (AVG (?h) as ?avgmass)
WHERE {
?s rdf:type ?f .
?s voc:mass ?h .
} GROUP BY ?fQuestion 16
Lister les personnages avec le nom des films dans lesquels ils aparaissent ainsi que leur planète d’origine accompagnée de leur population.
SELECT (?s AS ?subject) (?f AS ?film) (?w AS ?world)
WHERE {
?s rdf:type voc:Character .
?s voc:homeworld ?w .
?s voc:film ?f .
}Question 17
Donner les individus qui ont un poids moyen supèrieur au poids moyen de leur type.
SELECT ?s ?type ?weight
WHERE {
?s rdf:type ?type .
?s voc:mass ?weight .
{
SELECT ?f (AVG (?weight) as ?avg_weight)
WHERE {
?s rdf:type ?f .
?s voc:mass ?weight .
} GROUP BY ?f
}
FILTER(?weight > ?avg_weight)
}Question 18
Donner l’ensemble des types directs et indirects d’Anakin Skywalker.
SELECT DISTINCT ?type
WHERE {
?s rdfs:label "Anakin Skywalker"@fr .
?s rdf:type ?direct_type .
?direct_type rdfs:subClassOf* ?type .
}2.2 SparQL Update
Question 19
Malheureusement, la base ne contient pas les acteurs. En revanche, certaines descriptions contiennent leur nom. Essayer avec l’acteur “Alec Guinnesss”. S’il existe un resultat, afficher le nom français des personnages correspondants et leur description.
SELECT ?l ?d
WHERE {
?s rdfs:label ?l .
?s voc:desc ?d .
FILTER(CONTAINS(LCASE(?d), "alec guinness"))
FILTER(langMatches(lang(?l), "fr"))
}Question 20
Donner les planètes pour lesquelles il n’existe aucun résident.
SELECT ?planete
WHERE {
?planete rdf:type voc:Planet .
FILTER NOT EXISTS { ?planete voc:resident ?o }
}Question 21
Quels sont les films qui sont sortis avant 1990 ?
SELECT ?film ?title ?date
WHERE {
?film rdf:type voc:Film .
?film voc:releaseDate ?date .
?film rdfs:label ?title .
FILTER(YEAR(?date) < 1990)
FILTER(langMatches(lang(?title), "fr"))
}Question 22
Nous avons la chance d’avoir l’identifiant wikidata des personnages. Faites une requête conjointe pour récupérer les informations disponibles du personnage Chewbacca.
SELECT ?s ?wd ?p ?o
WHERE {
?s rdfs:label "Chewbacca"@fr .
?s voc:wikidataLink ?wd .
SERVICE <https://query.wikidata.org/sparql> {
?wd ?p ?o .
}
}
LIMIT 100Question 23
Quel est le nom des parents d’Anakin Skywalker ?
PREFIX wdp: <http://www.wikidata.org/prop/direct/>
SELECT ?m ?f
WHERE {
?s rdfs:label "Anakin Skywalker"@fr .
?s voc:wikidataLink ?wd .
OPTIONAL {
?mother voc:wikidataLink ?wd_mother .
?mother rdfs:label ?m .
FILTER(langMatches(lang(?m), "fr"))
SERVICE <https://query.wikidata.org/sparql> {
?wd wdp:P25 ?wd_mother .
}
}
OPTIONAL {
?father voc:wikidataLink ?wd_father .
?father rdfs:label ?f .
FILTER(langMatches(lang(?f), "fr"))
SERVICE <https://query.wikidata.org/sparql> {
?wd wdp:P22 ?wd_father .
}
}
}- propriété père : https://www.wikidata.org/wiki/Property:P22
- propriété mère : https://www.wikidata.org/wiki/Property:P25
Question 24
Vous décidez d’incarner un personnage dans le monde de starwars. Choisissez une espèce et ajouter votre personnage avec quelques attributs.
INSERT DATA {
</sith/78> rdf:type voc:Character
</sith/78> voc:eyeColor "Bleu ciel"
</sith/78> voc:gender "male"
</sith/78> voc:height "1m77"
</sith/78> voc:mass "72"
</sith/78> voc:skinColor "Blanc"
</sith/78> rdfs:label "Emmanuel Macron"
}Question 25
Un nouveau star wars se profil et pour faire plaisir au fan l’intégralité des personnages y seront présents. Ajouter ce-nouveau film dans la base sous le nom de fanService.
INSERT {
</film/78> rdf:type voc:Film .
</film/78> rdfs:label "fanService" .
</film/78> voc:character ?p .
}
WHERE {
?p rdf:type voc:Character .
}
Question 26
Après évaluation du budget, le studio vous informe que les costumes pour les espèces Aleena et Besalisk couteraient trop cher. Retirez ces personnages du films.
DELETE {
?p rdf:type ?t .
}
WHERE {
?p rdf:type ?t .
FILTER (?t IN (voc:Besalisk, voc:Aleena))
}3 Inferences
Question 29
Lire la page de documentation peut s’avérer utile. Avant de créer vos propres règles d’inférences, afficher via une requête sparql, le contenu du fichier d’inférence actuel. Lister les rulesets utilisé :
SELECT ?state ?ruleset {
?state sys:listRulesets ?ruleset
}Afficher le contenu d’un fichier ruleset :
SELECT * {
?content sys:exploreRuleset "starwars_inference"
}Question 30
**On souhaite identifier les planète cybernétiques (i.e. les planètes d’où sont originaires Humains et Droïds) ? Une planète cybernétique est identifiée par voc:CyberPlanet
- Ecrire la règle.pie
- Mettre à jour le fichier via une commande sparql
- Penser à réinférer
- Vérifier que tout a fonctionné
INSERT DATA {
<_:starwars_inference> sys:addRuleset '''
Prefices {
voc: https://swapi.co/vocabulary/
rdf: http://www.w3.org/1999/02/22-rdf-syntax-ns#
}
Axioms {}
Rules {
Id: cyberplanet_rule
human <rdf:type> <voc:Human>
human <voc:homeworld> planet
droid <rdf:type> <voc:Droid>
droid <voc:homeworld> planet
-----------------------
planet <rdf:type> <voc:CyberPlanet>
}
''' .
}Pour réinferer :
INSERT DATA { [] sys:reinfer [] }Pour afficher les planètes avec le type voc:CyberPlanet :
SELECT ?planet
WHERE {
?planet rdf:type voc:CyberPlanet .
}
Question 31
Identifier les moyens de transports cybernétiques, i.e. ceux pilotés par un humain d’une planète où cohabitent humain et droids ?
Question 32
Comment faire pour identifier une planète aux mulitples climats ?
4 ShaCL
Question 33
Un véhicule doit disposer de l’information voc:crew.
Question 34
Modifier la shape précédente pour interdire la valeur 0. Que se passe-t-il ? Pourquoi ? Faites le necessaire pour ajouter cette contrainte.
Question 35
Dans le cadre de cet exercice, un membre de l’espèce yoda doit :
- disposer d’au moins un nom (optionnel : au moins un nom en anglais).
- avoir un poids ente 0 et 100,
- avoir une couleur de peau égale à “green”, “lightGreen” ou “darkGreen”