Tutoriel 01 — Mon premier triplet RDF avec Core Person¶
Objectif : Décrire une personne en RDF/Turtle en utilisant le Core Person Vocabulary de l'UE.
Durée estimée : 30 minutes
Niveau : Débutant
Ce que vous allez apprendre¶
- Ce qu'est un triplet RDF
- Pourquoi et comment le Core Person Vocabulary intervient
- Quelles propriétés utiliser et lesquelles ajouter selon votre besoin
- Comment valider votre fichier Turtle
1. Le triplet RDF : sujet — prédicat — objet¶
Le Web sémantique repose sur des triplets :
Exemple en langage naturel :
Marie Dupont — a pour prénom — "Marie"
En RDF/Turtle :
@prefix person: <http://www.w3.org/ns/person#> .
@prefix schema: <http://schema.org/> .
<https://data.example.gouv.fr/personne/marie-dupont>
a person:Person ;
schema:givenName "Marie" ;
schema:familyName "Dupont" .
Trois éléments à repérer :
- Sujet :
<https://data.example.gouv.fr/personne/marie-dupont>— l'URI unique qui identifie cette personne - Prédicat :
schema:givenName— la propriété qui décrit le sujet - Objet :
"Marie"— la valeur (ici un texte littéral)
2. Pourquoi le Core Person Vocabulary intervient-il ?¶
Sans vocabulaire commun, chaque système invente ses propres noms de champs :
| Système A | Système B | Système C |
|---|---|---|
prenom |
first_name |
givenName |
nom_naissance |
birth_name |
maiden_name |
date_naissance |
dob |
birthDate |
Ces champs sont sémantiquement équivalents mais techniquement incompatibles. Aucun outil ne peut les relier automatiquement.
Le Core Person Vocabulary (CPV) résout ce problème en définissant des propriétés dont l'URI fait office de référence universelle :
| Besoin | Propriété CPV | URI complète |
|---|---|---|
| Nom de naissance | person:birthName |
http://www.w3.org/ns/person#birthName |
| Lieu de naissance | person:placeOfBirth |
http://www.w3.org/ns/person#placeOfBirth |
| Nationalité | person:citizenship |
http://www.w3.org/ns/person#citizenship |
| Genre | person:gender |
http://www.w3.org/ns/person#gender |
Deux systèmes qui utilisent person:birthName parlent exactement de la même chose, quelle que soit leur technologie sous-jacente.
CPV + schema.org
Le Core Person Vocabulary ne redéfinit pas ce qui existe déjà ailleurs. Il délègue à schema.org les propriétés génériques (givenName, familyName, birthDate) et ne définit que ce qui est spécifique au contexte administratif (birthName, placeOfBirth, citizenship…).
3. Construire une description pas à pas¶
Étape A — Le minimum : déclarer une personne¶
@prefix person: <http://www.w3.org/ns/person#> .
<https://data.example.gouv.fr/personne/marie-dupont>
a person:Person .
a est un raccourci Turtle pour rdf:type. Cette ligne déclare que la ressource est une instance de person:Person.
Étape B — Ajouter l'identité civile¶
@prefix person: <http://www.w3.org/ns/person#> .
@prefix schema: <http://schema.org/> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
<https://data.example.gouv.fr/personne/marie-dupont>
a person:Person ;
# Nom d'usage (schema.org)
schema:givenName "Marie" ;
schema:familyName "Dupont" ;
# Nom de naissance — propriété spécifique CPV
# Utile si différent du nom d'usage (mariage, changement légal…)
person:birthName "Marie Martin" ;
# Date de naissance typée xsd:date (et non texte libre)
schema:birthDate "1985-04-12"^^xsd:date .
Toujours typer les dates
"1985-04-12" sans type est une chaîne de caractères — les moteurs SPARQL ne peuvent pas la comparer ni la trier. Avec ^^xsd:date, c'est une date exploitable : FILTER(?naissance > "1980-01-01"^^xsd:date).
Étape C — Ajouter la localisation et la nationalité¶
@prefix person: <http://www.w3.org/ns/person#> .
@prefix schema: <http://schema.org/> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
<https://data.example.gouv.fr/personne/marie-dupont>
a person:Person ;
schema:givenName "Marie" ;
schema:familyName "Dupont" ;
person:birthName "Marie Martin" ;
schema:birthDate "1985-04-12"^^xsd:date ;
# Lieu de naissance — URI vers une commune (Core Location)
person:placeOfBirth <https://data.example.gouv.fr/commune/75056> ;
# Pays de naissance — URI vers le référentiel Publications Office EU
person:countryOfBirth
<http://publications.europa.eu/resource/authority/country/FRA> ;
# Nationalité — même référentiel
person:citizenship
<http://publications.europa.eu/resource/authority/country/FRA> .
Les valeurs de person:countryOfBirth et person:citizenship sont des URI vers des référentiels contrôlés, pas des chaînes de caractères comme "France". Cela permet de les relier à d'autres jeux de données qui utilisent les mêmes URI.
4. Quelles propriétés peut-on encore ajouter ?¶
Le Core Person Vocabulary définit d'autres propriétés selon votre contexte :
| Propriété | Utilité | Exemple |
|---|---|---|
person:patronymicName |
Nom patronymique (droit civil) | "Dupont" |
person:matronymicName |
Nom matronymique | "Martin" |
person:placeOfDeath |
Lieu de décès | URI commune |
person:countryOfDeath |
Pays de décès | URI pays EU |
person:residency |
Lieu de résidence actuel | URI commune ou adresse |
person:gender |
Genre (valeur contrôlée) | URI référentiel EU |
Pour connaître l'ensemble des propriétés disponibles, leurs définitions et leurs contraintes, consultez la référence complète :
→ Référence — Core Person Vocabulary
→ Spécification W3C officielle
→ Fiche SEMIC avec exemples
5. Valider votre fichier¶
Option A — En ligne (sans installation)¶
- Ouvrez https://www.w3.org/RDF/Validator/
- Collez votre Turtle dans le champ texte
- Cliquez sur Parse RDF
Option B — En local avec rapper¶
# Installation (Debian/Ubuntu)
sudo apt install raptor2-utils
# Validation
rapper --input turtle --output ntriples mon-fichier.ttl
Une sortie sans erreur confirme que votre Turtle est syntaxiquement valide.
6. Vérifiez votre compréhension¶
- [ ] Pourquoi utilise-t-on une URI pour
person:citizenshipplutôt que la chaîne"française"? - [ ] Quelle est la différence entre
schema:familyNameetperson:birthName? Dans quel cas les deux valeurs diffèrent-elles ? - [ ] Pourquoi
^^xsd:dateest-il important pour les requêtes SPARQL ? - [ ] Si vous devez décrire le lieu de résidence actuel d'une personne, quelle propriété CPV utilisez-vous ?
Étape suivante¶
→ Tutoriel 02 — Décrire une organisation avec Core Business