Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add 'domain' and 'range' properties for RO terms #790

Closed
pgaudet opened this issue Feb 15, 2024 · 7 comments
Closed

Add 'domain' and 'range' properties for RO terms #790

pgaudet opened this issue Feb 15, 2024 · 7 comments

Comments

@pgaudet
Copy link
Collaborator

pgaudet commented Feb 15, 2024

Hello,

GO needs to specify the domain and the range for which a relation can be used; for example for 'part_of', the domain is
BFO:0000001 (entity), and the local range is CL:0000000 GO:0005575 GO:0008150 PO:0009012 PO:0025131 UBERON:0001062 ZFS:0100000 WBls:0000075 WBbt:0004017 WBbt:0005766 NCBITaxon:1 FBbt:10000000 FBdv:00007012 FBbt:00007002

I cannot see how to add this is RO; is this something that can be captured?

@balhoff
@alexsign

Thanks, Pascale

@dosumis
Copy link
Contributor

dosumis commented Feb 15, 2024

OWL domain and range are straightforward to add and are in place for many relations. Do you have list of table of domain and range assertions you'd like to add?

I think local domain and range are GO-specific concepts, originating with validation of annotation extensions (and perhaps more recently validation of GOCAMs?). Perhaps these are better maintained locally?

@wdduncan
Copy link
Collaborator

wdduncan commented Feb 15, 2024

Yes. Adding domains and ranges is straightforward. The difficulty arises when new classes need to be added to RO in order most accurately specify the domain/range. Do we just use very high-level classes (e.g., cell, biological process) or do we add a more specific class when it is needed (e.g., blood vessel).
This has been an ongoing area of discussion.

@cmungall
Copy link
Contributor

For a very general relation, the domains and ranges have to be very general. And you don't get much more general than part-of.

However, domain and range is not the only way to constrain usage of an object property in OWL. You can use universal restrictions. These can't be expressed in EL, but fortunately they can often be rewritten to existentials + disjoints

You can see this with existing axioms on part-of:

image

Try making a part-of between e.g. a BP and a CC in GO, it will lead to incoherency, as intended. This is despite no domain or range restrictions on the OP.

It would be great if someone could add more documentation on this:

https://oborel.github.io/obo-relations/domain-or-range-specific-relation/

@balhoff
Copy link
Member

balhoff commented Feb 15, 2024

I think @pgaudet is asking about the 'local range' values we have in the gorel file. We could use schema:rangeIncludes for this. But I think we discussed using this in RO at some point and didn't come to a resolution. We could annotate this in an external file (which I guess is exactly what gorel is), but we could limit gorel to those kinds of statements and continue with deprecating all the relations defined only in that file.

@cmungall
Copy link
Contributor

I think local domain and range are GO-specific concepts, originating with validation of annotation extensions (and perhaps more recently validation of GOCAMs?). Perhaps these are better maintained locally?

This is correct (but not for GOCAMs). To explain to people who are not GO people: GO used to have its own layer of axioms on top of RO in an overlay ontology called GOREL that added annotation assertions called "local domain" and "local range". As annotation assertions, they are silent as far as OWL semantics and reasoners are concerned. However, non-OWL tools could make use of these to implement constraints using simple rule-based semantics.

GO dropped GOREL and thus these non-OWL tools lost the ability to do this additional level of checking

@cmungall
Copy link
Contributor

We could use schema:rangeIncludes for this

I don't think this works unless every ontology maintains their own rangeIncludes, in which case we may as well use the original solution. If we all use the same rangeIncludes then it just grows to encompass everything and becomes useless

@wdduncan
Copy link
Collaborator

wdduncan commented Dec 2, 2024

Much of the conversation pertains to GO, and necessarily RO. So, we can close.

@pgaudet pgaudet closed this as not planned Won't fix, can't repro, duplicate, stale Dec 4, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants