{"id":30393,"name":"ECTO","description":"Modular environmental exposures ontology.","url":"https://github.com/EnvironmentOntology/environmental-exposure-ontology","last_synced_at":"2026-04-07T14:30:30.309Z","repository":{"id":37611881,"uuid":"58469780","full_name":"EnvironmentOntology/environmental-exposure-ontology","owner":"EnvironmentOntology","description":"Modular environmental exposures ontology","archived":false,"fork":false,"pushed_at":"2025-06-01T14:26:19.000Z","size":144621,"stargazers_count":35,"open_issues_count":70,"forks_count":18,"subscribers_count":8,"default_branch":"master","last_synced_at":"2025-12-14T22:20:29.695Z","etag":null,"topics":["environment","exposure","health","monarchinitiative","obo","obofoundry","ontology","owl"],"latest_commit_sha":null,"homepage":"","language":"Makefile","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/EnvironmentOntology.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE-NOTES.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2016-05-10T14:48:12.000Z","updated_at":"2025-11-21T15:49:37.000Z","dependencies_parsed_at":"2025-06-10T10:47:28.949Z","dependency_job_id":null,"html_url":"https://github.com/EnvironmentOntology/environmental-exposure-ontology","commit_stats":{"total_commits":521,"total_committers":9,"mean_commits":"57.888888888888886","dds":0.6333973128598849,"last_synced_commit":"d4f90ad318ea3325cf59238380610c61ab95bcd7"},"previous_names":[],"tags_count":24,"template":false,"template_full_name":null,"purl":"pkg:github/EnvironmentOntology/environmental-exposure-ontology","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EnvironmentOntology%2Fenvironmental-exposure-ontology","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EnvironmentOntology%2Fenvironmental-exposure-ontology/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EnvironmentOntology%2Fenvironmental-exposure-ontology/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EnvironmentOntology%2Fenvironmental-exposure-ontology/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/EnvironmentOntology","download_url":"https://codeload.github.com/EnvironmentOntology/environmental-exposure-ontology/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EnvironmentOntology%2Fenvironmental-exposure-ontology/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":27761180,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-12-16T02:00:10.477Z","response_time":57,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"owner":{"login":"EnvironmentOntology","name":"The Environment Ontology","uuid":"11706544","kind":"organization","description":"The public code repository of the Environmental Ontology project and GAZ, a gazetteer build on ontological principles","email":null,"website":"http://www.environmentontology.org","location":null,"twitter":null,"company":null,"icon_url":"https://avatars.githubusercontent.com/u/11706544?v=4","repositories_count":5,"last_synced_at":"2023-03-01T09:10:31.947Z","metadata":{"has_sponsors_listing":false},"html_url":"https://github.com/EnvironmentOntology","funding_links":[],"total_stars":null,"followers":null,"following":null,"created_at":"2022-11-12T07:30:41.274Z","updated_at":"2023-03-01T09:10:32.000Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/EnvironmentOntology","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/EnvironmentOntology/repositories"},"packages":[],"commits":{"id":1342010,"full_name":"EnvironmentOntology/environmental-exposure-ontology","default_branch":"master","total_commits":522,"total_committers":8,"total_bot_commits":0,"total_bot_committers":0,"mean_commits":65.25,"dds":0.6340996168582376,"past_year_total_commits":1,"past_year_total_committers":1,"past_year_total_bot_commits":0,"past_year_total_bot_committers":0,"past_year_mean_commits":1.0,"past_year_dds":0.0,"last_synced_at":"2025-12-14T22:47:51.790Z","last_synced_commit":"c5b17dff2ee222aaf1e775e095c1b95e48395981","created_at":"2023-09-12T08:51:32.352Z","updated_at":"2025-12-14T22:47:24.469Z","committers":[{"name":"Lauren","email":"49169837+laurenechan","login":"laurenechan","count":191},{"name":"Chris Mungall","email":"cjm@berkeleybop.org","login":"cmungall","count":128},{"name":"Nico Matentzoglu","email":"nicolas.matentzoglu@gmail.com","login":"matentzn","count":91},{"name":"Anne Thessen","email":"annethessen@gmail.com","login":"diatomsRcool","count":58},{"name":"Bill Duncan","email":"wdduncan@gmail.com","login":"wdduncan","count":27},{"name":"Nicole Vasilevsky","email":"vasilevs@ohsu.edu","login":"nicolevasilevsky","count":25},{"name":"Nomi Harris","email":"nlharris","login":"nlharris","count":1},{"name":"Julie McMurry","email":"jmcmurry","login":"jmcmurry","count":1}],"past_year_committers":[{"name":"Nico Matentzoglu","email":"nicolas.matentzoglu@gmail.com","login":"matentzn","count":1}],"commits_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub/repositories/EnvironmentOntology%2Fenvironmental-exposure-ontology/commits","host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2025-12-16T00:00:54.726Z","repositories_count":6131454,"commits_count":927094372,"contributors_count":36039515,"owners_count":1124342,"icon_url":"https://github.com/github.png","host_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub/repositories"}},"issues_stats":{"full_name":"EnvironmentOntology/environmental-exposure-ontology","html_url":"https://github.com/EnvironmentOntology/environmental-exposure-ontology","last_synced_at":"2025-09-01T03:33:24.607Z","status":"error","issues_count":35,"pull_requests_count":72,"avg_time_to_close_issue":21493492.6,"avg_time_to_close_pull_request":2631480.2898550723,"issues_closed_count":20,"pull_requests_closed_count":69,"pull_request_authors_count":9,"issue_authors_count":14,"avg_comments_per_issue":6.714285714285714,"avg_comments_per_pull_request":0.9027777777777778,"merged_pull_requests_count":58,"bot_issues_count":0,"bot_pull_requests_count":0,"past_year_issues_count":0,"past_year_pull_requests_count":1,"past_year_avg_time_to_close_issue":null,"past_year_avg_time_to_close_pull_request":505634.0,"past_year_issues_closed_count":0,"past_year_pull_requests_closed_count":1,"past_year_pull_request_authors_count":1,"past_year_issue_authors_count":0,"past_year_avg_comments_per_issue":null,"past_year_avg_comments_per_pull_request":0.0,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":0,"past_year_merged_pull_requests_count":1,"created_at":"2023-09-12T08:52:03.603Z","updated_at":"2025-09-01T03:33:24.608Z","repository_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/EnvironmentOntology%2Fenvironmental-exposure-ontology","issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/EnvironmentOntology%2Fenvironmental-exposure-ontology/issues","issue_labels_count":{"bug":1,"question":1,"priority":1},"pull_request_labels_count":{},"issue_author_associations_count":{"NONE":10,"CONTRIBUTOR":9,"MEMBER":8,"COLLABORATOR":8},"pull_request_author_associations_count":{"COLLABORATOR":49,"CONTRIBUTOR":24,"NONE":2,"MEMBER":1},"issue_authors":{"laurenechan":7,"wdduncan":6,"diatomsRcool":5,"matentzn":4,"davidshumway":2,"cmungall":2,"dillerm":2,"LCCarmody":1,"cthoyt":1,"PaulNSchofield":1,"cmrn-rhi":1,"nicolevasilevsky":1,"balhoff":1,"rsgoncalves":1},"pull_request_authors":{"laurenechan":46,"matentzn":17,"diatomsRcool":6,"anitacaron":2,"nlharris":1,"yifengcao3":1,"rays22":1,"nicolevasilevsky":1,"wdduncan":1},"host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2025-12-04T00:00:36.861Z","repositories_count":12024124,"issues_count":35612689,"pull_requests_count":116316084,"authors_count":11047767,"icon_url":"https://github.com/github.png","host_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories","owners_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/owners","authors_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors"},"past_year_issue_labels_count":{},"past_year_pull_request_labels_count":{},"past_year_issue_author_associations_count":{},"past_year_pull_request_author_associations_count":{"CONTRIBUTOR":2},"past_year_issue_authors":{},"past_year_pull_request_authors":{"matentzn":2},"maintainers":[{"login":"laurenechan","count":53,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/laurenechan"},{"login":"wdduncan","count":7,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/wdduncan"},{"login":"cmungall","count":2,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/cmungall"},{"login":"anitacaron","count":2,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/anitacaron"},{"login":"nicolevasilevsky","count":2,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/nicolevasilevsky"}],"active_maintainers":[]},"events":{"total":{"WatchEvent":2,"DeleteEvent":1,"IssueCommentEvent":2,"PushEvent":2,"PullRequestEvent":2,"CreateEvent":1},"last_year":{"WatchEvent":2,"DeleteEvent":1,"PushEvent":2,"PullRequestEvent":2,"CreateEvent":1}},"keywords":["environment","exposure","health","monarchinitiative","obo","obofoundry","ontology","owl"],"dependencies":[{"ecosystem":"actions","filepath":".github/workflows/qc.yml","sha":null,"kind":"manifest","created_at":"2023-01-27T17:16:21.953Z","updated_at":"2023-01-27T17:16:21.953Z","repository_link":"https://github.com/EnvironmentOntology/environmental-exposure-ontology/blob/master/.github/workflows/qc.yml","dependencies":[{"id":7190894770,"package_name":"actions/checkout","ecosystem":"actions","requirements":"v2","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/docs.yml","sha":null,"kind":"manifest","created_at":"2025-06-10T10:47:27.772Z","updated_at":"2025-06-10T10:47:27.772Z","repository_link":"https://github.com/EnvironmentOntology/environmental-exposure-ontology/blob/master/.github/workflows/docs.yml","dependencies":[{"id":23547463128,"package_name":"actions/checkout","ecosystem":"actions","requirements":"v4","direct":true,"kind":"composite","optional":false},{"id":23547463129,"package_name":"mhausenblas/mkdocs-deploy-gh-pages","ecosystem":"actions","requirements":"master","direct":true,"kind":"composite","optional":false}]}],"score":6.733401891837358,"created_at":"2023-09-12T07:42:13.175Z","updated_at":"2026-04-07T14:30:30.312Z","avatar_url":"https://github.com/EnvironmentOntology.png","language":"Makefile","category":"Sustainable Development","sub_category":"Taxonomy and Ontology","monthly_downloads":0,"total_dependent_repos":0,"total_dependent_packages":0,"readme":"[![Build Status](https://travis-ci.org/EnvironmentOntology/environmental-exposure-ontology.svg?branch=master)](https://travis-ci.org/EnvironmentOntology/environmental-exposure-ontology)\n[![DOI](https://zenodo.org/badge/13996/EnvironmentOntology/environmental-exposure-ontology.svg)](https://zenodo.org/badge/latestdoi/13996/EnvironmentOntology/environmental-exposure-ontology)\n\n[![logo](https://github.com/jmcmurry/closed-illustrations/blob/master/logos/ecto-logos/ecto-logo_black-stacked.png)](https://github.com/jmcmurry/closed-illustrations/blob/master/logos/ecto-logos/ecto-logo_black-stacked.png)\n\n\n## Environmental conditions, treatments and exposures ontology (ECTO)\n\nThe purpose of this ontology is to create compositional classes that\nassemble existing OBO ontologies such as ExO, CHEBI and ENVO to make\nready-made precomposed classes for use in describing:\n\n * experimental treatments of plants and model organisms (e.g. modification of diet, lighting levels, temperature)\n * exposures of humans or any other organisms to stressors through a variety of routes, for purposes of public health, environmental monitoring etc\n * stimuli, natural and experimental\n * any kind of environmental condition or change in condition that can be experienced by an organism or population of organisms on earth\n\nThe scope is very general and can include for example plant treatment regimens, as well as human clinical exposures (although these may better be handled by a more specialized ontology)\n\nAn example of a class (in manchester syntax) is:\n\n```\nClass: ECTO:0000977\n Annotations: rdfs:label \"exposure to ultrafine respirable suspended particulate matter via inhalation\"\n Annotations: IAO:0000115 \"A exposure event involving the interaction of an exposure receptor to ultrafine respirable suspended particulate matter via inhalation.\"\n Annotations: oio:hasExactSynonym \"ultrafine respirable suspended particulate matter exposure, via inhalation\"\n EquivalentTo: ExO:0000002 and RO:0002233 some ENVO:01000416 and BFO_0000050 some ExO:0000057 ## 'exposure event' and 'has input' some ultrafine respirable suspended particulate matter and 'part of' some inhalation\n```\n\n## Quick Start\n\nThere is no public browser yet. Use one of the following files:\n\n * [subsets/ecto-basic.obo](subsets/ecto-basic.obo) - for OBO-Edit users\n * [ecto.owl](ecto.owl) - open in Protege5\n\nNote: to open the OWL in Protege you will need to check out the repo so\nthat the catalog can be used.\n\n### Relationships to other ontologies\n\nOntologies used in composition (largely orthogonal):\n\n * [Exposure Ontology (ExO)](https://bioportal.bioontology.org/ontologies/EXO) - used as the upper ontology, for based classes such as 'exposure', different routes such as 'ingestion'\n * [Chemical Entities of Biological Interest (CHEBI)](http://www.ebi.ac.uk/chebi/) - use for both entities and roles\n * [Environment Ontology (ENVO)](http://obofoundry.org/ontology/envo.html) - environmental materials, processes\n * [NanoParticle Ontology (NPO)](https://bioportal.bioontology.org/ontologies/NPO) - radiation\n * [Relations Ontology (RO)](http://obofoundry.org/ontology/ro.html) - relations\n * [Phenotypic Quality Ontology (PATO)](http://www.obofoundry.org/ontology/pato.html) - qualities\n * [UBERON Anatomy Ontology](http://uberon.github.io/) - tissue types (not used yet)\n * [NCI Thesaurus (NCIT)](https://www.google.com/search?q=NCIT\u0026oq=NCIT\u0026aqs=chrome..69i57.438j0j4\u0026sourceid=chrome\u0026ie=UTF-8) - activities such as smoking\n * [Sustainable Development Goals Interface Ontology (SDGIO)](https://github.com/SDG-InterfaceOntology/sdgio) - social entities\n * [Population and Community Ontology (PCO)](http://www.obofoundry.org/ontology/pco.html) - population attributes (e.g. overcrowding)\n\nSimilar ontologies (overlapping/non-orthogonal)\n\n * [Zebrafish Experimental Conditions Ontology (ZECO)](http://www.obofoundry.org/ontology/zeco.html) - zebrafish-specific conditions\n * [S Pombe Experimental Conditions Ontology (SPECO)](http://www.obofoundry.org/ontology/peco.html) - pombase-specific conditions\n * [Plant Environment Conditions Ontology (PECO)](http://www.obofoundry.org/ontology/peco.html) - plant-specific environmental conditions and treatments\n * [Gene Ontology (GO)](http://www.geneontology.org/) - subset shadows many classes here eg. gene expression in `response to X`\n * [SNOMED](https://www.nlm.nih.gov/healthit/snomedct/) - has an exposure subset, but closed\n * [NCI Thesaurus (NCIT)](https://www.google.com/search?q=NCIT\u0026oq=NCIT\u0026aqs=chrome..69i57.438j0j4\u0026sourceid=chrome\u0026ie=UTF-8) - very broad, but contains some exposure terms.\n * [Experimental Conditions Ontology (XCO)](https://bioportal.bioontology.org/ontologies/XCO) - experimental conditions (mammal-centric? rat in particular)\n * [Wikidata](https://www.wikidata.org/wiki/Wikidata:Main_Page) - subclasses of hazard (wikidata:Q1132455)[https://www.wikidata.org/wiki/Q1132455]\n\nSee below for the merge experiment with these ontologies.\n\nWe aim to reuse existing open ontologies as far as possible; for orthogonal ontologies, this is via axiomatization.\n\nNote on ENVO: it may seem that ENVO is an overlapping/non-orthogonal ontology, but following our design patterns here this should be considered orthogonal; analogous to the relationship between an anatomical ontology and a variant/aberrant phenotype ontology.\n\nAnother new ontology to note is the UNEP Sustainable Development Goals ontology -- https://github.com/SDG-InterfaceOntology/sdgio/ -- this is being built in a modular fashion using ENVO and is seeding the creation of many useful social classes we will need, e.g. poverty, access to resources, etc.\n\n\n### Releases\n\nRelease files are in top level\n\n * [obo](ecto.obo)\n * [owl](ecto.owl)\n\nNote: these are only for testing so far, not stable! These should not be considered real releases.\n\nThe proposed ID space is very tentative\n\n### Modeling\n\nThe model we are using is aligned with the environmental conditions\nmodel in Phenopackets. We attempt to follow ExO where possible.\n\nWe treat exposures as events; in ontological terms, they are types of\n`occurrents`. Specifically, they are interactions between a `receptor`\n(typically an organism, but could be a population of organisms) and a\n`stressor` (an agent or process that has a potential effect on the\nreceptor). The stressor may interact with the organism through some\nkind of environmental medium (e.g. air, water, soil), and may enter\nvia some route (e.g. permeating the skin or analogous barrier).\n\nIn some cases the route may be indirect: passive smoking or drug use\nby a mother during pregnancy.\n\nThis model permits a variety of pre-composed classes. We defined and\ngenerate these using Dead Simple OWL Design Patterns (DOSDPs)\n\nSee [src/patterns](src/patterns) for the list of patterns in use.\n\nThe basic idea is that a term like 'increased exposure to arsenic\nthrough ingestion/diet' can be composed using classes from ontologies\nsuch as ExO and CHEBI. We can see this as filling in slots in our\ndatamodel.\n\n### Annotation Guide\n\nBroadly speaking, this ontology is designed to support both pre- and\npost-composed use cases.\n\nWith the pre-composed approach, the curator uses a \"ready-made\" ECTO\nclass expressing the combination of values required for different\nslots.\n\nWith the post-composed approach, ECTO can largely be disposed of, and\ninstead the description is assembled by the curator by filling in the\nrequired slots like 'stressor'.\n\nThe two approaches are compatible. Post-composed descriptions can be\nautomatically classified against the pre-composed ECTO. Similarly any\ndescription that uses ECTO can be unwound (or 'unfolded') to a\npre-composed description, using the OWL equivalence axioms in the\nontology.\n\n### Ontology Source\n\nMost of the ontology is stored as CSVs in [src/ontology/modules](src/ontology/modules)\n\nSee the Makefile for how the ontology is compiled from CSV modules.\n\nSee the .omn files for a human-readable set of descriptions\n\nSee the README-editors.md file in the src/ontology directory for\ninstructions on how to edit, maintain or release the ontology.\n\n### Merge Experiment\n\nSee [src/mappings](src/mappings) for an exploration of merging multiple exposure ontologies using kboom\n\nThe intent is not to make a usable ontology, but rather to help gap fill and understand what is out there.\n\n## Edit this ontology!\n\nWe welcome suggestions from the community for new terms or changes to existing terms! Please create an issue using our [issue tracker](https://github.com/EnvironmentOntology/environmental-exposure-ontology/issues).\n","funding_links":[],"readme_doi_urls":[],"works":{},"citation_counts":{},"total_citations":0,"keywords_from_contributors":["phenotypes","semantic-web","knowledge-graphs","rdf","ontologies","hpo","linkml","sustainable-development-goals","semantics","planetary-science"],"project_url":"https://ost.ecosyste.ms/api/v1/projects/30393","html_url":"https://ost.ecosyste.ms/projects/30393"}