From d4fa4be06548893784fe66bae5bb8c073bfbac45 Mon Sep 17 00:00:00 2001 From: Forest Savage <96553407+forest-savage1234@users.noreply.github.com> Date: Sun, 30 Aug 2026 22:58:18 -0800 Subject: [PATCH] Fix text-field validation for data and annotation properties --- src/dosdp/validator.py | 9 +++++++-- .../test/generic_test/validator_test.py | 19 ++++++++++++++++++- 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/src/dosdp/validator.py b/src/dosdp/validator.py index 249e093..0a2347e 100755 --- a/src/dosdp/validator.py +++ b/src/dosdp/validator.py @@ -82,8 +82,13 @@ def test_text_fields(pattern): Returns: True if schema text fields are valid, False otherwise. """ owl_entities = set() - if 'classes' in pattern.keys(): owl_entities.update(set(pattern['classes'].keys())) - if 'relations' in pattern.keys(): owl_entities.update(set(pattern['relations'].keys())) + for entity_type in ( + 'classes', + 'relations', + 'dataProperties', + 'annotationProperties', + ): + owl_entities.update(pattern.get(entity_type, {}).keys()) expr = parse('logical_axioms.[*].text') ms_fields = [match for match in expr.find(pattern)] expr = parse('logical_axioms.[*].multi_clause.clauses.[*].text') diff --git a/src/schema/test/generic_test/validator_test.py b/src/schema/test/generic_test/validator_test.py index 33572df..d55ddb0 100644 --- a/src/schema/test/generic_test/validator_test.py +++ b/src/schema/test/generic_test/validator_test.py @@ -2,7 +2,7 @@ import os -from dosdp.validator import validate +from dosdp.validator import test_text_fields, validate POSITIVE_PATTERNS_FOLDER = os.path.join(os.path.dirname(os.path.realpath(__file__)), "../positive_test_set/patterns") POSITIVE_PATTERN_1 = os.path.join(os.path.dirname(os.path.realpath(__file__)), @@ -68,5 +68,22 @@ def test_single_list_per_multi_clause(self): def test_undeclared_annotation_prop(self): self.assertFalse(validate(NEGATIVE_PATTERN_UNDECLARED_ANNOT_PROP)) + def test_text_fields_accept_all_declared_owl_entity_types(self): + pattern = { + "dataProperties": { + "mortality_rate": "RO:0002029", + }, + "annotationProperties": { + "source": "dc:source", + }, + "logical_axioms": [ + { + "text": "'mortality_rate' and 'source'", + }, + ], + } + + self.assertTrue(test_text_fields(pattern)) + def test_schema_validation(self): self.assertFalse(validate(NEGATIVE_PATTERN_SCHEMA))