Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ La page montre les notes internes et les faits non relus. Elle reste locale : `r
- **Fichiers** : JSON lisible, aucune clé en double, un schéma respecté, un nom de fichier égal à l’identifiant, un préfixe cohérent avec le dossier, des identifiants uniques dans tout le dépôt.
- **Références** : chaque identifiant cité existe.
- **Langues** : filiation sans cycle, codes uniques.
- **Unités** : exactement une forme canonique, dans l’écriture par défaut de la langue ; formes sans trait d’union ; `cle_normalisee` en NFC ; translittération dans une convention de la bonne écriture ; homographes distingués par la glose **et** par l’étymon. **Attestation** (ADR 0056) : seul un mot français porte une première attestation (`attestation.mot_francais`), jamais dans le futur (`attestation.future`), un intervalle finit après son début (`attestation.intervalle`) ; `annee_fin` n’existe que pour un intervalle (schéma).
- **Unités** : exactement une forme canonique, dans l’écriture par défaut de la langue ; formes sans trait d’union ; `cle_normalisee` en NFC ; translittération dans une convention de la bonne écriture ; homographes distingués par la glose **et** par l’étymon. **Attestation** (ADR 0056) : seul un mot français porte une première attestation (`attestation.mot_francais`), jamais dans le futur (`attestation.future`), un intervalle finit après son début (`attestation.intervalle`) ; `annee_fin` n’existe que pour un intervalle (schéma). **Exemples** : un sens peut porter, par locale, de 1 à 5 `exemples` distincts et non vides pour aider à se représenter un mot peu imaginable (schéma) ; ils sont rédigés, jamais copiés, et publiés avec la carte au dos de la carte.
- **Compositions** : le résultat est un mot ; les parties sont au moins deux, de rangs continus, et leurs formes et sens appartiennent à leur unité ; pas de préfixe en dernier ni de suffixe en premier ; segments dans les bornes, sans chevauchement, et qui pavent le mot de la première à la dernière lettre : chaque partie en porte un (`composition.segments_manquants`, `composition.pavage`), ce sont eux qui donnent ses coupes au ricochet « Découper » (ADR 0044) ; une seule analyse préférée ; aucun cycle ; transformations au vocabulaire contrôlé.
- **Relations** : source et cible différentes, sans doublon ni cycle ; un emprunt relie deux langues ; un héritage suit la filiation.
- **Briques** : une par unité, qui affiche la forme canonique et un sens glosé de son unité.
Expand Down
23 changes: 23 additions & 0 deletions outils/src/tests/compilation.rs
Original file line number Diff line number Diff line change
Expand Up @@ -245,6 +245,29 @@ fn attestation_publiee_sur_la_carte() {
assert!(carte(&depot).get("attestation").is_none());
}

#[test]
fn exemples_publies_sur_la_carte() {
let depot = Depot::new();
depot.modifier(depot.unite("géologie"), |u| {
u["sens"][0]["libelles"]["fr"]["exemples"] =
json!(["Une falaise dont les couches de roche sont visibles."]);
});
let uid = depot.uid("géologie");
let sortie = TempDir::new().unwrap();
let parutions = compiler_vers(&depot, sortie.path(), true);
let index = manifeste(sortie.path(), &parutions["fascicules"][0]);
let entree = liste(&index["cartes"])
.iter()
.find(|c| c["id"] == uid.as_str())
.unwrap()
.clone();
let carte = lire(&sortie.path().join(texte(&entree["carte"])));
assert_eq!(
carte["sens"][0]["libelles"]["fr"]["exemples"],
json!(["Une falaise dont les couches de roche sont visibles."])
);
}

#[test]
fn manifeste_et_carte() {
let (depot, sortie, parutions) = essai();
Expand Down
29 changes: 29 additions & 0 deletions outils/src/tests/validation.rs
Original file line number Diff line number Diff line change
Expand Up @@ -186,6 +186,35 @@ fn forme_sans_trait_union() {
assert!(a_erreur(&depot, "forme.trait_union"));
}

// ---------------------------------------------------------------- exemples d'un sens

#[test]
fn exemples_valides() {
let depot = Depot::new();
depot.modifier(depot.unite("géologie"), |u| {
u["sens"][0]["libelles"]["fr"]["exemples"] =
json!(["Une falaise dont les couches de roche sont visibles."]);
});
let rapport = depot.valider();
assert!(erreurs(&rapport).is_empty(), "{}", rapport.en_texte());
}

#[test]
fn exemples_non_vides_bornes_et_distincts() {
let depot = Depot::new();
for exemples in [
json!([]),
json!([""]),
json!(["a", "b", "c", "d", "e", "f"]),
json!(["Deux fois", "Deux fois"]),
] {
depot.modifier(depot.unite("géologie"), |u| {
u["sens"][0]["libelles"]["fr"]["exemples"] = exemples.clone();
});
assert!(a_erreur(&depot, "schema"), "{exemples}");
}
}

// ------------------------------------------------------------- attestation (ADR 0056)

pub(super) fn attestation(annee: i64, precision: &str) -> Value {
Expand Down
8 changes: 8 additions & 0 deletions schemas/unite.schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,14 @@
"definition": {
"description": "Sens actuel, en une phrase. Obligatoire pour un mot découvrable.",
"$ref": "communs.schema.json#/$defs/texte"
},
"exemples": {
"description": "Exemples concrets pour se représenter un mot peu imaginable (une situation, un objet, une scène), rédigés, jamais copiés. Affichés au dos de la carte, sans nommer le mot nécessairement.",
"type": "array",
"minItems": 1,
"maxItems": 5,
"uniqueItems": true,
"items": { "$ref": "communs.schema.json#/$defs/texte" }
}
}
}
Expand Down
5 changes: 4 additions & 1 deletion unites/unt_0vad5yr4.json
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,10 @@
"rang": 1,
"libelles": {
"fr": {
"definition": "Correspondance entre des éléments de même origine ou de même rôle."
"definition": "Correspondance entre des éléments de même origine ou de même rôle.",
"exemples": [
"Le bras d’un humain, la nageoire d’une baleine et l’aile d’une chauve-souris : des os disposés de la même façon pour des usages différents."
]
}
},
"fait": {
Expand Down
5 changes: 4 additions & 1 deletion unites/unt_0wda7bhe.json
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,10 @@
"rang": 1,
"libelles": {
"fr": {
"definition": "Carte dont les surfaces sont proportionnelles à une donnée statistique."
"definition": "Carte dont les surfaces sont proportionnelles à une donnée statistique.",
"exemples": [
"Une carte d’Europe où chaque pays est gonflé ou rétréci selon sa population."
]
}
},
"fait": {
Expand Down
6 changes: 5 additions & 1 deletion unites/unt_118eh36q.json
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,11 @@
"rang": 1,
"libelles": {
"fr": {
"definition": "Branche des mathématiques qui étudie les propriétés conservées par déformation continue."
"definition": "Branche des mathématiques qui étudie les propriétés conservées par déformation continue.",
"exemples": [
"Une tasse et un beignet : on passe de l’une à l’autre en déformant la pâte, sans la couper ni la recoller.",
"Le plan d’un métro, qui garde l’ordre des stations et leurs correspondances, mais pas les distances."
]
}
},
"fait": {
Expand Down
7 changes: 6 additions & 1 deletion unites/unt_3b82m32c.json
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,12 @@
"rang": 1,
"libelles": {
"fr": {
"definition": "Qui fait entendre plusieurs voix ou plusieurs sons à la fois."
"definition": "Qui fait entendre plusieurs voix ou plusieurs sons à la fois.",
"exemples": [
"Un chœur dont chaque groupe de voix chante sa propre mélodie en même temps.",
"Un piano ou un orgue, qui font sonner plusieurs notes à la fois.",
"Une sonnerie de téléphone qui joue un accord plutôt qu’une seule note."
]
}
},
"fait": {
Expand Down
Loading