Answers.Body: <p>Section 7.9 of the SBOL3 specification already provides recommended terms for experimental elements.  Among these, Section 7.9.2 specifically addresses strain and media, reading in pat:</p>
  <blockquote>
  <p>The roles of reagents may vary in context: for example, arabinose may serve as an inducer or as a media carbon source. As such, contextual role SHOULD be indicated by an NCI Thesaurus (NCIT) term in a role property of the Feature. Examples include:</p>
  <ul>
  <li>NCIT:C64356: PositiveControl</li>
  <li>NCIT:C48694: Cell</li>
  <li>NCIT:C85504: Media</li>
  <li>NCIT:C14419: Strain</li>
  <li>NCIT:C120268: Inducer</li>
  </ul>
  </blockquote>
  <p>NCIT is one of the ontologies that is built-in for tyto:</p>
  <pre><code>tyto.NCIT.Strain
  Out[4]: 'https://identifiers.org/ncit:C95501'
  tyto.NCIT.Media
  Out[5]: 'https://identifiers.org/ncit:C19442'
  </code></pre>
  
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2021-10-21T14:41:07.450Z
Answers.Text: One thing that makes noise to me is that these terms are exemplified as roles not as types. These terms make sense as types to me.  Should I use another type like `SBO_FUNCTIONAL_ENTITY` and keep the NCIT terms as roles?
Answers.UserDisplayName: Gonza10V
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2021-10-21T15:12:58.057Z
Answers.Text: Type is used to indicate the nature of the material. Most of these are complex entities that cannot be categorized as being a single class of molecule, and thus SBO_FUNCTIONAL_ENTITY is the appropriate type.
Answers.UserDisplayName: jakebeal
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2021-10-20T17:00:02.573Z
Answers.LastActivityDate: 2021-10-20T17:00:02.573Z
Answers.UserDisplayName: jakebeal
Body: <p>I am developing software to store experiments or studies using SBOL3. In the regular synthetic biology workflow we will find the experimental components Strain and Media. A safe way to implement them is using <code>tyto.SBO.functional_entity</code> as type for both.</p>
  <p>Other attempts to implement media (<a href="https://github.com/Bioprotocols/paml/blob/main/examples/growth_curve.py" rel="nofollow noreferrer">https://github.com/Bioprotocols/paml/blob/main/examples/growth_curve.py</a>)looks like this:</p>
  <pre><code>SC_media = sbol3.Component('SC_Media', 'TBD', name='Synthetic Complete Media')
  </code></pre>
  <p>Therefore there is a need for standardise these types on SBOL3 to provide more accurate representations. The Experimental Factor Ontology (EFO) have ontology terms for Strain <a href="http://www.ebi.ac.uk/efo/EFO_0005135" rel="nofollow noreferrer">http://www.ebi.ac.uk/efo/EFO_0005135</a> and Media <a href="http://www.ebi.ac.uk/efo/EFO_0000579" rel="nofollow noreferrer">http://www.ebi.ac.uk/efo/EFO_0000579</a> that can be used as type. Then draft SBOL components looks as follow:</p>
  <pre><code>strain = sbol3.Component(fj_strain.name(), http://www.ebi.ac.uk/efo/EFO_0005135)
  strain.name =fj_strain.name
  strain.description = fj_strain.description()
  
  
  media = sbol3.Component(fj_media.name(), http://www.ebi.ac.uk/efo/EFO_0000579)
  media.name =fj_media.name
  media.description = fj_media.description()
  
  </code></pre>
  <p>The problem with this is the lack of readability on the code given the obscure ontology URIs. This problem has been solved for other ontologies using tyto, but EFO is not supported out-of-the-box and the configuration of new ontologies is not working. On tyto repository there is an example:</p>
  <pre><code>from tyto import EBIOntologyLookupService, Ontology
  KISAO = Ontology(uri='http://www.biomodels.net/kisao/KISAO_FULL#', endpoints=[EBIOntologyLookupService])
  KISAO.Gillespie_direct_algorithm
  'http://www.biomodels.net/kisao/KISAO#KISAO_0000029'
  </code></pre>
  <p>But I copied and runed that code but it raise this error:
  [ERROR] tyto.py 70: Ontology <a href="http://www.biomodels.net/kisao/KISAO_FULL#" rel="nofollow noreferrer">http://www.biomodels.net/kisao/KISAO_FULL#</a> is not available at EBI Ontology Lookup Service</p>
  <p>What I would like to do is something like this:</p>
  <pre><code>from tyto import EBIOntologyLookupService, Ontology
  efo = Ontology(uri='http://www.ebi.ac.uk/efo', endpoints=[EBIOntologyLookupService])
  efo.media
  </code></pre>
  <p>But this raises the same error.
  How can I add EFO to tyto? What is the URI that should be provided? Should I raise an issue in tyto to ask for EFO out-of-the-box support?</p>
  <p>Do you agree with the ontology terms for Strain and Media? Any feedback?</p>
  
Tags: <sbol><ontology>
Title: Creating Experimental Components on SBOL
ThreadText: # Creating Experimental Components on SBOL
  
  (Asked by: username_0 on 2021-10-20)
  
  I am developing software to store experiments or studies using SBOL3. In the regular synthetic biology workflow we will find the experimental components Strain and Media. A safe way to implement them is using `tyto.SBO.functional_entity` as type for both.
  
  Other attempts to implement media (<https://github.com/Bioprotocols/paml/blob/main/examples/growth_curve.py>)looks like this:
  
  ```
  SC_media = sbol3.Component('SC_Media', 'TBD', name='Synthetic Complete Media')
  
  ```
  
  Therefore there is a need for standardise these types on SBOL3 to provide more accurate representations. The Experimental Factor Ontology (EFO) have ontology terms for Strain <http://www.ebi.ac.uk/efo/EFO_0005135> and Media <http://www.ebi.ac.uk/efo/EFO_0000579> that can be used as type. Then draft SBOL components looks as follow:
  
  ```
  strain = sbol3.Component(fj_strain.name(), http://www.ebi.ac.uk/efo/EFO_0005135)
  strain.name =fj_strain.name
  strain.description = fj_strain.description()
  
  media = sbol3.Component(fj_media.name(), http://www.ebi.ac.uk/efo/EFO_0000579)
  media.name =fj_media.name
  media.description = fj_media.description()
  
  ```
  
  The problem with this is the lack of readability on the code given the obscure ontology URIs. This problem has been solved for other ontologies using tyto, but EFO is not supported out-of-the-box and the configuration of new ontologies is not working. On tyto repository there is an example:
  
  ```
  from tyto import EBIOntologyLookupService, Ontology
  KISAO = Ontology(uri='http://www.biomodels.net/kisao/KISAO_FULL#', endpoints=[EBIOntologyLookupService])
  KISAO.Gillespie_direct_algorithm
  'http://www.biomodels.net/kisao/KISAO#KISAO_0000029'
  
  ```
  
  But I copied and runed that code but it raise this error:
  [ERROR] tyto.py 70: Ontology <http://www.biomodels.net/kisao/KISAO_FULL#> is not available at EBI Ontology Lookup Service
  
  What I would like to do is something like this:
  
  ```
  from tyto import EBIOntologyLookupService, Ontology
  efo = Ontology(uri='http://www.ebi.ac.uk/efo', endpoints=[EBIOntologyLookupService])
  efo.media
  
  ```
  
  But this raises the same error.
  How can I add EFO to tyto? What is the URI that should be provided? Should I raise an issue in tyto to ask for EFO out-of-the-box support?
  
  Do you agree with the ontology terms for Strain and Media? Any feedback?
  
  **Tags:** sbol, ontology
  
  
  ---
  
  ## 1 answers
  
  ### Answer by username_1 on 2021-10-20. Score: 0 | Accepted answer
  
  Section 7.9 of the SBOL3 specification already provides recommended terms for experimental elements. Among these, Section 7.9.2 specifically addresses strain and media, reading in pat:
  
  > The roles of reagents may vary in context: for example, arabinose may serve as an inducer or as a media carbon source. As such, contextual role SHOULD be indicated by an NCI Thesaurus (NCIT) term in a role property of the Feature. Examples include:
  >
  > * NCIT:C64356: PositiveControl
  > * NCIT:C48694: Cell
  > * NCIT:C85504: Media
  > * NCIT:C14419: Strain
  > * NCIT:C120268: Inducer
  
  NCIT is one of the ontologies that is built-in for tyto:
  
  ```
  tyto.NCIT.Strain
  Out[4]: 'https://identifiers.org/ncit:C95501'
  tyto.NCIT.Media
  Out[5]: 'https://identifiers.org/ncit:C19442'
  
  ```
  
  > **Comments:**
  > **username_0**: One thing that makes noise to me is that these terms are exemplified as roles not as types. These terms make sense as types to me.  Should I use another type like `SBO_FUNCTIONAL_ENTITY` and keep the NCIT terms as roles?  
  > **username_1**: Type is used to indicate the nature of the material. Most of these are complex entities that cannot be categorized as being a single class of molecule, and thus SBO_FUNCTIONAL_ENTITY is the appropriate type.  
  
  ---
  
  