You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
While the ExternallyDefined feature makes it very lightweight to define elements of a design that are taken from other databases (e.g., small molecules, proteins, vendor reagents, kits), I don't think that we've made a clear recommendation for a best practice with respect to how to refer to such in other portions of a DBTL workflow.
Consider an Implementation that is being used to represent an aliquot of glucose. In the example on page 47 of the COMBINE tutorial, the glucose Implementation is defined by reference to a Component for glucose. Somewhere in there, however, we definitely want to have a link to a canonical database like ChEBI or PubChem.
I see three potential ways to do this:
Keep the glucose Component and give it two types, one of which is the general SBO "Small Molecule" and the other being https://pubchem.ncbi.nlm.nih.gov/compound/5793
Advantages: clearly legal and coherent within the SBOL framework.
Disadvantages: once again we have to make a proliferating collection of empty "wrapper" objects for external compounds, just like we were trying to avoid by using ExternallyDefined. Wrappers make equality testing difficult, because there are likely to be many wrappers in different collections. May be difficult to keep coherent with usages in ExternallyDefined. Needs to have the "dual type" best practice added to the specification.
Point the wasDerivedFrom or built link of Implementation directly at https://pubchem.ncbi.nlm.nih.gov/compound/5793.
Advantages: similar to current use of wasDerivedFrom to indicate component sources, no need for a change in the data model. The specification can recommend that one SHOULD NOT re-represent external objects with a wrapper class.
Disadvantages: searching for usages of glucose needs to operate at the property level rather than the object level. Not clear if this is legal within the SBOL framework - of it the current use of wasDerivedFrom is either, since the SBOL specification restricts a wasDerivedFrom to pointing at SBOL objects. Can't tell if you should expect an SBOL object or a non-SBOL object at the other end of the link.
Add a new property (e.g., external) to the Implementation that is either an alternative to built or is an indicator of how to interpret it.
Advantages: Same as option 2, but with a clean distinction for how to interpret property values.
Disadvantages: Added complexity for Implementation objects. Searching for usages of glucose needs to operate at the property level rather than the object level.
Of these three options, I think I most prefer adding an optional external property to the Implementation object. What do others think?
The text was updated successfully, but these errors were encountered:
A fourth option, following SEP 054, is to treat glucose as an import from a dissociated import package. This allows it to be imported to SBOL as a fixed "translation" rather than a unique "wrapper", meaning that we no longer have a problem of proliferating copies.
Do you really need to point to an implementation of Glucose as a Component? You could use ExternallyDefined glucose as a feature for a Glucose 80 percent solution Component and point that from the Implementation.
Another way to aproach this is by having ExternallyDefinedComponents. At the moment ExternallyDefined is a feature, makes sense modify ExternallyDefined to also be a Component or to create a new class for ExternallyDefinedComponent?
@Gonza10V In our current validation rules, sbol3-12301 says "Each prov:wasDerivedFrom property of an Implementation MUST refer to a Component", so we cannot point it at a Feature (including ExternallyDefined)---and there is no guarantee that such a Feature will even exist. Your other proposal is similar to option 1, which I am find less desirable than the other alternatives.
While the ExternallyDefined feature makes it very lightweight to define elements of a design that are taken from other databases (e.g., small molecules, proteins, vendor reagents, kits), I don't think that we've made a clear recommendation for a best practice with respect to how to refer to such in other portions of a DBTL workflow.
Consider an
Implementation
that is being used to represent an aliquot of glucose. In the example on page 47 of the COMBINE tutorial, the glucoseImplementation
is defined by reference to aComponent
for glucose. Somewhere in there, however, we definitely want to have a link to a canonical database like ChEBI or PubChem.I see three potential ways to do this:
Component
and give it two types, one of which is the general SBO "Small Molecule" and the other beinghttps://pubchem.ncbi.nlm.nih.gov/compound/5793
ExternallyDefined
. Wrappers make equality testing difficult, because there are likely to be many wrappers in different collections. May be difficult to keep coherent with usages inExternallyDefined
. Needs to have the "dual type" best practice added to the specification.wasDerivedFrom
orbuilt
link ofImplementation
directly athttps://pubchem.ncbi.nlm.nih.gov/compound/5793
.wasDerivedFrom
to indicate component sources, no need for a change in the data model. The specification can recommend that one SHOULD NOT re-represent external objects with a wrapper class.wasDerivedFrom
is either, since the SBOL specification restricts awasDerivedFrom
to pointing at SBOL objects. Can't tell if you should expect an SBOL object or a non-SBOL object at the other end of the link.external
) to theImplementation
that is either an alternative tobuilt
or is an indicator of how to interpret it.Implementation
objects. Searching for usages of glucose needs to operate at the property level rather than the object level.Of these three options, I think I most prefer adding an optional
external
property to theImplementation
object. What do others think?The text was updated successfully, but these errors were encountered: