INCATools / INCATools/dead_simple_owl_design_patterns

proposed design pattern design patterns / naming conventions

Open
#67 3 comments 0 reactions 0 assignees View on GitHub
Dominant language
Python
Stars
49
Forks
5
PR merge metrics
No merged PRs in 30d

Description

# rationale

names will be exposed in documentation for editors, curators, and general end-users who wish to understand the general patterns of the ontology, so it is important to use consistent, clear, non-ontologist language

these will also be exposed as headers in TSVs

many of the conventions that apply to programming languages and data models and schemas apply here

it is also useful to think of patterns as metaclasses, whose instances are owl classes. The pattern instances may also correspond to what scientists think of as 'entities'.

# principles

## always use meaningful names

- don't use var names like `v`. Spell it out.
- use terms a domain scientist would understand
- use spaces, not underscores
- never use camel case

exception: filename / IRI should use underscores not spaces. however, for human-readable labels change the underscores to spaces

## vars should be named by relationship or role of range, not range itself

e.g. if an disease pattern has a variable to specify the location and the range is anatomical structure, call it `location` not `anatomical structure`

rationale: later on you may want a sub-pattern where you have a separate var with the same range

## genus vars should be named non-generically

E.g disease by location, with 2 vars, one for the genus, the other for the location. Do not call the genus var 'disease'. call it something like

- parent disease
- disease group
- disease class
- ...

also consider something like "morphological type" if that describes the genus relation

rationale: just 'disease' is too broad. See previous principle. later we may add a sub-pattern that references another disease

## name the pattern by the identity criteria

the set of vars that are used in the equivalence axiom constitute the compound key. these are the identity crietria

e.g a pattern for subtyping leiomyosarcomas by location. do not call this 'leiomyosarcoma'. call it 'leiomyosarcoma by location'

rationale: we may later add leiomyosarcomas subtyped by gene. we can't have two called 'leiomyosarcoma'

in general a good pattern is to name the pattern by the sequence of elements in the equivalence axiom, where the elements are the named classes (the things in single quotes) and var names.

Some recommended changes for mondo patterns

- adult => adult form of disease

## use consistent vocabulary

e.g "adult form of disease" is OK as a name. "adult variant of disease" is not good if we use variant to mean a non-subclass variant

## long names are not necessarily bad

we don't pay for characters, don't worry too much about length, within reason

## use the term specific as appropriate (TBD)

consider a pattern name 'cancer by location'. This is ambiguous. Do we mean:

- pattern with 2 vars: (1) cancer morphological type [genus] (2) location
- patterm with 1 var: location [the genus is fixed at 'disease'

consider prefixing with "specific"; e.g. the first would be called "specific cancer by location"; alternatively "cancer subtype by location"

Perhaps we should even call the 2nd "cancer (general) by location" (TBD.. this is awkwrd)

## avoid X in name

always use a meaningful name

## use the same filename as pattern name

## description should describe the pattern instances not the class instances

E.g.

mondo leiomyosarcoma

https://mondo.readthedocs.io/en/latest/editors-guide/patterns/leiomyosarcoma/

_An uncommon, aggressive malignant smooth muscle neoplasm, usually occurring in post-menopausal women that is characterized by a proliferation of neoplastic spindle cells that is located in a specific anatomical location._

This is not a good *pattern* description, it describes to leiomyosarcomas, not leiomyosarcoma classes

Instead:

_This pattern is for classes representing leiomyosarcomas differentiated by where they are found in the body. leiomyosarcomas are uncommon, aggressive malignant smooth muscle neoplasms_

## include motivation

E.g. leiomyosarcomas can occur in different sites in the body so we include this pattern to...

## include examples

As well as auto-examples, include manually selected examples that highlight key aspects

TODO: we should have a specific field for listing this. These should then be used as unit tests

## include minimal metadata

- status
- contributors
- authors
- links to tickets
- date of creation

## document rules

some patterns may be associated with rules: sparql, regexes, python, ... document these

## be specific with range constraints

avoid owl:Thing

consider unions rather than going up the hierarchy if a specific class doesn't exist

challenges: for upper level terms we want to use cob but it is not yet ready

be careful with specifying things too specific and accidentally forcing some classes not to be matched. This is why examples / unt tests (see above) are vital

## patterns should be disjoint

this is more of an aspiration at the moment

consider 2 patterns

- cancer subtype by location; 2 vars: cancer_subtype, location
- cancer (grouping) by location, 1 var: location

any class that conforms to the 2nd will also conform to the first. Ideally we could extend dosdp to be able to say: the range of this class is a *proper* subclass of cancer

Contributor guide

No contributing guide indexed for this repository

Research direction

Review the proposed naming, metadata, description, example, range, and disjointness principles, including the linked Mondo pattern documentation. First determine which recommendations are in scope and where pattern definitions or documentation currently live; done requires an agreed, actionable design rather than an isolated edit.

Written by the indexing model from the issue text.

Assessment

Domain
documentation
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
20/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.