Schéma `tisseuse` dans `canutes`
Explorer les contenus Légifrance enrichis, les liens extraits, les associations avec l’Assemblée nationale et l’index plein texte produits par Tisseuse.
Contenu de la recette
Cette recette est indexée par Moulineuse et peut servir de point de départ pour vos explorations SQL, Typesense ou scripts agents.
Vue d’ensemble
Le schéma PostgreSQL tisseuse contient les projections enrichies produites par le paquet Tisseuse à partir des données source de legifrance et, pour certaines associations, de assemblee.
Il ne remplace pas les tables source :
- utiliser
legifrance.articleetlegifrance.texte_versionpour la donnée institutionnelle brute et complète ; - utiliser
tisseuselorsqu’il faut le contenu HTML enrichi de liens, les liens déjà extraits, des associations vers l’Assemblée nationale ou l’index plein texte PostgreSQL des articles Légifrance.
Les identifiants id, source_id et target_id sont en général des identifiants Légifrance sur 20 caractères (LEGIARTI…, JORFTEXT…, etc.). target_id peut être nul quand la cible n’a pas été résolue. Les tables n’ont pas de clés étrangères déclarées vers les schémas source : toujours contrôler qu’une jointure retourne bien le résultat attendu.
Pour la structure physique à jour, utiliser list_tables puis describe_table sur tisseuse.
Contenus Légifrance enrichis
article_contenu_avec_liens
Projection du contenu d’un article Légifrance, enrichi de liens HTML.
| Colonne | Type | Rôle |
|---|---|---|
id |
char(20) PK |
Identifiant de legifrance.article |
bloc_textuel |
text nullable |
Contenu de l’article enrichi |
nota |
text nullable |
Notes enrichies |
date_extraction_liens |
char(10) |
Date de l’extraction des liens (YYYY-MM-DD) |
next_article_context |
json nullable |
Contexte de parsing conservé entre articles |
texte_contenu_avec_liens
Projection enrichie des champs textuels d’une version de texte Légifrance.
| Colonne | Type | Rôle |
|---|---|---|
id |
char(20) PK |
Identifiant de legifrance.texte_version |
abro, nota, notice, signataires, sm, tp, visas |
text nullable |
Champs HTML enrichis de liens |
date_extraction_liens |
char(10) |
Date de l’extraction des liens (YYYY-MM-DD) |
Pour afficher un article, préférer le contenu enrichi lorsqu’il existe, mais conserver une solution de repli vers la donnée source : tous les enregistrements source ne sont pas nécessairement encore projetés par Tisseuse.
SELECT
article.id,
COALESCE(
linked.bloc_textuel,
article.data #>> '{BLOC_TEXTUEL,CONTENU,#text}',
article.data #>> '{BLOC_TEXTUEL,CONTENU}'
) AS contenu,
linked.nota,
linked.date_extraction_liens
FROM legifrance.article AS article
LEFT JOIN tisseuse.article_contenu_avec_liens AS linked
ON linked.id = article.id
WHERE article.id = $1;
Liens extraits
article_lien_extrait et texte_lien_extrait
Ces deux tables ont la même structure ; la première concerne les articles, la seconde les textes.
| Colonne | Type | Rôle |
|---|---|---|
source_id |
char(20) |
Identifiant du document qui contient le lien |
field_name |
text |
Champ source concerné, par exemple bloc_textuel ou nota |
index |
smallint |
Position stable du lien dans le champ |
link |
jsonb |
Description complète du lien extraite par Tisseuse |
target_id |
char(20) nullable |
Identifiant de cible résolu quand il existe |
La clé primaire est (source_id, field_name, index). Les index inverse sur (target_id, field_name) permettent de retrouver les liens entrants.
Liens sortants d’un article
SELECT field_name, index, link, target_id
FROM tisseuse.article_lien_extrait
WHERE source_id = $1
ORDER BY field_name, index;
Articles qui citent un article cible
SELECT source_id, field_name, index, link
FROM tisseuse.article_lien_extrait
WHERE target_id = $1
ORDER BY source_id, field_name, index;
target_id est une aide de jointure, pas une représentation exhaustive de toutes les références : consulter aussi le JSONB link lorsque la nature exacte ou une cible non résolue est importante.
Associations avec l’Assemblée nationale
Les associations portent sur des versions de textes Légifrance, principalement des textes publiés au Journal officiel.
| Table | Rôle |
|---|---|
texte_version_dossier_legislatif_assemblee_associations |
Associe id à un UID de dossier Assemblée (assemblee_uid) |
texte_version_commission_fond_assemblee_associations |
Associe id à l’UID de la commission au fond Assemblée (commission_fond_assemblee_uid) |
Exemple : retrouver les textes Légifrance associés à un dossier de l’Assemblée.
SELECT
association.id AS texte_version_id,
texte.data -> 'META' -> 'META_COMMUN' ->> 'TITRE' AS titre
FROM tisseuse.texte_version_dossier_legislatif_assemblee_associations AS association
LEFT JOIN legifrance.texte_version AS texte
ON texte.id = association.id
WHERE association.assemblee_uid = $1
ORDER BY association.id;
Index plein texte des articles Légifrance
legifrance_article_search
Projection relationnelle destinée à la recherche plein texte PostgreSQL. Elle contient notamment :
id: identifiant de l’article Légifrance ;article_number,texte_cid,texte_nature,texte_title: métadonnées de recherche ;contentetnota: texte nettoyé du HTML ;source_date_debut,source_date_fin: bornes brutes Légifrance, conservées pour la provenance ;date_debut,date_fin: repères utilisés par la projection, dontdate_debutpeut employer le repli Tisseuse lorsque la source est sentinelle ;temporal_status:dated,open_ended,never_effectiveouunknown; utiliser les deux premiers seulement pour le droit applicable ;text_search: vecteur plein texte français ;updated_at: date de dernière projection.
Les titres et numéros d’article ont un poids plus fort que le corps (content) ; les notes ont un poids plus faible. Ne pas recalculer text_search dans la requête : l’index GIN est déjà présent.
WITH search_query AS (
SELECT websearch_to_tsquery('french', $1) AS value
)
SELECT
article.id,
article.article_number,
article.texte_title,
article.texte_cid,
article.date_debut,
article.date_fin,
article.temporal_status,
ts_rank_cd(article.text_search, search_query.value) AS rank
FROM tisseuse.legifrance_article_search AS article
CROSS JOIN search_query
WHERE article.text_search @@ search_query.value
ORDER BY rank DESC, article.id
LIMIT 20;
legifrance_article_search_queue
Cette table est une file de travail interne : les déclencheurs sur legifrance.article et article_contenu_avec_liens y placent les articles à reprojeter. Elle est consommée par le script d’indexation de Tisseuse. Pour les besoins de lecture, interroger legifrance_article_search, pas cette file ; ne jamais modifier cette table depuis Moulineuse.
Contenus et recherche Assemblée nationale
assemblee_document_content
Projection persistante servant à l’affichage Exploratrice et à l’indexation. Elle associe un document_uid Assemblée à un HTML simplifié sans liens, un HTML enrichi de liens lorsqu’il a pu être produit, un sommaire, l’URL institutionnelle, les hashes et l’état d’acquisition (available, pending, no_html, parse_error). Pour la lecture métier, préférer assemblee_text_search ; cette table sert à contrôler la disponibilité ou à récupérer le document complet identifié.
assemblee_text_search
Projection PostgreSQL de recherche plein texte dans les documents Assemblée. Chaque ligne est un article ou un expose_des_motifs d’un document déterminé. Elle contient le contenu, un vecteur français indexé, l’article et son ancre éventuelle, ainsi que les métadonnées nécessaires à la vérification : document, dossier, législature, classification, provenance, date documentaire et URL source.
Ne pas interpréter document_date comme une date de vigueur : un résultat décrit un état parlementaire. Voir la recette Rechercher des articles et exposés des motifs de l’Assemblée nationale.
Les tables assemblee_document_content_queue et assemblee_text_search_queue sont internes ; ne jamais les modifier avec Moulineuse.
assemblee_amendment_search
Projection PostgreSQL de recherche plein texte dans les amendements Assemblée des législatures 14 à 17. Chaque amendement produit séparément un dispositif (la modification proposée) et un expose_sommaire (sa justification), avec son numéro, l’article visé, la date de dépôt et les métadonnées du texte et du dossier rattachés. Voir la recette Rechercher les dispositifs et exposés sommaires des amendements de l’Assemblée.
La table assemblee_amendment_search_queue est interne à Tisseuse ; ne jamais la modifier avec Moulineuse.
Contenus et recherche Sénat
senat_document_content
Projection persistante par senat.dosleg_texte.texcod. Elle conserve l’Akoma Ntoso institutionnel brut (akoma_ntoso_xml), son hash et son URL (source_url), l’URL publique, le HTML rendu sans liens, sa version enrichie de liens lorsque disponible, le sommaire, les dates d’acquisition et un état explicite. Cette table permet de régénérer les rendus après une évolution du parseur sans solliciter le réseau.
Les statuts sont : available, pending, no_url, unsupported_source, no_akoma, fetch_error et parse_error. Un statut différent de available signifie que le document n’est pas présent dans la recherche plein texte. La table peut aussi servir à ouvrir le contenu d’un document déjà identifié ; elle ne doit pas être modifiée depuis Moulineuse.
senat_text_search
Projection PostgreSQL de recherche plein texte dans les documents Sénat dont l’Akoma Ntoso a été validé. Une ligne correspond soit à un article, soit à un expose_des_motifs, identifié par (texcod, item_id). Les champs article_anchor, article_number, document_*, dossier_*, lecture_*, stage_*, public_url et source_url permettent de vérifier précisément le résultat.
document_date est la date documentaire issue de dosleg_texte.txtoritxtdat, pas une date de vigueur. Les titres, numéros, type et article ont un poids supérieur au corps dans text_search; dossier et origine ont un poids de contexte.
WITH search_query AS (
SELECT websearch_to_tsquery('french', $1) AS value
)
SELECT
texcod,
item_kind,
item_label,
document_title,
document_date,
dossier_title,
ts_rank_cd(text_search, search_query.value) AS rank
FROM tisseuse.senat_text_search
CROSS JOIN search_query
WHERE text_search @@ search_query.value
ORDER BY rank DESC, document_date DESC NULLS LAST, texcod, item_id
LIMIT 20;
Voir la recette Rechercher des articles et exposés des motifs du Sénat pour les filtres, extraits et contrôles de provenance. Les tables senat_document_content_queue et senat_text_search_queue sont internes.
senat_amendment_search
Projection de recherche des amendements AMELI du Sénat. Chaque amendement produit séparément un dispositif (senat.ameli_amd.dis) et un expose_sommaire (senat.ameli_amd.obj, l’objet ou explication). La projection conserve le numéro, la subdivision, la date de dépôt, le texte support, le dossier, l’instance et le sort. Voir Rechercher dans les amendements du Sénat.
La table senat_amendment_search_queue est une file interne ; ne jamais la modifier avec Moulineuse.
Version du schéma
La table tisseuse.version contient le numéro de version installé. Elle est utile pour un diagnostic opérationnel, pas pour filtrer les données métier.
SELECT number FROM tisseuse.version;
Pour les tables source et les champs JSONB Légifrance, voir aussi Utiliser Légifrance comme base documentaire et Schéma assemblee dans canutes pour les UIDs associés.
Recettes liées
Poursuivez l'exploration avec des recettes proches : celles citées par cette page wiki et celles qui la référencent.
Recettes citées
Recettes vers lesquelles cette page pointe directement.
Rechercher dans les articles et les exposés des motifs des documents de l’Assemblée nationale, puis vérifier le document, le dossier et l’état parlementaire du résultat.
Trouver séparément la modification proposée et sa justification dans les amendements des législatures 14 à 17.
Rechercher dans les contenus Akoma Ntoso des textes Sénat indexés par Tisseuse, puis vérifier leur état documentaire, leur étape et leur source institutionnelle.
Interroger les dispositifs et exposés sommaires des amendements AMELI du Sénat par recherche plein texte.
Méthode de travail tirée de la fiche 1.4.1 mise à jour en 2024 pour vérifier l'état du droit et consolider une rédaction.
Comprendre la structure du schéma `assemblee` dans `canutes`, ses tables principales et ses colonnes JSONB.
À propos de ces recettes
Les recettes Moulineuse documentent des requêtes et des méthodes réutilisables pour analyser les données juridiques et parlementaires avec les outils Tricoteuses. Elles servent aussi directement au serveur MCP Moulineuse pour guider les usages et les extractions possibles.
Voir le serveur MCP Moulineuse