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

Adding terminology for indicating expected and actual node resolution #55

Open
gaurav opened this issue Jan 17, 2024 · 3 comments
Open

Comments

@gaurav
Copy link
Member

gaurav commented Jan 17, 2024

In Klados PR phyloref/klados#313, we implement the following four Nexus properties:

  • phyloref:expected="[URI]": The phyloreference expected to resolve at this node (e.g. http://example.org/phyloref/Crocodylidae).
  • phyloref:expectedLabel="[label]": The label of the phyloreference expected to resolve at this node (e.g. Crocodylidae).
  • phyloref:actual="[URI]": The phyloreference that actually resolved at this node (e.g. http://example.org/phyloref/Crocodylidae).
  • phyloref:actualLabel="[label]": The label of the phyloreference that actually resolved at this node (e.g. Crocodylidae).

For example, a node could be annotated as:

(A, B)C[&phyloref:expected="#Crocodylidae",phyloref:expectedLabel="Crocodylidae",phyloref:actual="#Crocodylidae",phyloref:actualLabel="Crocodylidae"]

In the example file in this repository, we use obo:RO_0002558 "has evidence" to connect a phyloreference to its expected or resolved node. For example:

# Class: :CLADO_00000015 (Crocodylidae)
AnnotationAssertion(obo:IAO_0000115 :CLADO_00000015 "Definition dependent on phylogenetic context.
Last common ancestor of Crocodylus niloticus, Osteolaemus tetraspis, and Tomistoma schlegelii and all of its descendents.")
AnnotationAssertion(obo:IAO_0000119 :CLADO_00000015 "Crocodylidae (Cuvier 1807)")
AnnotationAssertion(rdfs:label :CLADO_00000015 "Crocodylidae"^^xsd:string)
EquivalentClasses(:CLADO_00000015 ObjectIntersectionOf(ObjectSomeValuesFrom(phyloref:includes_TU ObjectSomeValuesFrom(<http://rs.tdwg.org/ontology/voc/TaxonConcept#hasName> DataHasValue(dwc:scientificName "Crocodylus niloticus"))) ObjectSomeValuesFrom(obo:CDAO_0000149 ObjectIntersectionOf(ObjectSomeValuesFrom(phyloref:excludes_TU ObjectSomeValuesFrom(<http://rs.tdwg.org/ontology/voc/TaxonConcept#hasName> ObjectIntersectionOf(ObjectHasValue(<http://rs.tdwg.org/ontology/voc/TaxonName#nomenclaturalCode> <http://rs.tdwg.org/ontology/voc/TaxonName#ICZN>) DataHasValue(dwc:scientificName "Tomistoma schlegelii")))) ObjectSomeValuesFrom(phyloref:includes_TU ObjectSomeValuesFrom(<http://rs.tdwg.org/ontology/voc/TaxonConcept#hasName> DataHasValue(dwc:scientificName "Osteolaemus tetraspis")))))))
EquivalentClasses(:CLADO_00000015 ObjectIntersectionOf(ObjectSomeValuesFrom(phyloref:includes_TU ObjectSomeValuesFrom(<http://rs.tdwg.org/ontology/voc/TaxonConcept#hasName> DataHasValue(dwc:scientificName "Tomistoma schlegelii"))) ObjectSomeValuesFrom(obo:CDAO_0000149 ObjectIntersectionOf(ObjectSomeValuesFrom(phyloref:excludes_TU ObjectSomeValuesFrom(<http://rs.tdwg.org/ontology/voc/TaxonConcept#hasName> ObjectIntersectionOf(ObjectHasValue(<http://rs.tdwg.org/ontology/voc/TaxonName#nomenclaturalCode> <http://rs.tdwg.org/ontology/voc/TaxonName#ICZN>) DataHasValue(dwc:scientificName "Crocodylus niloticus")))) ObjectSomeValuesFrom(phyloref:includes_TU ObjectSomeValuesFrom(<http://rs.tdwg.org/ontology/voc/TaxonConcept#hasName> DataHasValue(dwc:scientificName "Osteolaemus tetraspis")))))))
EquivalentClasses(:CLADO_00000015 ObjectIntersectionOf(ObjectSomeValuesFrom(phyloref:includes_TU ObjectSomeValuesFrom(<http://rs.tdwg.org/ontology/voc/TaxonConcept#hasName> DataHasValue(dwc:scientificName "Tomistoma schlegelii"))) ObjectSomeValuesFrom(obo:CDAO_0000149 ObjectIntersectionOf(ObjectSomeValuesFrom(phyloref:excludes_TU ObjectSomeValuesFrom(<http://rs.tdwg.org/ontology/voc/TaxonConcept#hasName> ObjectIntersectionOf(ObjectHasValue(<http://rs.tdwg.org/ontology/voc/TaxonName#nomenclaturalCode> <http://rs.tdwg.org/ontology/voc/TaxonName#ICZN>) DataHasValue(dwc:scientificName "Osteolaemus tetraspis")))) ObjectSomeValuesFrom(phyloref:includes_TU ObjectSomeValuesFrom(<http://rs.tdwg.org/ontology/voc/TaxonConcept#hasName> DataHasValue(dwc:scientificName "Crocodylus niloticus")))))))
SubClassOf(:CLADO_00000015 phyloref:Phyloreference)
SubClassOf(:CLADO_00000015 ObjectHasValue(obo:RO_0002558 :CLADO_00000062))

So we could use the reverse relation (obo:RO_0002472 "is evidence for") to connect a node with their phyloreference. However, using a Nexus property of RO:0002472 or obo:RO_0002472 might be unclear in this context, and we would still need to distinguish between the expected resolution node and the actual resolution node.

I think our options are:

  1. Go with RO:0002472 for the actual resolved node, and denote the expected node in the label (e.g. expected_Crocodylidae)
  2. Come up with additional properties for these nodes (such as phyloref:expected etc. listed above). We would define them as annotation properties, with ranges of IRIs for phyloref:expected/phyloref:actual and strings for phyloref:expectedLabel/phyloref:actualLabel.
  3. We could use a URL as the property name (e.g. [&http://ontology.phyloref.org/expectedPhyloref="http://example.org/phyloref/Crocodylidae"]) and have that URL resolve to a website that explains what it means for humans, and tells people how to represent this in RDF.
@gaurav
Copy link
Member Author

gaurav commented Jan 17, 2024

  • We need the properties to be fully understandable without the prefix, since that might not be visible in RDF apps. So something like e.g. phyloref:expectedPhyloref.

@gaurav
Copy link
Member Author

gaurav commented Jan 17, 2024

  • We are ready to implement this as a PR for review.

@hlapp
Copy link
Member

hlapp commented Jan 26, 2024

I agree there's something to be said for having a non-opaque property for exporting NEXUS tree annotations. I'm not sure these need or should be annotation properties. More importantly, we can make them (or at least expectedPhyloref) a subproperty of the RO property.

For the "actual" pair of properties, this may deserve a little more thought. I don't think we really mean to say "this [node] is the actual evidence for this [phyloreference]", but more like "this phyloreference resolves to this node", or conversely, "this node is to where this phyloreference resolves". So if we can agree that "resolves to X" and "matches X" are sufficiently close semantically, we could use that?

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

2 participants