Année Universitaire : 2025-2026
Web Sémantique
UP_WEB
Correction Atelier 4: RDFS
Exercice1 :
# Import des classes nécessaires depuis la bibliothèque RDFLib
from rdflib import Graph, URIRef, Literal, Namespace
def creer_graphe_adresse():
"""
Cette fonction crée un graphe RDF décrivant une adresse,
de la même manière que l'exemple Java/Jena.
"""
try:
# Définition des URIs et des valeurs littérales
adress_uri = "[Link]
ariana_uri = "[Link]
nom_adresse_literal = "18 Rue de usine"
cp_literal = "2035"
# la création d'un espace de nom
ESPACE_NOM = Namespace("[Link]
# la création d'un modèle (un graphe dans RDFLib)
g = Graph()
# association de l'URI EspaceNom au préfixe 'en'
[Link]("en", ESPACE_NOM)
# La création d'une resource (un sujet ou un objet de type URI)
adresse = URIRef(adress_uri)
# Ajout des propriétés (prédicats) et de leurs valeurs
# Note: RDFLib permet de créer les propriétés directement depuis le
namespace
# Propriété 'name' avec sa valeur littérale
[Link]((adresse, ESPACE_NOM.name, Literal(nom_adresse_literal)))
# Propriété 'codepos' avec sa valeur littérale
[Link]((adresse, ESPACE_NOM.codepos, Literal(cp_literal)))
# Création de la ressource 'ville' et de la propriété 'commeville'
ville = URIRef(ariana_uri)
[Link]((adresse, ESPACE_NOM.commeville, ville))
# Affichage du graphe au format RDF/XML, comme dans l'exemple Jena
# Le format 'xml' correspond à 'RDF/XML' dans RDFLib
print("--- Graphe au format RDF/XML ---")
print([Link](format="xml"))
except Exception as e:
# Gestion simple d'une erreur potentielle
print(f"Une erreur est survenue : {e}")
# Point d'entrée du script, équivalent de la méthode `main` en Java
if __name__ == "__main__":
creer_graphe_adresse()
Exercice2 :
# Correction de l'Exercice 2
from rdflib import Graph, URIRef, Literal, Namespace
from [Link] import FOAF, RDF
# 1. Créer un graphe vide
g = Graph()
# 2. Définir un namespace personnalisé pour notre vocabulaire
# Un namespace permet de ne pas avoir à réécrire l'URL complète à chaque fois.
EX = Namespace("[Link]
# Lier le préfixe 'ex' à notre namespace pour un affichage plus propre en
Turtle
[Link]("ex", EX)
[Link]("foaf", FOAF)
# 3. Créer les ressources (nœuds) du graphe
# URIs pour les entités
marie_curie = EX.marie_curie
pierre_durand = EX.pierre_durand
cours_physique = EX.cours_physique
# Créer les propriétés (prédicats)
enseigne = [Link]
estInscritA = [Link]
# Ajouter les triplets au graphe
# Affirmation 1: Marie Curie a pour nom "Marie Curie"
[Link]((marie_curie, [Link], Literal("Marie Curie")))
[Link]((marie_curie, [Link], [Link])) # On peut lui donner un type
générique
# Affirmation 2: Le cours a pour titre "Introduction à la Physique"
[Link]((cours_physique, [Link], Literal("Introduction à la Physique")))
# Affirmation 3: Marie Curie enseigne le cours de physique
[Link]((marie_curie, enseigne, cours_physique))
# Affirmation 4: Pierre Durand est inscrit au cours de physique et a un nom
[Link]((pierre_durand, [Link], Literal("Pierre Durand")))
[Link]((pierre_durand, estInscritA, cours_physique))
[Link]((pierre_durand, [Link], [Link]))
# 4. Afficher (sérialiser) le graphe dans différents formats
print("--- Graphe au format Turtle ---")
# Le format Turtle est très lisible pour les humains
print([Link](format="turtle"))
print("\n--- Graphe au format RDF/XML ---")
# Le format RDF/XML est plus verbeux mais est le format standard
print([Link](format="xml"))