ddi-l 0.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- ddi_l-0.1.0/CHANGELOG.md +9 -0
- ddi_l-0.1.0/CITATION.cff +25 -0
- ddi_l-0.1.0/CODE_OF_CONDUCT.md +63 -0
- ddi_l-0.1.0/CONTRIBUTING.md +129 -0
- ddi_l-0.1.0/LICENSE +21 -0
- ddi_l-0.1.0/Makefile +18 -0
- ddi_l-0.1.0/PKG-INFO +269 -0
- ddi_l-0.1.0/README.md +226 -0
- ddi_l-0.1.0/SECURITY.md +68 -0
- ddi_l-0.1.0/codegen/COVERAGE_AUDIT.md +266 -0
- ddi_l-0.1.0/codegen/__init__.py +1 -0
- ddi_l-0.1.0/codegen/compare_models.py +377 -0
- ddi_l-0.1.0/codegen/coverage_audit.py +340 -0
- ddi_l-0.1.0/codegen/generate_model_bases.py +578 -0
- ddi_l-0.1.0/codegen/xsd_introspect.py +466 -0
- ddi_l-0.1.0/pyproject.toml +223 -0
- ddi_l-0.1.0/scripts/check_clean_install.py +88 -0
- ddi_l-0.1.0/scripts/check_distributions.py +167 -0
- ddi_l-0.1.0/src/ddi_l/__init__.py +188 -0
- ddi_l-0.1.0/src/ddi_l/_document_maintainables.py +256 -0
- ddi_l-0.1.0/src/ddi_l/_document_mixins.py +726 -0
- ddi_l-0.1.0/src/ddi_l/_document_namespaces.py +50 -0
- ddi_l-0.1.0/src/ddi_l/_etree.py +530 -0
- ddi_l-0.1.0/src/ddi_l/_etree.pyi +61 -0
- ddi_l-0.1.0/src/ddi_l/_schema_versions.py +145 -0
- ddi_l-0.1.0/src/ddi_l/cli.py +1573 -0
- ddi_l-0.1.0/src/ddi_l/constants.py +170 -0
- ddi_l-0.1.0/src/ddi_l/document.py +3079 -0
- ddi_l-0.1.0/src/ddi_l/examples/Quality_of_Life.xml +17915 -0
- ddi_l-0.1.0/src/ddi_l/examples/__init__.py +1 -0
- ddi_l-0.1.0/src/ddi_l/examples/build_and_validate.py +939 -0
- ddi_l-0.1.0/src/ddi_l/examples/example_fragment.xml +186 -0
- ddi_l-0.1.0/src/ddi_l/examples/example_instance.xml +944 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/__init__.py +0 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/__init__.py +1 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/golden/example_instance.canonical.xml +583 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/golden/minimal_instance.canonical.xml +10 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/golden/quality_of_life_instance.canonical.xml +351 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/instances/example_instance.xml +584 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/instances/quality_of_life_instance.xml +351 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/invalid_instance_3_1_missing_id.xml +6 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/invalid_instance_3_2_missing_id.xml +6 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/invalid_instance_missing_id.xml +6 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/malformed_instance.xml +2 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/minimal_fragment.xml +31 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/minimal_instance.xml +13 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/minimal_instance_3_1.xml +13 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/minimal_instance_3_2.xml +13 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/archive_minimal.golden.xml +5 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/archive_minimal.xml +5 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/archive_with_specific.golden.xml +21 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/archive_with_specific.xml +21 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/category_representative.golden.xml +19 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/category_representative.xml +19 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/classification_family_nested.golden.xml +73 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/classification_family_nested.xml +72 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/classification_item_nested.golden.xml +56 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/classification_item_nested.xml +52 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/classification_scheme_deep.golden.xml +113 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/classification_scheme_deep.xml +108 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/classification_series_with_scheme.golden.xml +61 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/classification_series_with_scheme.xml +57 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/code_list_full.golden.xml +35 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/code_list_full.xml +35 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/code_list_minimal.golden.xml +5 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/code_list_minimal.xml +5 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/collection_activity_administrative.golden.xml +30 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/collection_activity_administrative.xml +30 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/collection_activity_sensor.golden.xml +30 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/collection_activity_sensor.xml +30 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/collection_event_minimal.golden.xml +8 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/collection_event_minimal.xml +8 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/comparison_full.golden.xml +8 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/comparison_full.xml +8 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/comparison_minimal.golden.xml +5 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/comparison_minimal.xml +5 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/comparison_multi_name.golden.xml +14 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/comparison_multi_name.xml +14 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/comparison_with_maps.golden.xml +247 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/comparison_with_maps.xml +247 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/computation_item_full.golden.xml +25 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/computation_item_full.xml +25 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/concept_full.golden.xml +8 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/concept_full.xml +8 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/concept_map_with_items.golden.xml +99 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/concept_map_with_items.xml +99 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/concept_minimal.golden.xml +5 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/concept_minimal.xml +5 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/conceptual_component_full.golden.xml +98 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/conceptual_component_full.xml +98 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/conceptual_component_minimal.golden.xml +5 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/conceptual_component_minimal.xml +5 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/conceptual_component_representative.golden.xml +110 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/conceptual_component_representative.xml +110 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/conceptual_variable_full.golden.xml +42 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/conceptual_variable_full.xml +42 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/conceptual_variable_minimal.golden.xml +5 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/conceptual_variable_minimal.xml +5 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/conceptual_variable_representative.golden.xml +42 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/conceptual_variable_representative.xml +42 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/data_capture_development_minimal.golden.xml +32 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/data_capture_development_minimal.xml +32 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/data_capture_method_administrative.golden.xml +37 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/data_capture_method_administrative.xml +37 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/data_capture_method_sensor.golden.xml +37 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/data_capture_method_sensor.xml +37 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/data_collection_full.golden.xml +33 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/data_collection_full.xml +33 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/data_collection_minimal.golden.xml +12 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/data_collection_minimal.xml +12 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/data_collection_questionnaire.golden.xml +259 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/data_collection_questionnaire.xml +260 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/data_collection_with_extra.golden.xml +13 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/data_collection_with_extra.xml +13 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/general_instruction_minimal.golden.xml +20 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/general_instruction_minimal.xml +19 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/generation_instruction_minimal.golden.xml +26 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/generation_instruction_minimal.xml +24 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/group_minimal.golden.xml +33 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/group_minimal.xml +33 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/if_then_else_full.golden.xml +50 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/if_then_else_full.xml +50 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/information_classification_full.golden.xml +41 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/information_classification_full.xml +41 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/information_classification_minimal.golden.xml +5 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/information_classification_minimal.xml +5 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/instruction_group_with_reference.golden.xml +15 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/instruction_group_with_reference.xml +15 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/instruction_with_texts.golden.xml +18 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/instruction_with_texts.xml +18 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/instrument_full.golden.xml +8 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/instrument_full.xml +8 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/instrument_minimal.golden.xml +5 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/instrument_minimal.xml +5 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/interviewer_instruction_scheme_nested.golden.xml +65 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/interviewer_instruction_scheme_nested.xml +65 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/logical_product_full.golden.xml +72 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/logical_product_full.xml +72 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/logical_product_minimal.golden.xml +12 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/logical_product_minimal.xml +12 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/managed_missing_values_representation_full.golden.xml +56 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/managed_missing_values_representation_full.xml +56 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/managed_missing_values_representation_minimal.golden.xml +5 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/managed_missing_values_representation_minimal.xml +5 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/methodology_item_sampling.golden.xml +16 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/methodology_item_sampling.xml +15 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/methodology_nested.golden.xml +1 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/methodology_nested.xml +67 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/methodology_scheme_with_items.golden.xml +1 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/methodology_scheme_with_items.xml +34 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/observation_plan_administrative.golden.xml +31 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/observation_plan_administrative.xml +31 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/observation_plan_sensor.golden.xml +31 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/observation_plan_sensor.xml +31 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/organization_minimal.golden.xml +22 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/organization_minimal.xml +22 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/physical_instance_group_full.golden.xml +46 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/physical_instance_group_full.xml +46 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/physical_instance_group_minimal.golden.xml +5 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/physical_instance_group_minimal.xml +5 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/physical_instance_minimal.golden.xml +23 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/physical_instance_minimal.xml +23 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/physical_structure_full.golden.xml +14 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/physical_structure_full.xml +14 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/physical_structure_minimal.golden.xml +5 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/physical_structure_minimal.xml +5 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/process_control_minimal.golden.xml +15 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/process_control_minimal.xml +15 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/process_control_scheme_minimal.golden.xml +30 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/process_control_scheme_minimal.xml +30 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/process_method_scheme_minimal.golden.xml +30 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/process_method_scheme_minimal.xml +30 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/process_method_with_command.golden.xml +18 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/process_method_with_command.xml +18 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/process_scheme_with_processes.golden.xml +30 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/process_scheme_with_processes.xml +30 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/process_step_scheme_minimal.golden.xml +30 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/process_step_scheme_minimal.xml +30 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/process_step_with_components.golden.xml +45 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/process_step_with_components.xml +45 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/process_with_inline_components.golden.xml +60 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/process_with_inline_components.xml +60 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/processing_event_scheme_with_groups.golden.xml +133 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/processing_event_scheme_with_groups.xml +133 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/processing_event_with_operations.golden.xml +68 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/processing_event_with_operations.xml +68 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/processing_instruction_group_minimal.golden.xml +30 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/processing_instruction_group_minimal.xml +27 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/processing_instruction_scheme_minimal.golden.xml +58 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/processing_instruction_scheme_minimal.xml +54 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/quality_scheme_minimal.golden.xml +52 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/quality_scheme_minimal.xml +48 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/quality_scheme_nested.golden.xml +122 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/quality_scheme_nested.xml +122 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/quality_standard_enriched.golden.xml +44 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/quality_standard_enriched.xml +44 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/quality_standard_group_enriched.golden.xml +47 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/quality_standard_group_enriched.xml +47 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/quality_standard_group_minimal.golden.xml +16 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/quality_standard_group_minimal.xml +15 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/quality_standard_minimal.golden.xml +27 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/quality_standard_minimal.xml +27 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/quality_statement_enriched.golden.xml +38 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/quality_statement_enriched.xml +38 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/quality_statement_group_enriched.golden.xml +57 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/quality_statement_group_enriched.xml +57 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/quality_statement_group_minimal.golden.xml +23 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/quality_statement_group_minimal.xml +21 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/quality_statement_minimal.golden.xml +23 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/quality_statement_minimal.xml +22 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/quality_statement_with_other_statement.golden.xml +14 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/quality_statement_with_other_statement.xml +14 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/question_block_with_references.golden.xml +39 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/question_block_with_references.xml +39 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/question_construct_full.golden.xml +36 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/question_construct_full.xml +36 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/question_grid_with_dimension.golden.xml +71 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/question_grid_with_dimension.xml +71 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/question_group_with_references.golden.xml +22 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/question_group_with_references.xml +22 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/question_item_full.golden.xml +10 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/question_item_full.xml +10 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/question_item_minimal.golden.xml +5 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/question_item_minimal.xml +5 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/question_map_with_correspondence.golden.xml +55 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/question_map_with_correspondence.xml +55 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/question_scheme_with_fragments.golden.xml +178 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/question_scheme_with_fragments.xml +178 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/regenerate.py +1977 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/represented_variable_with_code.golden.xml +32 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/represented_variable_with_code.xml +32 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/resource_package_minimal.golden.xml +16 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/resource_package_minimal.xml +16 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/review_event_minimal.golden.xml +9 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/review_event_minimal.xml +9 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/sampling_information_group_minimal.golden.xml +30 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/sampling_information_group_minimal.xml +30 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/sampling_information_scheme_minimal.golden.xml +77 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/sampling_information_scheme_minimal.xml +77 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/sampling_plan_minimal.golden.xml +20 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/sampling_plan_minimal.xml +20 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/sequence_minimal.golden.xml +23 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/sequence_minimal.xml +23 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/statement_item_full.golden.xml +13 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/statement_item_full.xml +13 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/study_unit_minimal.golden.xml +12 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/study_unit_minimal.xml +12 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/study_unit_nonsurvey_admin.golden.xml +1 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/study_unit_nonsurvey_admin.xml +158 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/study_unit_nonsurvey_sensor.golden.xml +1 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/study_unit_nonsurvey_sensor.xml +152 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/study_unit_with_conceptual_component.golden.xml +110 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/study_unit_with_conceptual_component.xml +110 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/study_unit_with_conceptual_component_expected.xml +36 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/study_unit_with_inline_modules.golden.xml +176 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/study_unit_with_inline_modules.xml +176 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/unit_type_full.golden.xml +18 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/unit_type_full.xml +18 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/unit_type_minimal.golden.xml +12 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/unit_type_minimal.xml +12 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/unit_type_representative.golden.xml +18 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/unit_type_representative.xml +18 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/universe_full.golden.xml +8 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/universe_full.xml +8 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/universe_minimal.golden.xml +5 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/universe_minimal.xml +5 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/variable_enriched.golden.xml +109 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/variable_enriched.xml +109 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/variable_full.golden.xml +22 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/variable_full.xml +22 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/variable_group_minimal.golden.xml +19 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/variable_group_minimal.xml +19 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/variable_map_with_items.golden.xml +71 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/variable_map_with_items.xml +71 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/variable_minimal.golden.xml +5 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/variable_minimal.xml +5 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/weighting_full.golden.xml +56 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/weighting_full.xml +56 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/weighting_methodology_full.golden.xml +9 -0
- ddi_l-0.1.0/src/ddi_l/examples/tests/fixtures/models/weighting_methodology_full.xml +9 -0
- ddi_l-0.1.0/src/ddi_l/examples/use_cases/load_instance.py +53 -0
- ddi_l-0.1.0/src/ddi_l/examples/use_cases/validate_instance.py +51 -0
- ddi_l-0.1.0/src/ddi_l/examples/use_cases/write_instance.py +51 -0
- ddi_l-0.1.0/src/ddi_l/exceptions.py +581 -0
- ddi_l-0.1.0/src/ddi_l/index.py +759 -0
- ddi_l-0.1.0/src/ddi_l/io.py +687 -0
- ddi_l-0.1.0/src/ddi_l/jsonld.py +239 -0
- ddi_l-0.1.0/src/ddi_l/lint.py +667 -0
- ddi_l-0.1.0/src/ddi_l/maintainable_registry.py +232 -0
- ddi_l-0.1.0/src/ddi_l/models/__init__.py +286 -0
- ddi_l-0.1.0/src/ddi_l/models/_generated/__init__.py +5 -0
- ddi_l-0.1.0/src/ddi_l/models/_generated/archive.py +1175 -0
- ddi_l-0.1.0/src/ddi_l/models/_generated/comparative.py +347 -0
- ddi_l-0.1.0/src/ddi_l/models/_generated/conceptualcomponent.py +1185 -0
- ddi_l-0.1.0/src/ddi_l/models/_generated/datacollection.py +6510 -0
- ddi_l-0.1.0/src/ddi_l/models/_generated/dataset.py +195 -0
- ddi_l-0.1.0/src/ddi_l/models/_generated/ddiprofile.py +148 -0
- ddi_l-0.1.0/src/ddi_l/models/_generated/fixed_attributes.py +516 -0
- ddi_l-0.1.0/src/ddi_l/models/_generated/group.py +691 -0
- ddi_l-0.1.0/src/ddi_l/models/_generated/instance.py +627 -0
- ddi_l-0.1.0/src/ddi_l/models/_generated/label_slots.py +222 -0
- ddi_l-0.1.0/src/ddi_l/models/_generated/logicalproduct.py +2513 -0
- ddi_l-0.1.0/src/ddi_l/models/_generated/physicaldataproduct.py +701 -0
- ddi_l-0.1.0/src/ddi_l/models/_generated/physicaldataproduct_ncube_inline.py +196 -0
- ddi_l-0.1.0/src/ddi_l/models/_generated/physicaldataproduct_ncube_normal.py +205 -0
- ddi_l-0.1.0/src/ddi_l/models/_generated/physicaldataproduct_ncube_tabular.py +268 -0
- ddi_l-0.1.0/src/ddi_l/models/_generated/physicaldataproduct_proprietary.py +206 -0
- ddi_l-0.1.0/src/ddi_l/models/_generated/physicalinstance.py +602 -0
- ddi_l-0.1.0/src/ddi_l/models/_generated/reusable.py +5116 -0
- ddi_l-0.1.0/src/ddi_l/models/_generated/studyunit.py +196 -0
- ddi_l-0.1.0/src/ddi_l/models/archive.py +75 -0
- ddi_l-0.1.0/src/ddi_l/models/base.py +2287 -0
- ddi_l-0.1.0/src/ddi_l/models/classification.py +171 -0
- ddi_l-0.1.0/src/ddi_l/models/comparison.py +295 -0
- ddi_l-0.1.0/src/ddi_l/models/concept.py +50 -0
- ddi_l-0.1.0/src/ddi_l/models/conceptualcomponent.py +294 -0
- ddi_l-0.1.0/src/ddi_l/models/datacollection/__init__.py +117 -0
- ddi_l-0.1.0/src/ddi_l/models/datacollection/_monolith.py +3579 -0
- ddi_l-0.1.0/src/ddi_l/models/dataset.py +224 -0
- ddi_l-0.1.0/src/ddi_l/models/dissemination.py +808 -0
- ddi_l-0.1.0/src/ddi_l/models/group.py +41 -0
- ddi_l-0.1.0/src/ddi_l/models/instance.py +87 -0
- ddi_l-0.1.0/src/ddi_l/models/logicalproduct.py +2100 -0
- ddi_l-0.1.0/src/ddi_l/models/methodology.py +538 -0
- ddi_l-0.1.0/src/ddi_l/models/physical.py +233 -0
- ddi_l-0.1.0/src/ddi_l/models/process.py +602 -0
- ddi_l-0.1.0/src/ddi_l/models/profile.py +68 -0
- ddi_l-0.1.0/src/ddi_l/models/quality.py +87 -0
- ddi_l-0.1.0/src/ddi_l/models/reusable.py +267 -0
- ddi_l-0.1.0/src/ddi_l/models/study.py +810 -0
- ddi_l-0.1.0/src/ddi_l/namespace_utils.py +263 -0
- ddi_l-0.1.0/src/ddi_l/namespaces.py +249 -0
- ddi_l-0.1.0/src/ddi_l/operations.py +244 -0
- ddi_l-0.1.0/src/ddi_l/py.typed +0 -0
- ddi_l-0.1.0/src/ddi_l/registry/__init__.py +175 -0
- ddi_l-0.1.0/src/ddi_l/schema_loader/__init__.py +91 -0
- ddi_l-0.1.0/src/ddi_l/schema_loader/_cache.py +85 -0
- ddi_l-0.1.0/src/ddi_l/schema_loader/_compat.py +110 -0
- ddi_l-0.1.0/src/ddi_l/schema_loader/_constants.py +66 -0
- ddi_l-0.1.0/src/ddi_l/schema_loader/_conversion.py +838 -0
- ddi_l-0.1.0/src/ddi_l/schema_loader/_conversion_runtime.py +126 -0
- ddi_l-0.1.0/src/ddi_l/schema_loader/_fallback.py +137 -0
- ddi_l-0.1.0/src/ddi_l/schema_loader/_libxml2.py +80 -0
- ddi_l-0.1.0/src/ddi_l/schema_loader/_namespaces.py +240 -0
- ddi_l-0.1.0/src/ddi_l/schema_loader/_preflight.py +54 -0
- ddi_l-0.1.0/src/ddi_l/schema_loader/_validation.py +757 -0
- ddi_l-0.1.0/src/ddi_l/schema_loader/_versions.py +127 -0
- ddi_l-0.1.0/src/ddi_l/schema_sync.py +208 -0
- ddi_l-0.1.0/src/ddi_l/schemas/README.md +38 -0
- ddi_l-0.1.0/src/ddi_l/schemas/__init__.py +1 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_1/XHTML/xhtml-attribs-1.xsd +82 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_1/XHTML/xhtml-bdo-1.xsd +85 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_1/XHTML/xhtml-blkphras-1.xsd +206 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_1/XHTML/xhtml-blkpres-1.xsd +42 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_1/XHTML/xhtml-blkstruct-1.xsd +57 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_1/XHTML/xhtml-charent-1.xsd +41 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_1/XHTML/xhtml-datatypes-1.xsd +147 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_1/XHTML/xhtml-framework-1.xsd +74 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_1/XHTML/xhtml-hypertext-1.xsd +51 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_1/XHTML/xhtml-inlphras-1.xsd +220 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_1/XHTML/xhtml-inlpres-1.xsd +56 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_1/XHTML/xhtml-inlstruct-1.xsd +60 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_1/XHTML/xhtml-inlstyle-1.xsd +27 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_1/XHTML/xhtml-lat1.ent +121 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_1/XHTML/xhtml-list-1.xsd +128 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_1/XHTML/xhtml-notations-1.xsd +105 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_1/XHTML/xhtml-pres-1.xsd +53 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_1/XHTML/xhtml-special.ent +82 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_1/XHTML/xhtml-symbol.ent +204 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_1/XHTML/xhtml-table-1.xsd +323 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_1/XHTML/xhtml-text-1.xsd +70 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_1/archive.xsd +1797 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_1/comparative.xsd +570 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_1/conceptualcomponent.xsd +1517 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_1/datacollection.xsd +7300 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_1/dataset.xsd +243 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_1/dc.xsd +119 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_1/dcmitype.xsd +53 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_1/dcterms.xsd +383 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_1/ddi-xhtml11-model-1.xsd +462 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_1/ddi-xhtml11-modules-1.xsd +537 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_1/ddi-xhtml11.xsd +83 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_1/ddiprofile.xsd +227 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_1/group.xsd +1403 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_1/instance_3_1.xsd +406 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_1/logicalproduct.xsd +3488 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_1/physicaldataproduct.xsd +813 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_1/physicaldataproduct_ncube_inline.xsd +221 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_1/physicaldataproduct_ncube_normal.xsd +237 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_1/physicaldataproduct_ncube_tabular.xsd +283 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_1/physicaldataproduct_proprietary.xsd +237 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_1/physicalinstance.xsd +833 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_1/reusable.xsd +8337 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_1/studyunit.xsd +325 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_1/xml.xsd +76 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_2/XHTML/xhtml-attribs-1.xsd +82 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_2/XHTML/xhtml-bdo-1.xsd +85 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_2/XHTML/xhtml-blkphras-1.xsd +206 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_2/XHTML/xhtml-blkpres-1.xsd +42 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_2/XHTML/xhtml-blkstruct-1.xsd +57 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_2/XHTML/xhtml-charent-1.xsd +41 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_2/XHTML/xhtml-datatypes-1.xsd +147 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_2/XHTML/xhtml-framework-1.xsd +74 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_2/XHTML/xhtml-hypertext-1.xsd +51 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_2/XHTML/xhtml-inlphras-1.xsd +220 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_2/XHTML/xhtml-inlpres-1.xsd +56 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_2/XHTML/xhtml-inlstruct-1.xsd +60 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_2/XHTML/xhtml-inlstyle-1.xsd +27 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_2/XHTML/xhtml-lat1.ent +121 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_2/XHTML/xhtml-list-1.xsd +128 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_2/XHTML/xhtml-notations-1.xsd +105 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_2/XHTML/xhtml-pres-1.xsd +53 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_2/XHTML/xhtml-special.ent +82 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_2/XHTML/xhtml-symbol.ent +204 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_2/XHTML/xhtml-table-1.xsd +323 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_2/XHTML/xhtml-text-1.xsd +70 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_2/archive.xsd +1797 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_2/comparative.xsd +570 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_2/conceptualcomponent.xsd +1517 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_2/datacollection.xsd +7300 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_2/dataset.xsd +243 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_2/dc.xsd +119 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_2/dcmitype.xsd +53 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_2/dcterms.xsd +383 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_2/ddi-xhtml11-model-1.xsd +462 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_2/ddi-xhtml11-modules-1.xsd +537 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_2/ddi-xhtml11.xsd +83 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_2/ddiprofile.xsd +227 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_2/group.xsd +1403 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_2/instance_3_2.xsd +406 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_2/logicalproduct.xsd +3488 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_2/physicaldataproduct.xsd +813 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_2/physicaldataproduct_ncube_inline.xsd +221 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_2/physicaldataproduct_ncube_normal.xsd +237 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_2/physicaldataproduct_ncube_tabular.xsd +283 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_2/physicaldataproduct_proprietary.xsd +237 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_2/physicalinstance.xsd +833 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_2/reusable.xsd +8337 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_2/studyunit.xsd +325 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_2/xml.xsd +76 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_3/XHTML/xhtml-attribs-1.xsd +82 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_3/XHTML/xhtml-bdo-1.xsd +85 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_3/XHTML/xhtml-blkphras-1.xsd +206 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_3/XHTML/xhtml-blkpres-1.xsd +42 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_3/XHTML/xhtml-blkstruct-1.xsd +57 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_3/XHTML/xhtml-charent-1.xsd +41 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_3/XHTML/xhtml-datatypes-1.xsd +147 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_3/XHTML/xhtml-framework-1.xsd +74 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_3/XHTML/xhtml-hypertext-1.xsd +51 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_3/XHTML/xhtml-inlphras-1.xsd +220 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_3/XHTML/xhtml-inlpres-1.xsd +56 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_3/XHTML/xhtml-inlstruct-1.xsd +60 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_3/XHTML/xhtml-inlstyle-1.xsd +27 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_3/XHTML/xhtml-lat1.ent +121 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_3/XHTML/xhtml-list-1.xsd +128 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_3/XHTML/xhtml-notations-1.xsd +105 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_3/XHTML/xhtml-pres-1.xsd +53 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_3/XHTML/xhtml-special.ent +82 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_3/XHTML/xhtml-symbol.ent +204 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_3/XHTML/xhtml-table-1.xsd +323 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_3/XHTML/xhtml-text-1.xsd +70 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_3/archive.xsd +1797 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_3/comparative.xsd +570 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_3/conceptualcomponent.xsd +1517 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_3/datacollection.xsd +7300 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_3/dataset.xsd +243 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_3/dc.xsd +119 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_3/dcmitype.xsd +53 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_3/dcterms.xsd +383 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_3/ddi-xhtml11-model-1.xsd +462 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_3/ddi-xhtml11-modules-1.xsd +537 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_3/ddi-xhtml11.xsd +83 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_3/ddiprofile.xsd +227 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_3/group.xsd +1403 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_3/instance_3_3.xsd +406 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_3/logicalproduct.xsd +3488 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_3/physicaldataproduct.xsd +813 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_3/physicaldataproduct_ncube_inline.xsd +221 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_3/physicaldataproduct_ncube_normal.xsd +237 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_3/physicaldataproduct_ncube_tabular.xsd +283 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_3/physicaldataproduct_proprietary.xsd +237 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_3/physicalinstance.xsd +833 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_3/reusable.xsd +8337 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_3/studyunit.xsd +325 -0
- ddi_l-0.1.0/src/ddi_l/schemas/ddi/v3_3/xml.xsd +76 -0
- ddi_l-0.1.0/src/ddi_l/schemas/license.txt +117 -0
- ddi_l-0.1.0/src/ddi_l/schemas/readme.txt +169 -0
- ddi_l-0.1.0/src/ddi_l/server/__init__.py +27 -0
- ddi_l-0.1.0/src/ddi_l/server/app.py +101 -0
- ddi_l-0.1.0/src/ddi_l/server/config.py +52 -0
- ddi_l-0.1.0/src/ddi_l/server/i18n.py +372 -0
- ddi_l-0.1.0/src/ddi_l/server/openapi.py +91 -0
- ddi_l-0.1.0/src/ddi_l/server/render.py +57 -0
- ddi_l-0.1.0/src/ddi_l/server/routes.py +551 -0
- ddi_l-0.1.0/src/ddi_l/server/samples.py +145 -0
- ddi_l-0.1.0/src/ddi_l/server/schemas.py +502 -0
- ddi_l-0.1.0/src/ddi_l/validation.py +372 -0
- ddi_l-0.1.0/src/ddi_l/xml_utils.py +174 -0
- ddi_l-0.1.0/tests/__init__.py +22 -0
- ddi_l-0.1.0/tests/conftest.py +158 -0
- ddi_l-0.1.0/tests/fixtures/Canadian_Survey_on_Business_conditions.xml +145404 -0
- ddi_l-0.1.0/tests/helpers/__init__.py +1 -0
- ddi_l-0.1.0/tests/helpers/maintainable_fixtures.py +244 -0
- ddi_l-0.1.0/tests/helpers/synthetic_maintainable.py +54 -0
- ddi_l-0.1.0/tests/test_backend_parity.py +345 -0
- ddi_l-0.1.0/tests/test_base_coverage.py +918 -0
- ddi_l-0.1.0/tests/test_child_identification_propagation.py +72 -0
- ddi_l-0.1.0/tests/test_cli.py +1250 -0
- ddi_l-0.1.0/tests/test_cli_edge_cases.py +445 -0
- ddi_l-0.1.0/tests/test_conversion_coverage.py +521 -0
- ddi_l-0.1.0/tests/test_conversion_runtime.py +128 -0
- ddi_l-0.1.0/tests/test_crud_api.py +1264 -0
- ddi_l-0.1.0/tests/test_datacollection_coverage.py +484 -0
- ddi_l-0.1.0/tests/test_datacollection_example_roundtrip.py +90 -0
- ddi_l-0.1.0/tests/test_demos.py +106 -0
- ddi_l-0.1.0/tests/test_docs_code_samples.py +200 -0
- ddi_l-0.1.0/tests/test_docs_execution.py +272 -0
- ddi_l-0.1.0/tests/test_docs_r.py +116 -0
- ddi_l-0.1.0/tests/test_docs_site_config.py +341 -0
- ddi_l-0.1.0/tests/test_document.py +890 -0
- ddi_l-0.1.0/tests/test_document_coverage.py +627 -0
- ddi_l-0.1.0/tests/test_document_dict_roundtrip.py +495 -0
- ddi_l-0.1.0/tests/test_document_handles.py +234 -0
- ddi_l-0.1.0/tests/test_document_mixins.py +622 -0
- ddi_l-0.1.0/tests/test_document_versioning_flush.py +195 -0
- ddi_l-0.1.0/tests/test_etree.py +188 -0
- ddi_l-0.1.0/tests/test_exceptions_coverage.py +519 -0
- ddi_l-0.1.0/tests/test_finegrained_helpers.py +223 -0
- ddi_l-0.1.0/tests/test_fragment.py +291 -0
- ddi_l-0.1.0/tests/test_generic_engine_shadow.py +146 -0
- ddi_l-0.1.0/tests/test_identifier_generation.py +44 -0
- ddi_l-0.1.0/tests/test_import_cost.py +43 -0
- ddi_l-0.1.0/tests/test_index.py +637 -0
- ddi_l-0.1.0/tests/test_index_coverage.py +502 -0
- ddi_l-0.1.0/tests/test_instance_roundtrip.py +59 -0
- ddi_l-0.1.0/tests/test_invalid_inputs.py +201 -0
- ddi_l-0.1.0/tests/test_io.py +803 -0
- ddi_l-0.1.0/tests/test_io_coverage.py +453 -0
- ddi_l-0.1.0/tests/test_jsonld.py +189 -0
- ddi_l-0.1.0/tests/test_lint.py +501 -0
- ddi_l-0.1.0/tests/test_lint_edge_cases.py +485 -0
- ddi_l-0.1.0/tests/test_logging_plugin.py +78 -0
- ddi_l-0.1.0/tests/test_logicalproduct_coverage.py +896 -0
- ddi_l-0.1.0/tests/test_logicalproduct_models.py +108 -0
- ddi_l-0.1.0/tests/test_maintainable_comparisons.py +106 -0
- ddi_l-0.1.0/tests/test_maintainable_registry.py +72 -0
- ddi_l-0.1.0/tests/test_maintainable_registry_coverage.py +295 -0
- ddi_l-0.1.0/tests/test_model_coverage_misc.py +642 -0
- ddi_l-0.1.0/tests/test_model_edge_cases.py +605 -0
- ddi_l-0.1.0/tests/test_models_roundtrip.py +975 -0
- ddi_l-0.1.0/tests/test_namespace_provenance.py +187 -0
- ddi_l-0.1.0/tests/test_namespace_utils.py +230 -0
- ddi_l-0.1.0/tests/test_namespaces.py +63 -0
- ddi_l-0.1.0/tests/test_nonsurvey_roundtrip.py +126 -0
- ddi_l-0.1.0/tests/test_packaged_examples.py +69 -0
- ddi_l-0.1.0/tests/test_packaging.py +19 -0
- ddi_l-0.1.0/tests/test_public_api.py +131 -0
- ddi_l-0.1.0/tests/test_quality_of_life_fragment.py +230 -0
- ddi_l-0.1.0/tests/test_questionnaire_fragments.py +102 -0
- ddi_l-0.1.0/tests/test_registry_class.py +167 -0
- ddi_l-0.1.0/tests/test_release_metadata.py +99 -0
- ddi_l-0.1.0/tests/test_resolver_helpers.py +186 -0
- ddi_l-0.1.0/tests/test_roundtrip_fidelity.py +63 -0
- ddi_l-0.1.0/tests/test_schema_conversion_bench.py +119 -0
- ddi_l-0.1.0/tests/test_schema_loader.py +698 -0
- ddi_l-0.1.0/tests/test_schema_loader_fallback.py +159 -0
- ddi_l-0.1.0/tests/test_schema_loader_missing_helper.py +193 -0
- ddi_l-0.1.0/tests/test_schema_loader_validation_cache.py +68 -0
- ddi_l-0.1.0/tests/test_schema_sync.py +334 -0
- ddi_l-0.1.0/tests/test_schema_versions.py +292 -0
- ddi_l-0.1.0/tests/test_scheme_labels.py +180 -0
- ddi_l-0.1.0/tests/test_server.py +435 -0
- ddi_l-0.1.0/tests/test_server_examples.py +221 -0
- ddi_l-0.1.0/tests/test_server_i18n.py +213 -0
- ddi_l-0.1.0/tests/test_training_docs.py +74 -0
- ddi_l-0.1.0/tests/test_utility_edge_cases.py +719 -0
- ddi_l-0.1.0/tests/test_validation.py +339 -0
- ddi_l-0.1.0/tests/test_validation_backends.py +262 -0
- ddi_l-0.1.0/tests/test_validation_coverage.py +436 -0
- ddi_l-0.1.0/tests/test_validation_fragment_cache.py +44 -0
- ddi_l-0.1.0/tests/test_validations.py +424 -0
- ddi_l-0.1.0/tests/test_version_detection.py +97 -0
- ddi_l-0.1.0/tests/test_version_helpers.py +106 -0
- ddi_l-0.1.0/tests/test_versionable_metadata.py +58 -0
- ddi_l-0.1.0/tests/test_xml_security.py +43 -0
- ddi_l-0.1.0/tests/test_xml_utils.py +72 -0
- ddi_l-0.1.0/uv.lock +2675 -0
ddi_l-0.1.0/CHANGELOG.md
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
The changelog is maintained as part of the documentation site so it stays
|
|
4
|
+
bilingual and versioned alongside the docs.
|
|
5
|
+
|
|
6
|
+
- English: [docs/release-notes.en.md](docs/release-notes.en.md)
|
|
7
|
+
- Français : [docs/release-notes.fr.md](docs/release-notes.fr.md)
|
|
8
|
+
|
|
9
|
+
Both are published at <https://pbisson44.github.io/ddi-l/>.
|
ddi_l-0.1.0/CITATION.cff
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
cff-version: 1.2.0
|
|
2
|
+
title: "ddi-l: a Python toolkit for DDI Lifecycle 3.3 XML documents"
|
|
3
|
+
message: "If you use this software, please cite it using these metadata."
|
|
4
|
+
type: software
|
|
5
|
+
authors:
|
|
6
|
+
- family-names: Bisson
|
|
7
|
+
given-names: Philippe
|
|
8
|
+
repository-code: "https://github.com/pbisson44/ddi-l"
|
|
9
|
+
url: "https://github.com/pbisson44/ddi-l"
|
|
10
|
+
abstract: >-
|
|
11
|
+
ddi-l is a Python library and command-line tool for creating, reading,
|
|
12
|
+
updating, and validating DDI Lifecycle 3.3 XML documents. Its model layer is
|
|
13
|
+
generated from the official DDI XML Schemas, and the DDI 3.1, 3.2, and 3.3
|
|
14
|
+
schemas are bundled so validation works offline.
|
|
15
|
+
keywords:
|
|
16
|
+
- DDI
|
|
17
|
+
- DDI Lifecycle
|
|
18
|
+
- metadata
|
|
19
|
+
- survey
|
|
20
|
+
- XML
|
|
21
|
+
- official statistics
|
|
22
|
+
- data documentation
|
|
23
|
+
license: MIT
|
|
24
|
+
version: 0.1.0
|
|
25
|
+
date-released: "2026-08-08"
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# Contributor Covenant Code of Conduct
|
|
2
|
+
|
|
3
|
+
## Our Pledge
|
|
4
|
+
|
|
5
|
+
We as members, contributors, and leaders pledge to make participation in our
|
|
6
|
+
community a harassment-free experience for everyone, regardless of age, body
|
|
7
|
+
size, visible or invisible disability, ethnicity, sex characteristics, gender
|
|
8
|
+
identity and expression, level of experience, education, socio-economic
|
|
9
|
+
status, nationality, personal appearance, race, caste, color, religion, or
|
|
10
|
+
sexual identity and orientation.
|
|
11
|
+
|
|
12
|
+
We pledge to act and interact in ways that contribute to an open, welcoming,
|
|
13
|
+
diverse, inclusive, and healthy community.
|
|
14
|
+
|
|
15
|
+
## Our Standards
|
|
16
|
+
|
|
17
|
+
Examples of behavior that contributes to a positive environment:
|
|
18
|
+
|
|
19
|
+
- Demonstrating empathy and kindness toward other people
|
|
20
|
+
- Being respectful of differing opinions, viewpoints, and experiences
|
|
21
|
+
- Giving and gracefully accepting constructive feedback
|
|
22
|
+
- Accepting responsibility and apologizing to those affected by our mistakes,
|
|
23
|
+
and learning from the experience
|
|
24
|
+
- Focusing on what is best for the overall community
|
|
25
|
+
|
|
26
|
+
Examples of unacceptable behavior:
|
|
27
|
+
|
|
28
|
+
- The use of sexualized language or imagery, and sexual attention or advances
|
|
29
|
+
- Trolling, insulting or derogatory comments, and personal or political attacks
|
|
30
|
+
- Public or private harassment
|
|
31
|
+
- Publishing others' private information, such as a physical or email address,
|
|
32
|
+
without their explicit permission
|
|
33
|
+
- Other conduct which could reasonably be considered inappropriate in a
|
|
34
|
+
professional setting
|
|
35
|
+
|
|
36
|
+
## Enforcement Responsibilities
|
|
37
|
+
|
|
38
|
+
Community leaders are responsible for clarifying and enforcing our standards
|
|
39
|
+
of acceptable behavior and will take appropriate and fair corrective action in
|
|
40
|
+
response to any behavior that they deem inappropriate, threatening, offensive,
|
|
41
|
+
or harmful.
|
|
42
|
+
|
|
43
|
+
## Scope
|
|
44
|
+
|
|
45
|
+
This Code of Conduct applies within all community spaces, and also applies
|
|
46
|
+
when an individual is officially representing the community in public spaces.
|
|
47
|
+
|
|
48
|
+
## Enforcement
|
|
49
|
+
|
|
50
|
+
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
|
51
|
+
reported to the maintainer at <pbisson44@gmail.com>. All complaints will be
|
|
52
|
+
reviewed and investigated promptly and fairly.
|
|
53
|
+
|
|
54
|
+
All community leaders are obligated to respect the privacy and security of the
|
|
55
|
+
reporter of any incident.
|
|
56
|
+
|
|
57
|
+
## Attribution
|
|
58
|
+
|
|
59
|
+
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
|
|
60
|
+
version 2.1, available at
|
|
61
|
+
<https://www.contributor-covenant.org/version/2/1/code_of_conduct.html>.
|
|
62
|
+
|
|
63
|
+
[homepage]: https://www.contributor-covenant.org
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
# Contributing to ddi-l
|
|
2
|
+
|
|
3
|
+
Thanks for helping improve `ddi-l`! This guide covers the development
|
|
4
|
+
environment, coding standards, the XSD-driven codegen pipeline, and how to
|
|
5
|
+
run the quality gates.
|
|
6
|
+
|
|
7
|
+
The full contributor guide, including the architecture overview, lives at
|
|
8
|
+
[docs/DEVELOPMENT.en.md](docs/DEVELOPMENT.en.md)
|
|
9
|
+
([français](docs/DEVELOPMENT.fr.md)).
|
|
10
|
+
|
|
11
|
+
## Set up your environment
|
|
12
|
+
|
|
13
|
+
**Python 3.11 or newer** is required. The project is managed with
|
|
14
|
+
[uv](https://docs.astral.sh/uv/); `uv.lock` pins every dependency version and
|
|
15
|
+
CI installs from it with `--locked`.
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
uv sync --group dev # Runtime + development dependencies
|
|
19
|
+
uv sync --group dev --extra full # ...plus the optional lxml backend
|
|
20
|
+
uv sync --group docs # Documentation toolchain
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
Note that `full` is an **extra**, not a dependency group: `--group full`
|
|
24
|
+
fails.
|
|
25
|
+
|
|
26
|
+
With plain pip instead:
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
python -m venv .venv && source .venv/bin/activate
|
|
30
|
+
pip install -e '.[full]' --group dev # pip 25.1+ reads dependency groups
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Coding standards
|
|
34
|
+
|
|
35
|
+
- **Formatting and linting**: `ruff format` and `ruff check` with the
|
|
36
|
+
project configuration in `pyproject.toml`. Line length is 88 characters.
|
|
37
|
+
`ruff` and `mypy` are pinned to exact versions; bump them deliberately.
|
|
38
|
+
- **Type hints**: `mypy` on `src/` and `tests/` is blocking in CI.
|
|
39
|
+
- **Docstrings**: Google style (`Args:`, `Returns:`, `Raises:` sections).
|
|
40
|
+
Enforced by ruff's `D` rule set with `convention = "google"`.
|
|
41
|
+
- **Imports**: Ruff's isort integration handles ordering.
|
|
42
|
+
- **Tests**: `pytest` with `pytest-cov`. Tests go under `tests/`.
|
|
43
|
+
Coverage target is 90%.
|
|
44
|
+
- **Documentation**: pages come in `.en.md` / `.fr.md` pairs. Update both
|
|
45
|
+
when you change user-facing content.
|
|
46
|
+
|
|
47
|
+
## Quality gates
|
|
48
|
+
|
|
49
|
+
Run these before opening a pull request:
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
uv run ruff format --check . # Formatting
|
|
53
|
+
uv run ruff check . # Linting (includes docstring rules)
|
|
54
|
+
uv run mypy src tests # Type checking
|
|
55
|
+
uv run pytest # Tests with coverage
|
|
56
|
+
uvx pip-audit --strict # Dependency vulnerability scan
|
|
57
|
+
git diff --exit-code # A test run must not modify tracked files
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
Or use the Makefile for release-level checks:
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
make release-check # Build, verify assets, test install
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
`make release-check` builds both distributions, asserts the bundled XSDs and
|
|
67
|
+
examples are present, asserts `ddi_l` is the only top-level package in the
|
|
68
|
+
wheel, then installs the wheel into a clean virtualenv and validates a
|
|
69
|
+
document with it. Run it before proposing a release.
|
|
70
|
+
|
|
71
|
+
## XSD-driven codegen pipeline
|
|
72
|
+
|
|
73
|
+
All model classes are generated from the DDI 3.3 XSD files. The XSD is the
|
|
74
|
+
single source of truth for fields, ordering, namespaces, and documentation.
|
|
75
|
+
|
|
76
|
+
To regenerate models after modifying the codegen scripts:
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
uv run python -m codegen.generate_model_bases
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
CI runs a drift check (`git diff --exit-code src/ddi_l/models/_generated/`)
|
|
83
|
+
to ensure generated code stays in sync with the XSD. Never edit generated
|
|
84
|
+
files by hand.
|
|
85
|
+
|
|
86
|
+
Key codegen files:
|
|
87
|
+
|
|
88
|
+
- `codegen/xsd_introspect.py`: Extracts the XSD content model
|
|
89
|
+
- `codegen/generate_model_bases.py`: Emits generated field-only base classes
|
|
90
|
+
- `codegen/coverage_audit.py`: Regenerates `codegen/COVERAGE_AUDIT.md`
|
|
91
|
+
- `src/ddi_l/models/base.py`: Generic XML engine; `MaintainableBase.from_xml`
|
|
92
|
+
and `.to_xml` drive serialization off the generated `_FIELD_XML_MAP`,
|
|
93
|
+
`_ATTR_XML_MAP`, and `_ELEMENT_ORDER` tables
|
|
94
|
+
- `src/ddi_l/models/_generated/`: Generated output (do not edit), including
|
|
95
|
+
`label_slots.py`, the schema-derived table of elements that may carry an
|
|
96
|
+
`r:Label`
|
|
97
|
+
|
|
98
|
+
## Bundled schemas
|
|
99
|
+
|
|
100
|
+
The DDI XSDs live inside the package at `src/ddi_l/schemas/` so validation
|
|
101
|
+
works offline from a plain `pip install ddi-l`. Always resolve them through
|
|
102
|
+
`importlib.resources` (`resources.files("ddi_l.schemas")`), never a path
|
|
103
|
+
relative to the repository root, which works in a clone and breaks in an
|
|
104
|
+
installed wheel. The schemas are CC-BY-4.0 from the DDI Alliance; their
|
|
105
|
+
`license.txt` and `readme.txt` must stay in the distribution.
|
|
106
|
+
|
|
107
|
+
## Documentation
|
|
108
|
+
|
|
109
|
+
The documentation site uses MkDocs with the Material theme and bilingual
|
|
110
|
+
(EN/FR) support via `mkdocs-static-i18n`.
|
|
111
|
+
|
|
112
|
+
```bash
|
|
113
|
+
uv run mkdocs serve --strict # Live preview on http://127.0.0.1:8000
|
|
114
|
+
uv run mkdocs build --strict # Build and check for errors
|
|
115
|
+
# or
|
|
116
|
+
make docs-serve
|
|
117
|
+
make docs-build
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
## Submitting changes
|
|
121
|
+
|
|
122
|
+
1. Fork the repository and create a feature branch.
|
|
123
|
+
2. Write or update tests alongside code changes.
|
|
124
|
+
3. Update both the English and French documentation pages where relevant.
|
|
125
|
+
4. Run the quality gates listed above.
|
|
126
|
+
5. Commit with clear messages describing the intent of each change.
|
|
127
|
+
6. Open a pull request with a summary and any related issue references.
|
|
128
|
+
|
|
129
|
+
Thanks for contributing!
|
ddi_l-0.1.0/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Philippe Bisson
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
ddi_l-0.1.0/Makefile
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
.PHONY: example release-check docs-build docs-serve
|
|
2
|
+
|
|
3
|
+
example:
|
|
4
|
+
python -m ddi_l.examples.build_and_validate --refresh
|
|
5
|
+
|
|
6
|
+
# Build both distributions and check their contents and a clean install.
|
|
7
|
+
release-check:
|
|
8
|
+
rm -rf dist
|
|
9
|
+
python -m build --sdist --wheel
|
|
10
|
+
python scripts/check_distributions.py dist
|
|
11
|
+
python scripts/check_clean_install.py dist
|
|
12
|
+
|
|
13
|
+
# NO_MKDOCS_2_WARNING silences Material's advisory banner.
|
|
14
|
+
docs-build:
|
|
15
|
+
NO_MKDOCS_2_WARNING=1 mkdocs build --strict
|
|
16
|
+
|
|
17
|
+
docs-serve:
|
|
18
|
+
NO_MKDOCS_2_WARNING=1 mkdocs serve --strict
|
ddi_l-0.1.0/PKG-INFO
ADDED
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: ddi-l
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Python toolkit for DDI Lifecycle XML: read, author, validate and lint DDI 3.1, 3.2 and 3.3
|
|
5
|
+
License-Expression: MIT
|
|
6
|
+
License-File: LICENSE
|
|
7
|
+
License-File: src/ddi_l/schemas/license.txt
|
|
8
|
+
Keywords: ddi,ddi-lifecycle,metadata,survey,xml,statistics,data-documentation
|
|
9
|
+
Author: Philippe Bisson
|
|
10
|
+
Author-email: pbisson44@gmail.com
|
|
11
|
+
Requires-Python: >=3.11
|
|
12
|
+
Classifier: Development Status :: 4 - Beta
|
|
13
|
+
Classifier: Intended Audience :: Science/Research
|
|
14
|
+
Classifier: Intended Audience :: Developers
|
|
15
|
+
Classifier: Environment :: Console
|
|
16
|
+
Classifier: Natural Language :: English
|
|
17
|
+
Classifier: Natural Language :: French
|
|
18
|
+
Classifier: Operating System :: OS Independent
|
|
19
|
+
Classifier: Programming Language :: Python :: 3
|
|
20
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
22
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
23
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
24
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
25
|
+
Classifier: Topic :: Scientific/Engineering
|
|
26
|
+
Classifier: Topic :: Text Processing :: Markup :: XML
|
|
27
|
+
Classifier: Typing :: Typed
|
|
28
|
+
Provides-Extra: full
|
|
29
|
+
Provides-Extra: server
|
|
30
|
+
Requires-Dist: defusedxml (>=0.7)
|
|
31
|
+
Requires-Dist: litestar (>=2.12,<3) ; extra == "server"
|
|
32
|
+
Requires-Dist: lxml (>=4.9) ; extra == "full"
|
|
33
|
+
Requires-Dist: orjson (>=3.9)
|
|
34
|
+
Requires-Dist: uvicorn[standard] (>=0.30) ; extra == "server"
|
|
35
|
+
Requires-Dist: xmlschema (>=2.4)
|
|
36
|
+
Project-URL: Changelog, https://github.com/pbisson44/ddi-l/blob/main/docs/release-notes.en.md
|
|
37
|
+
Project-URL: Documentation, https://pbisson44.github.io/ddi-l/
|
|
38
|
+
Project-URL: Homepage, https://github.com/pbisson44/ddi-l
|
|
39
|
+
Project-URL: Issues, https://github.com/pbisson44/ddi-l/issues
|
|
40
|
+
Project-URL: Repository, https://github.com/pbisson44/ddi-l
|
|
41
|
+
Description-Content-Type: text/markdown
|
|
42
|
+
|
|
43
|
+
# ddi-l
|
|
44
|
+
|
|
45
|
+
[](https://pypi.org/project/ddi-l/)
|
|
46
|
+
[](https://pypi.org/project/ddi-l/)
|
|
47
|
+
[](https://pypi.org/project/ddi-l/)
|
|
48
|
+
[](https://peps.python.org/pep-0561/)
|
|
49
|
+
[](https://ddialliance.org/Specification/DDI-Lifecycle/3.3/)
|
|
50
|
+
[](https://github.com/pbisson44/ddi-l/blob/main/LICENSE)
|
|
51
|
+
|
|
52
|
+
[](https://github.com/pbisson44/ddi-l/actions/workflows/ci.yml)
|
|
53
|
+
[](https://pbisson44.github.io/ddi-l/)
|
|
54
|
+
[](https://github.com/pbisson44/ddi-l/blob/main/pyproject.toml)
|
|
55
|
+
|
|
56
|
+
[](https://github.com/astral-sh/uv)
|
|
57
|
+
[](https://github.com/astral-sh/ruff)
|
|
58
|
+
[](https://mypy-lang.org/)
|
|
59
|
+
[](https://github.com/pbisson44/ddi-l/blob/main/.pre-commit-config.yaml)
|
|
60
|
+
|
|
61
|
+
A Python library for creating, reading, updating, and validating
|
|
62
|
+
[DDI Lifecycle 3.3](https://ddialliance.org/Specification/DDI-Lifecycle/3.3/)
|
|
63
|
+
XML documents.
|
|
64
|
+
|
|
65
|
+
**[Documentation](https://pbisson44.github.io/ddi-l/)**: guides, a models
|
|
66
|
+
reference, CLI recipes and a 16-module training curriculum, in English and
|
|
67
|
+
French.
|
|
68
|
+
|
|
69
|
+
## Installation
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
pip install ddi-l
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
Optional extras:
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
pip install 'ddi-l[full]' # lxml: faster parsing and validation
|
|
79
|
+
pip install 'ddi-l[server]' # HTTP API (see `ddi serve` below)
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
The DDI 3.1, 3.2, and 3.3 XML Schemas are bundled with the package, so
|
|
83
|
+
validation works offline with no additional download.
|
|
84
|
+
|
|
85
|
+
**Using R?** Call `ddi-l` through [reticulate](https://rstudio.github.io/reticulate/);
|
|
86
|
+
see [Using ddi-l from R](https://pbisson44.github.io/ddi-l/r-users/).
|
|
87
|
+
|
|
88
|
+
## Quick start
|
|
89
|
+
|
|
90
|
+
### Create a study
|
|
91
|
+
|
|
92
|
+
```python
|
|
93
|
+
import ddi_l as ddi
|
|
94
|
+
|
|
95
|
+
doc = ddi.new_study(title="Household Survey", agency="example.org")
|
|
96
|
+
|
|
97
|
+
# Add questions. `label=` is optional, but `ddi lint` reports every
|
|
98
|
+
# maintainable without one, so labelling here is the difference between
|
|
99
|
+
# output that passes the linter this package ships and output that warns
|
|
100
|
+
# about itself.
|
|
101
|
+
q_age = doc.add_question(text="How old are you?", label="Age question")
|
|
102
|
+
q_gender = doc.add_question(text="What is your gender?", label="Gender question")
|
|
103
|
+
|
|
104
|
+
# Add variables linked to questions
|
|
105
|
+
doc.add_variable(name="Age", question=q_age, label="Age in years")
|
|
106
|
+
doc.add_variable(name="Gender", question=q_gender, label="Gender of respondent")
|
|
107
|
+
|
|
108
|
+
# Add concepts and universes
|
|
109
|
+
doc.add_concept(name="Demographics", label="Demographics")
|
|
110
|
+
doc.add_universe(name="Canadian adults aged 18+", label="Canadian adults aged 18+")
|
|
111
|
+
|
|
112
|
+
# Save to XML
|
|
113
|
+
doc.save("household-survey.xml")
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
### Open and explore
|
|
117
|
+
|
|
118
|
+
```python
|
|
119
|
+
import ddi_l as ddi
|
|
120
|
+
|
|
121
|
+
doc = ddi.open_ddi("household-survey.xml")
|
|
122
|
+
|
|
123
|
+
print(f"Questions: {len(doc.questions)}")
|
|
124
|
+
print(f"Variables: {len(doc.variables)}")
|
|
125
|
+
|
|
126
|
+
for v in doc.variables:
|
|
127
|
+
print(f" {v.identifier}")
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
### Update and delete
|
|
131
|
+
|
|
132
|
+
```python
|
|
133
|
+
# Find an item by identifier
|
|
134
|
+
item = doc.find("some-identifier")
|
|
135
|
+
|
|
136
|
+
# Remove an item
|
|
137
|
+
doc.remove("some-identifier")
|
|
138
|
+
|
|
139
|
+
# Save changes
|
|
140
|
+
doc.save("household-survey.xml")
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
### Validate
|
|
144
|
+
|
|
145
|
+
```python
|
|
146
|
+
import ddi_l as ddi
|
|
147
|
+
|
|
148
|
+
doc = ddi.open_ddi("household-survey.xml", validate=True)
|
|
149
|
+
|
|
150
|
+
issues = doc.validate()
|
|
151
|
+
for issue in issues:
|
|
152
|
+
print(f"[{issue.severity}] {issue.message}")
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
### Work with any DDI item type
|
|
156
|
+
|
|
157
|
+
The `add_item()` method supports all 30 registered DDI item types:
|
|
158
|
+
|
|
159
|
+
```python
|
|
160
|
+
from ddi_l.models.logicalproduct import Category, RepresentedVariable
|
|
161
|
+
from ddi_l.models.datacollection import Instrument
|
|
162
|
+
|
|
163
|
+
doc.add_item(Category, name="Male")
|
|
164
|
+
doc.add_item(Category, name="Female")
|
|
165
|
+
doc.add_item(RepresentedVariable, name="Gender Representation")
|
|
166
|
+
doc.add_item(Instrument, name="CAWI Questionnaire")
|
|
167
|
+
|
|
168
|
+
# Query items by type
|
|
169
|
+
print(f"Categories: {len(doc.items(Category))}")
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
### Command-line interface
|
|
173
|
+
|
|
174
|
+
```bash
|
|
175
|
+
ddi --version # Version and default DDI schema version
|
|
176
|
+
ddi validate my-study.xml # Schema validation
|
|
177
|
+
ddi lint my-study.xml # Lint checks (exits 1 on errors)
|
|
178
|
+
ddi to-json my-study.xml # Convert to JSON (round-trippable)
|
|
179
|
+
ddi to-jsonld my-study.xml # Convert to JSON-LD (linked data)
|
|
180
|
+
ddi from-json my-study.json -o my-study.xml # Convert back from JSON
|
|
181
|
+
ddi roundtrip my-study.xml -o out.xml # Round-trip XML
|
|
182
|
+
ddi versions # List supported DDI schema versions
|
|
183
|
+
ddi serve # HTTP API (needs the 'server' extra)
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
`ddi validate` and `ddi lint` exit non-zero when they find **errors**, which is
|
|
187
|
+
what makes them usable as CI gates. Warnings are reported but do not fail the
|
|
188
|
+
run; add `--fail-severity warning` to `ddi lint` once a corpus is clean enough
|
|
189
|
+
to hold that line.
|
|
190
|
+
|
|
191
|
+
### HTTP API
|
|
192
|
+
|
|
193
|
+
With `ddi-l[server]` installed, the same validate, lint and convert operations
|
|
194
|
+
are available over HTTP, which is useful when DDI validation has to be reachable from
|
|
195
|
+
outside Python:
|
|
196
|
+
|
|
197
|
+
```bash
|
|
198
|
+
ddi serve --port 8080
|
|
199
|
+
curl --data-binary @my-study.xml http://localhost:8080/v1/validate
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
`/v1/convert/jsonld` renders a study as linked data using the DDI Alliance's
|
|
203
|
+
own [DDI-RDF Discovery vocabulary](https://rdf-vocabulary.ddialliance.org/discovery.html),
|
|
204
|
+
ready to load into a triple store. It covers DDI's discovery subset and does not
|
|
205
|
+
convert back; use `/v1/convert/json` when the payload has to return to XML.
|
|
206
|
+
|
|
207
|
+
Open <http://localhost:8080/> in a browser and you land on **[Swagger UI](https://swagger.io/tools/swagger-ui/)
|
|
208
|
+
at `/schema`**: every endpoint with its request body, query parameters and
|
|
209
|
+
response schema, each carrying a real example. "Try it out" comes prefilled with
|
|
210
|
+
a valid DDI document, so you can validate one without writing a request first.
|
|
211
|
+
The raw OpenAPI document is at `/schema/openapi.json`.
|
|
212
|
+
|
|
213
|
+
See the [HTTP API guide](https://pbisson44.github.io/ddi-l/server/) for the
|
|
214
|
+
endpoint reference and the limits to set before exposing it.
|
|
215
|
+
|
|
216
|
+
## What's public, and what's stable
|
|
217
|
+
|
|
218
|
+
`ddi-l` has a wide surface, so it is worth saying which part is the front door.
|
|
219
|
+
|
|
220
|
+
**Start here.** `ddi.new_study()` and `ddi.open_ddi()` return a `Document`, and
|
|
221
|
+
`Document` is the supported API for authoring and editing. Almost everything in
|
|
222
|
+
the guides uses it.
|
|
223
|
+
|
|
224
|
+
**The advanced layer** (`DDIDocument`, `DDIFragment`, `StudyCursor`, and the
|
|
225
|
+
generated classes under `ddi_l.models`) is public and documented, and is what
|
|
226
|
+
you reach for when you need raw elements, partial instances, or a specific study
|
|
227
|
+
in a multi-study file.
|
|
228
|
+
|
|
229
|
+
**Semantic versioning applies to** the `ddi_l` top-level exports, `ddi_l.models`,
|
|
230
|
+
`ddi_l.io`, `ddi_l.lint`, `ddi_l.validation`, `ddi_l.operations`, and the `ddi`
|
|
231
|
+
CLI's commands and exit codes.
|
|
232
|
+
|
|
233
|
+
**Provisional in 0.1.x**, and may change without a major bump:
|
|
234
|
+
|
|
235
|
+
- `ddi_l.models._generated`: regenerated from the XSDs; import the public
|
|
236
|
+
re-exports in `ddi_l.models` instead.
|
|
237
|
+
- `ddi_l.server` and its HTTP routes: new in this release and not yet exercised
|
|
238
|
+
against real deployments.
|
|
239
|
+
- Anything prefixed with `_`.
|
|
240
|
+
|
|
241
|
+
While `0.x`, breaking changes land in minor versions and are called out in the
|
|
242
|
+
[release notes](https://pbisson44.github.io/ddi-l/release-notes/).
|
|
243
|
+
|
|
244
|
+
## Supported Python versions
|
|
245
|
+
|
|
246
|
+
Python 3.11, 3.12, 3.13, and 3.14.
|
|
247
|
+
|
|
248
|
+
## Contributing
|
|
249
|
+
|
|
250
|
+
See [CONTRIBUTING.md](https://github.com/pbisson44/ddi-l/blob/main/CONTRIBUTING.md) for development setup, coding standards,
|
|
251
|
+
and testing instructions.
|
|
252
|
+
|
|
253
|
+
## License
|
|
254
|
+
|
|
255
|
+
The `ddi-l` source code is [MIT](https://github.com/pbisson44/ddi-l/blob/main/LICENSE) licensed.
|
|
256
|
+
|
|
257
|
+
### Bundled third-party content
|
|
258
|
+
|
|
259
|
+
This package redistributes the official DDI Lifecycle XML Schemas (versions
|
|
260
|
+
3.1, 3.2, and 3.3) under `ddi_l/schemas/`, so that validation works offline.
|
|
261
|
+
|
|
262
|
+
- **Schemas:** © [DDI Alliance](https://ddialliance.org/), licensed
|
|
263
|
+
[CC-BY-4.0](https://creativecommons.org/licenses/by/4.0/).
|
|
264
|
+
- The full license text and the DDI Alliance release notes ship alongside the
|
|
265
|
+
schemas as `license.txt` and `readme.txt`.
|
|
266
|
+
|
|
267
|
+
The MIT license above covers the `ddi-l` code only; it does not alter the
|
|
268
|
+
terms under which the DDI schemas are provided.
|
|
269
|
+
|