Modèle relationnel et champs de référence¶
ddigraph crée des relations dans Neo4j en se basant sur la structure XML DDI. Les types de relations diffèrent entre les formats DDI Codebook et DDI-L FragmentInstance.
Relations DDI Codebook¶
Le chargeur Codebook dérive les types de relations à partir de DDI_RELATIONSHIPS défini dans
ddigraph.schema.ddi_graph. Chaque entrée capture :
- Type de relation : label de la relation Neo4j
- Labels début/fin : labels des nœuds du graphe
- Champ de référence : propriété utilisée pour les recherches
- Champ de recherche : valeur de référence intégrée optionnelle
Relations au niveau du jeu de données¶
La plupart des entités sont rattachées à un Dataset via IN_DATASET :
| Relation | Label de départ | Label d'arrivée | Description |
|---|---|---|---|
IN_DATASET |
Divers | Dataset | L'entité appartient au jeu de données |
DESCRIBES |
Study | Dataset | L'étude décrit le jeu de données |
DESCRIBES |
Citation | Dataset | La citation décrit le jeu de données |
ASSOCIATED_WITH |
Organization | Dataset | Organisation associée |
COVERS |
Coverage | Dataset | Couverture géographique/temporelle |
FUNDS |
Funding | Dataset | Source de financement |
CONTRIBUTES_TO |
Contributor | Dataset | Rôle de contributeur |
INSTRUMENT_FOR |
CollectionInstrument | Dataset | Instrument de collecte |
USES_CONSTRUCT |
ControlConstruct | Dataset | Utilisation de construit de contrôle |
REPRESENTS |
RepresentedVariable | Dataset | Représentation de variable |
HAS_COMPARISON |
Comparison | Dataset | Information de comparaison |
GOVERNED_BY |
AccessPolicy | Dataset | Politique d'accès |
Relations inter-entités¶
| Relation | Label de départ | Label d'arrivée | Champ de recherche |
|---|---|---|---|
IN_SCHEME |
Category | CodeScheme | code_scheme_id |
USES_CONCEPT |
Variable | Concept | concept |
IN_FILE |
Variable | DataFile | file_id |
IN_UNIVERSE |
Variable | Universe | universe_id |
ASKED_AS |
Variable | Question | question_id |
USES_CATEGORY |
Variable | Category | category_ids |
USES_QUESTION_ITEM |
Variable | QuestionItem | - |
PART_OF |
QuestionItem | Question | parent_question_id |
IN_GRID |
QuestionItem | QuestionGrid | parent_grid_id |
IN_FLOW |
QuestionItem | QuestionFlow | parent_flow_id |
GROUPS |
VarGroup | Variable | variable_ids |
GROUPS |
CategoryGroup | Category | category_ids |
USES_CONSTRUCT |
CollectionInstrument | ControlConstruct | referenced_construct_id |
USES_CONCEPT |
RepresentedVariable | Concept | concept |
Relations DDI-C 2.6¶
DDI Codebook 2.6 introduit des types d'entités supplémentaires avec de nouvelles relations :
| Relation | Label de départ | Label d'arrivée | Description |
|---|---|---|---|
IN_DATASET |
NCube | Dataset | Cube de données N-dimensionnel dans le jeu de données |
IN_DATASET |
NCubeGroup | Dataset | Groupe de nCubes dans le jeu de données |
IN_DATASET |
DocumentDescription | Dataset | Description de document dans le jeu de données |
IN_DATASET |
SampleFrame | Dataset | Cadre d'échantillonnage dans le jeu de données |
IN_DATASET |
QualityStatement | Dataset | Déclaration de qualité dans le jeu de données |
IN_DATASET |
StudyAuthorization | Dataset | Autorisation d'étude dans le jeu de données |
IN_DATASET |
StudyDevelopment | Dataset | Développement d'étude dans le jeu de données |
IN_DATASET |
ExPostEvaluation | Dataset | Évaluation ex-post dans le jeu de données |
GROUPS |
NCubeGroup | NCube | NCubeGroup regroupe les entités NCube |
Relations DDI-L FragmentInstance¶
Le chargeur FragmentInstance dérive les relations à partir des éléments *Reference du XML.
La correspondance est définie dans DDISchema.FRAGMENT_RELATIONSHIP_TYPES :
Relations de flux de contrôle¶
| Élément de référence | Relation | Description |
|---|---|---|
ControlConstructReference |
HAS_CONSTRUCT |
La séquence/l'instrument contient un construit |
ThenConstructReference |
THEN |
Branche vraie de IfThenElse |
ElseConstructReference |
ELSE |
Branche fausse de IfThenElse |
ElseIf/ThenConstructReference |
ELSE_IF |
Branche sinon-si de IfThenElse |
UntilConstructReference |
UNTIL |
Corps de la boucle RepeatUntil |
WhileConstructReference |
WHILE |
Corps de la boucle RepeatWhile |
LoopVariableReference |
LOOP_VARIABLE |
Variable d'itération de boucle |
Relations code/catégorie¶
| Élément de référence | Relation | Description |
|---|---|---|
CodeListReference |
USES_CODELIST |
La question utilise une liste de codes |
CategoryReference |
HAS_CATEGORY |
La CodeList contient une catégorie |
Relations de questions¶
| Élément de référence | Relation | Description |
|---|---|---|
QuestionReference |
ASKS_QUESTION |
Le construit pose une question |
QuestionItemReference |
ASKS_QUESTION |
Référence à un item de question |
QuestionGridReference |
ASKS_QUESTION |
Référence à une grille de questions |
QuestionBlockReference |
ASKS_QUESTION |
Référence à un bloc de questions |
Relations de mesure¶
| Élément de référence | Relation | Description |
|---|---|---|
MeasurementReference |
USES_MEASUREMENT |
Le construit utilise une mesure |
MeasurementItemReference |
USES_MEASUREMENT |
Référence à un item de mesure |
Relations d'instructions¶
| Élément de référence | Relation | Description |
|---|---|---|
InterviewerInstructionReference |
HAS_INSTRUCTION |
Instruction pour l'enquêteur |
InstructionReference |
HAS_INSTRUCTION |
Instruction générale |
Relations de variables¶
| Élément de référence | Relation | Description |
|---|---|---|
VariableReference |
REFERENCES_VARIABLE |
Référence de variable |
RepresentedVariableReference |
USES_REPRESENTED_VARIABLE |
Variable représentée |
AssignedVariableReference |
ASSIGNS_VARIABLE |
Affectation de variable |
Relations de flux de paramètres¶
| Élément de référence | Relation | Description |
|---|---|---|
SourceParameterReference |
SOURCE_PARAM |
Source des données du paramètre |
TargetParameterReference |
TARGET_PARAM |
Cible des données du paramètre |
InParameterReference |
IN_PARAM |
Paramètre d'entrée |
OutParameterReference |
OUT_PARAM |
Paramètre de sortie |
Autres relations¶
| Élément de référence | Relation | Description |
|---|---|---|
BasedOnReference |
BASED_ON |
Source de dérivation |
UniverseReference |
IN_UNIVERSE |
Référence de population |
ConceptReference |
USES_CONCEPT |
Référence de concept |
InstrumentReference |
USES_INSTRUMENT |
Référence d'instrument |
ValueDomainReference |
HAS_VALUE_DOMAIN |
Domaine de valeurs |
ManagedRepresentationReference |
HAS_REPRESENTATION |
Représentation |
Relations d'appartenance aux schémas¶
Ces relations rattachent chaque objet DDI au schéma qui le contient, facilitant les requêtes sur l'ensemble des membres d'un schéma.
| Élément de référence | Relation | Description |
|---|---|---|
QuestionSchemeReference |
IN_QUESTION_SCHEME |
La question appartient à un schéma de questions |
ControlConstructSchemeReference |
IN_CONTROL_CONSTRUCT_SCHEME |
Le construit appartient à un schéma de construits |
InstrumentSchemeReference |
IN_INSTRUMENT_SCHEME |
L'instrument appartient à un schéma d'instruments |
InterviewerInstructionSchemeReference |
IN_INSTRUCTION_SCHEME |
L'instruction appartient à un schéma d'instructions |
ProcessingEventSchemeReference |
IN_PROCESSING_EVENT_SCHEME |
L'événement de traitement appartient à son schéma |
ProcessingInstructionSchemeReference |
IN_PROCESSING_INSTRUCTION_SCHEME |
L'instruction de traitement appartient à son schéma |
DevelopmentActivitySchemeReference |
IN_DEVELOPMENT_ACTIVITY_SCHEME |
L'activité de développement appartient à son schéma |
MeasurementSchemeReference |
IN_MEASUREMENT_SCHEME |
L'item de mesure appartient à un schéma de mesures |
SamplingInformationSchemeReference |
IN_SAMPLING_INFORMATION_SCHEME |
L'information d'échantillonnage appartient à son schéma |
CodeListSchemeReference |
IN_CODELIST_SCHEME |
La liste de codes appartient à un schéma |
VariableSchemeReference |
IN_VARIABLE_SCHEME |
La variable appartient à un schéma de variables |
ConceptSchemeReference |
IN_CONCEPT_SCHEME |
Le concept appartient à un schéma de concepts |
UniverseSchemeReference |
IN_UNIVERSE_SCHEME |
L'univers appartient à un schéma d'univers |
ConceptualVariableSchemeReference |
IN_CONCEPTUAL_VARIABLE_SCHEME |
La variable conceptuelle appartient à son schéma |
GeographicStructureSchemeReference |
IN_GEOGRAPHIC_STRUCTURE_SCHEME |
La structure géographique appartient à son schéma |
GeographicLocationSchemeReference |
IN_GEOGRAPHIC_LOCATION_SCHEME |
L'emplacement géographique appartient à son schéma |
UnitTypeSchemeReference |
IN_UNIT_TYPE_SCHEME |
Le type d'unité appartient à son schéma |
ClassificationFamilyReference |
IN_CLASSIFICATION_FAMILY |
La classification appartient à une famille |
OrganizationReference |
REFERENCES_ORGANIZATION |
Référence à une organisation |
IndividualReference |
REFERENCES_INDIVIDUAL |
Référence à une personne nommée |
SamplingProcedureReference |
USES_SAMPLING_PROCEDURE |
L'objet utilise une procédure d'échantillonnage |
Comportement par défaut¶
Tout élément *Reference non reconnu est converti en type de relation en :
- Supprimant le suffixe "Reference"
- Convertissant en majuscules
Par exemple, CustomReference -> CUSTOM
Accès aux définitions du schéma¶
Les définitions de relations sont accessibles via la classe DDISchema :
from ddigraph.schema import DDISchema
# Obtenir le type de relation pour un element de reference
rel_type = DDISchema.get_fragment_relationship_type("ControlConstructReference")
# Retourne : "HAS_CONSTRUCT"
# Afficher toutes les correspondances de relations de fragments
print(DDISchema.FRAGMENT_RELATIONSHIP_TYPES)
Exemples pratiques¶
Enquête irlandaise sur l'emploi (DDI-L FragmentInstance)¶
Le fichier Ireland_LabourSurvey.xml illustre les relations DDI-L typiques :
Liaison de construits de contrôle :
<Instrument>
<ID>e274cbba-78ea-4a7b-bf06-e6fef1e570e1</ID>
<ControlConstructReference>
<ID>cdbc61f8-5a7d-4c04-bf3a-75eaf9f919ab</ID>
<TypeOfObject>Sequence</TypeOfObject>
</ControlConstructReference>
</Instrument>
Crée : (Instrument)-[:HAS_CONSTRUCT]->(Sequence)
Liaison question/CodeList :
<QuestionItem>
<ID>97cb6944-1704-483a-b32d-3e4965bd25aa</ID>
<CodeListReference>
<ID>20a3c76d-a966-4c32-a908-83f8a2ba341d</ID>
<TypeOfObject>CodeList</TypeOfObject>
</CodeListReference>
</QuestionItem>
Crée : (QuestionItem)-[:USES_CODELIST]->(CodeList)
Branchement conditionnel :
<IfThenElse>
<ID>conditional-123</ID>
<ThenConstructReference>
<ID>sequence-then</ID>
<TypeOfObject>Sequence</TypeOfObject>
</ThenConstructReference>
<ElseConstructReference>
<ID>sequence-else</ID>
<TypeOfObject>Sequence</TypeOfObject>
</ElseConstructReference>
</IfThenElse>
Crée :
(IfThenElse)-[:THEN]->(Sequence)(IfThenElse)-[:ELSE]->(Sequence)
Interrogation des relations¶
Requêtes DDI Codebook¶
-- Trouver toutes les variables d'un jeu de donnees
MATCH (d:Dataset {id: 'demo'})<-[:IN_DATASET]-(v:Variable)
RETURN v.name, v.label
-- Variables avec leurs concepts
MATCH (v:Variable)-[:USES_CONCEPT]->(c:Concept)
RETURN v.name, c.name
-- Questions regroupees par variable
MATCH (v:Variable)-[:ASKED_AS]->(q:Question)
RETURN v.name, q.text
Requêtes DDI-L FragmentInstance¶
-- Tracer le flux du questionnaire
MATCH path = (i:Instrument)-[:HAS_CONSTRUCT*1..5]->(c)
RETURN path
-- Trouver les branches conditionnelles
MATCH (ite:IfThenElse)-[:THEN]->(then_branch)
OPTIONAL MATCH (ite)-[:ELSE]->(else_branch)
RETURN ite.fragment_id, then_branch.fragment_id, else_branch.fragment_id
-- Questions avec leurs listes de codes
MATCH (qc:QuestionConstruct)-[:ASKS_QUESTION]->(q:QuestionItem)
-[:USES_CODELIST]->(cl:CodeList)
RETURN q.name, q.question_text, cl.name
-- Toutes les categories d'une liste de codes
MATCH (cl:CodeList)-[:HAS_CATEGORY]->(cat:Category)
RETURN cl.name, collect(cat.category_label) AS categories
Statistiques sur les relations¶
Après le chargement de Ireland_LabourSurvey.xml :
-- Compter les relations par type
MATCH ()-[r]->()
RETURN type(r) AS relationship_type, count(*) AS count
ORDER BY count DESC
Sortie typique :
| Type de relation | Nombre |
|---|---|
| HAS_CONSTRUCT | 450 |
| USES_CODELIST | 180 |
| HAS_CATEGORY | 120 |
| ASKS_QUESTION | 17 |
Relations DDI-CDI 1.0¶
Le chargeur CDI extrait les relations à partir des éléments d'association dans les fichiers XML DDI-CDI. Ces relations connectent les 210 types d'entités CDI concrets de niveau supérieur (associations exclues). Le tableau ci-dessous liste les types de relations capturés avec un label dédié ; les autres éléments d'association passent par le chemin d'entité générique.
| Relation | Label de départ | Label d'arrivée | Description |
|---|---|---|---|
HAS_CONCEPT |
ConceptualVariable | Concept | La variable utilise un concept |
MEASURES |
InstanceVariable | ConceptualVariable | L'instance mesure la variable conceptuelle |
HAS_CATEGORY |
CodeList | Category | La liste de codes contient une catégorie |
HAS_CODE |
CodeList | Code | La liste de codes contient un code |
DENOTES |
Code | Category | Le code dénote une catégorie |
HAS_CLASSIFICATION_ITEM |
StatisticalClassification | ClassificationItem | La classification contient un item |
HAS_COMPONENT |
WideDataStructure | InstanceVariable | La structure possède une variable composante |
IS_STRUCTURED_BY |
WideDataSet | WideDataStructure | Le jeu de données est structuré par la structure |
HAS_LOGICAL_RECORD |
WideDataSet | LogicalRecord | Le jeu de données possède un enregistrement logique |
CORRESPONDS_TO |
RepresentedVariable | ConceptualVariable | La variable représentée correspond à la variable conceptuelle |
PERFORMS |
Agent | Activity | L'agent effectue l'activité |
MAPS_TO |
CorrespondenceTable | ClassificationItem | La table de correspondance est reliée à un item de classification |
IS_BASED_ON |
RepresentedVariable | ConceptualVariable | La variable représentée est dérivée d'une variable conceptuelle |
IS_BASED_ON |
InstanceVariable | RepresentedVariable | La variable d'instance est dérivée d'une variable représentée |
TAKES_CONCEPT_FROM |
ConceptualVariable | Concept | La variable conceptuelle tire son concept de |
HAS_POPULATION |
Universe | Population | L'univers inclut cette population |
IS_DEFINED_BY |
DataStructureComponent | InstanceVariable | La composante de structure est définie par une variable |
HAS_SENTINEL_VALUE |
ValueDomain | Category | Le domaine de valeurs possède une valeur sentinelle ou manquante |
USES |
Activity | Activity | Une activité utilise ou dépend d'une autre activité |
HAS_DATA_STORE |
DataSet | DataStore | Le jeu de données contient un entrepôt de données |
Requêtes CDI¶
-- Trouver toutes les variables mesurant un concept
MATCH (iv:InstanceVariable)-[:MEASURES]->(cv:ConceptualVariable)-[:HAS_CONCEPT]->(c:Concept)
RETURN iv.name, cv.name, c.name
-- Explorer la structure d'un jeu de donnees
MATCH (ds:WideDataSet)-[:IS_STRUCTURED_BY]->(str:WideDataStructure)
-[:HAS_COMPONENT]->(iv:InstanceVariable)
RETURN ds.name, str.name, collect(iv.name) AS variables
-- Hierarchie de classification
MATCH (sc:StatisticalClassification)-[:HAS_CLASSIFICATION_ITEM]->(ci:ClassificationItem)
RETURN sc.name, ci.name
Consultez Architecture pour comprendre comment les relations transitent à travers le pipeline d'ingestion.