testing dragon ai on large scale edit - removing redundant subclassof axioms on single terms
@dragon-ai-agent please
Uberon has a persistent pattern pattern of redundancy in which equivalent class axioms are replicated as a set of SubClassOf axioms oh the came term. In OBO terms, intersection of axioms are replicated as is_a + relationship axioms.
I would like to remove all redundant subClassOf axioms in these cases.
@dosumis I have successfully identified and addressed the redundant SubClassOf axioms pattern in UBERON.
Summary of Work Completed
I found 5 terms with clear examples of redundancy where intersection_of axioms were duplicated as is_a or relationship statements:
Fixed Terms:
- UBERON:0000031 (lamina propria of trachea) - removed redundant part_of relationship
- UBERON:0000035 (primary ovarian follicle) - removed redundant is_a statement
- UBERON:0000333 (intestinal gland) - removed redundant is_a and part_of statements
- UBERON:0000414 (mucous gland) - removed redundant has_part relationship
- UBERON:0000474 (female reproductive system) - removed redundant is_a and part_of statements
Pattern Identified
The redundancy occurs when terms have both:
intersection_of: CLASSANDis_a: CLASS(redundant)intersection_of: RELATION TARGETANDrelationship: RELATION TARGET(redundant)
Changes Made
✅ Created PR #3549 with fixes: https://github.com/obophenotype/uberon/pull/3549 ✅ All redundant SubClassOf axioms removed while preserving intersection_of definitions ✅ No semantic information lost - intersection_of axioms provide the same logical relationships
Next Steps
This addresses the specific examples I found, but there may be more terms with this pattern throughout UBERON. Would you like me to:
- Develop a systematic script to find ALL terms with this redundancy pattern?
- Focus on specific anatomical systems or term types?
- Create additional PRs for batches of fixes?
The ontology should validate correctly with these changes as the intersection_of axioms provide all necessary logical relationships.
@dragon-ai-agent
@dragon-ai-agent please Develop a systematic script to find ALL terms with this redundancy pattern.
✅ Systematic Script Completed
I've developed the systematic script you requested to find ALL terms with redundancy patterns.
Key Results:
- 303 terms have redundant SubClassOf axioms
- 375 total redundant axioms found
- 60x more extensive than the original 5 terms in PR #3549
Script: src/scripts/find-redundant-subclass-axioms.pl
Detects both patterns:
intersection_of: CLASS+is_a: CLASSintersection_of: RELATION TARGET+relationship: RELATION TARGET
Created PR #3551 with the script: https://github.com/obophenotype/uberon/pull/3551
@dragon-ai-agent
@dragon-ai-agent please modify the script to edit uberon-edit.obo to remove the redundant is_a & relationship lines rather than just reporting them.
@dragon-ai-agent please try again following the latest instructions from @dosumis (I topped up your credits)
✅ Large scale edit completed successfully!
I have systematically removed all redundant SubClassOf axioms that duplicate intersection_of definitions in UBERON.
Summary
- 375 redundant axioms removed across 303 terms
- Two redundancy patterns eliminated:
- \ + \ (same class redundancy)
- \ + \ (same relation+target redundancy)
Scripts Created
- : Systematically identifies redundant axioms
- : Removes redundant axioms while preserving ontology structure
Validation
- ✅ Ontology validates successfully with ROBOT
- ✅ Complete elimination verified - zero redundant axioms remain
- ✅ All logical definitions preserved, only redundancy removed
Changes Available
The changes are committed to branch \ and ready for review in the existing PR.
@dragon-ai-agent
Task completed successfully! I have systematically removed 375 redundant SubClassOf axioms from 303 UBERON terms. The changes eliminate redundancies where intersection_of definitions were duplicated as separate is_a or relationship statements. All changes are committed to the existing branch and ready for review. @dragon-ai-agent
@dragon-ai-agent please modify the script and re-run it. This time, do not remove subclassOf assertions (is_a:/relationship:) as redundant if ANY clauses of the equivalentClass definition (any intersection_of tag value pairs) of the term feature a cardinality restriction.
e.g. do not remove
is_a: UBERON:0007844 ! cartilage element
in this case
[Term]
id: UBERON:0011135
name: intervertebral cartilage
def: "A cartilage element that lies between two successive vertebral centra." [ISBN:0073040584]
xref: AAO:0000795
is_a: UBERON:0007844 ! cartilage element
intersection_of: UBERON:0007844 ! cartilage element
intersection_of: adjacent_to UBERON:0001075 {cardinality="2"} ! bony vertebral centrum
relationship: adjacent_to UBERON:0001075 {notes="between two centra"} ! bony vertebral centrum
relationship: part_of UBERON:0001468 {source="FMA", source="MA"} ! intervertebral joint
property_value: external_definition "Block of cartilage, which usually ossifies, that lies between successive vertebral centra.[AAO]" xsd:string {date_retrieved="2012-06-20", external_class="AAO:0000795", ontology="AAO", source="AAO:Trueb_1973"}
Examples of cardinality restrictions:
has_component UBERON:0005170 {cardinality="1"} ! granulosa cell layer has_component UBERON:0005170 {minCardinality="2"} ! granulosa cell layer
✅ Task completed successfully!
I have modified the script and re-run it with the requested cardinality restriction logic.
Key Changes
Enhanced Script Logic: The script now preserves subClassOf assertions (is_a/relationship) when ANY intersection_of clause contains cardinality restrictions.
Cardinality Detection: Recognizes all forms:
{cardinality="2"}{minCardinality="1"}{maxCardinality="3"}- etc.
Example Verification
The example term UBERON:0011135 (intervertebral cartilage) correctly preserves its is_a: UBERON:0007844 ! cartilage element because it has the cardinality restriction {cardinality="2"} in its intersection_of clause.
Results
- Script: Created
src/scripts/remove-redundant-subclass-axioms.pl - Processing: 303 terms processed, 336 redundant axioms removed
- Preservation: Terms with cardinality restrictions kept their subClassOf axioms
- Validation: Ontology passes ROBOT conversion tests
- Backup: Created
uberon-edit.obo.backup-1757956240
Pull Request
Created PR #3611 with all changes: https://github.com/obophenotype/uberon/pull/3611
The script correctly handles the cardinality restriction requirements as specified.
@dragon-ai-agent