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 supporting information to properties #426

Open
ljgarcia opened this issue May 13, 2020 · 9 comments
Open

Adding supporting information to properties #426

ljgarcia opened this issue May 13, 2020 · 9 comments
Assignees

Comments

@ljgarcia
Copy link
Contributor

ljgarcia commented May 13, 2020

Related to Find a way to include evidences for annotations or properties in general

We have at least two use cases where we need to add information to a property. (1) is detailed in Find a way to include evidences for annotations or properties in general, (2) came during the EIPF2F May 2020.

(1) Add evidences to GO annotations on Proteins, e.g., via a scholarly publication or another Protein or maybe a SequenceMatchingModel
(2) Provide additional information on the association between a Phenotype and Disease, e.g., via a Lab Protocol

For (1), we proposed using PropertyValue but that adds some complexity to the markup. We are looking now for alternatives. I will present the PropertyValue way and another possibility. We will need the community to discuss, agree and decide.

Pinging some people here to get some quick attention but the issue is open to the whole community @AlasdairGray @CaroleGoble @nsjuty @sarala @egonw @ivanmicetic @petrospaps @profgiuseppe @4ndr01d3 @aurel-l

@ljgarcia
Copy link
Contributor Author

ljgarcia commented May 13, 2020

Option 1: Using PropertyValue

{
  "@type": "Protein",
  "isInvolvedInBiologicalProcess": {
    "@type": "PropertyValue",
    "value": "http://purl.obolibrary.org/obo/GO_0005739",
    "measurementTechnique": {
      "@type": "ScholarlyPublication",
      "@id": "http://doi.org/1234.1234/1234.1234
    }
  }
}

Pros

  • PropertyValue is already part of schema.org
    Cons
  • We need the "value" property to be compatible with Bioschemas (ranges vary depending on the initial property, isInvolvedInBiologicalProcess in this case), easier wat to go is having Thing as range
  • We need measurementTechnique to be compatible with Bioschemas (range could be anything), easier way to go is having Thing as range
  • Problem here: we do not know how long it will take for a change like this to become part of schema.org

@ljgarcia
Copy link
Contributor Author

ljgarcia commented May 13, 2020

Option 2: Same idea as with PropertValue but creating a new Bioschemas property

{
  "@type": "Protein",
  "isInvolvedInBiologicalProcess": {
    "@type": "PropertySupport",
    "value": "http://purl.obolibrary.org/obo/GO_0005739",
    "supportInformation": {
      "@type": "ScholarlyPublication",
      "@id": "http://doi.org/1234.1234/1234.1234
    }
  }
}

Pros:

  • We do not modify an existing type in schema.org
    Cons:
  • It still add the same complexity as using PropertyValue
  • We have to modify all types and profiles, adding this new type as possible range for all properties that might have supporting information

@ljgarcia
Copy link
Contributor Author

Option 3: We create a new type PropertySupport with only one property supportInformation, and we use multiple typing whenever we need to add supporting information to a property

{
  "@type": "Protein",
  "isInvolvedInBiologicalProcess": {
    "@type": ["DefinedTerm", "PropertySupport"]
    "@id": "http://purl.obolibrary.org/obo/GO_0005739",
   ... anything else that can be used for a DefinedTerm
    "supportInformation": {
      "@type": "ScholarlyPublication",
      "@id": "http://doi.org/1234.1234/1234.1234
    }
  }
}

Pros:

  • We do not modify an existing type in schema.org
  • No extra complexity added by the option 1 and option 2
    Cons:
  • No idea what side effects multiple typing can have... but as we would use it only with Bioschemas types, the Bioschemas validators can take this into consideration

@GiuliaBabbi
Copy link

Great ideas! In my opinion, the third option (new type) seems the best because in this way we may use easily this type also in other contexts (GO terms is perfect, but also disease-gene relation, and in general protein and gene annotation..) it may be used also for "predicted" vs "experimental" associations... Great!

@AlasdairGray
Copy link
Member

This use case reminds me of the Schema.org discussion on associating a Role to an individual. Basically, they needed a way to provide more information to a property. To do this they introduced the Role type. This is discussed in their blog.

I think this aligns with Option 2 above.

If we were to follow through this approach, we would need to introduce a new type for SupportingEvidence. Then for capturing the association between a Gene and a Disease we would have something like the following

{
  "@type": "Gene",
  "name": "Gene name",
  "associatedDisease": {
    "@type": "SupportingEvidence",
    "associatedDisease": {
      "@type": "MedicalCondition",
      "name": "Disease name"
    }
  }
}

I'd be curious if @danbri had any thoughts on this.

@profgiuseppe
Copy link
Contributor

Hi, I'm no longer following very closely, but I'm still around. Just as a reference about how others are doing the same thing, in Wikidata there is a "determination method" property (https://www.wikidata.org/wiki/Property:P459) associated to GO terms. You can take a look at P53 protein https://www.wikidata.org/wiki/Q283350 to see how it is used. Probably @andrawaag would be the best person to ask for clarifications.

@ljgarcia
Copy link
Contributor Author

If there is already a model for it in schema.org, i.e., Role, we should go for it. The SupportingEvidence type would have one only property "evidence" with range Thing and it would always repeat the original property. Following the Role documentation, no need to explicitly mention SupportingEvidence as a range (hasOccupation property from Person used on the example provided on the Role page, does not include Role as range) and no need to include as property for SupportingEvidence all the possible properties it could be combined with.

The example provided by @AlasdairGray including the supporting evidence would be

{
  "@type": "Gene",
  "name": "Gene name",
  "associatedDisease": {
    "@type": "SupportingEvidence",
    "associatedDisease": {
      "@type": "MedicalCondition",
      "name": "Disease name"
    },
    "evidence":  {
      "@type": "ScholarlyPublication",
      "@id": "http://doi.org/1234.1234/1234.1234
    }
  }
}

@AlasdairGray how should we proceed?

@AlasdairGray
Copy link
Member

We should test this in some markup examples and then propose the new type and its usage in some profiles

@ljgarcia
Copy link
Contributor Author

I can provide markup examples for GO annotations and disease association in Proteins. Maybe @GiuliaBabbi can get some examples for Phenotypes. Should we ask @ricardoaat or @egonw to provide some examples for chemicals?

@AlasdairGray would quick examples showing how to use this new type be ok? By quick example I mean those really short ones used to show how a particular property can be used. On the spec tables they are shown on the right side on a property row.

And, where should we collate those examples? Would a new draft for Protein, for instance, with examples using this new type be the right way to go?

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