NeuroML / NeuroML2

This repository hosts the NeuroML 2 Schema, the ComponentType definitions in LEMS and the core documentation of NeuroML2.
https://docs.neuroml.org
GNU Lesser General Public License v3.0
50 stars 24 forks source link

feat(core-types): add annotation component types #225

Closed sanjayankur31 closed 2 months ago

sanjayankur31 commented 4 months ago

Fixes #224

sanjayankur31 commented 4 months ago

This is what an example annotation looks like:

            <rdf:RDF
              xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
              xmlns:bqbiol="http://biomodels.net/biology-qualifiers/"
              xmlns:dc="http://purl.org/dc/elements/1.1/"
              xmlns:dcterms="http://purl.org/dc/terms/"
              xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
              xmlns:scoro="http://purl.org/spar/scoro"
              xmlns:bqmodel="http://biomodels.net/model-qualifiers/"
              xmlns:collex="http://www.collex.org/schema"
              xmlns:prism="http://prismstandard.org/namespaces/basic/2.0/"
            >
              <rdf:Description rdf:about="http://omex-library.org/ArchiveName.omex/model.nml">
                <dc:title>None</dc:title>
                <dcterms:abstract>lol, something nice</dcterms:abstract>
                <dc:description>A tests model</dc:description>
                <prism:keyword>something</prism:keyword>
                <prism:keyword>and something</prism:keyword>
                <collex:thumbnail rdf:resource="http://omex-library.org/ArchiveName.omex/lol.png"/>
                <bqbiol:hasTaxon>
                  <rdf:Bag>
                    <rdf:li rdf:resource="http://identifiers.org/taxonomy/4896"/>
                  </rdf:Bag>
                </bqbiol:hasTaxon>
                <bqbiol:encodes>
                  <rdf:Bag>
                    <rdf:li rdf:resource="http://identifiers.org/GO:0009653"/>
                  </rdf:Bag>
                </bqbiol:encodes>
                <bqbiol:encodes>
                  <rdf:Bag>
                    <rdf:li rdf:resource="http://identifiers.org/kegg:ko04111"/>
                  </rdf:Bag>
                </bqbiol:encodes>
                <dc:source>
                  <rdf:Bag>
                    <rdf:li rdf:resource="https://github.com/lala"/>
                  </rdf:Bag>
                </dc:source>
                <bqmodel:isDerivedFrom>
                  <rdf:Bag>
                    <rdf:li rdf:resource="http://omex-library.org/BioSim0001.omex/model.xml"/>
                  </rdf:Bag>
                </bqmodel:isDerivedFrom>
                <rdfs:seeAlso>
                  <rdf:Bag>
                    <rdf:li rdf:resource="http://link.com"/>
                  </rdf:Bag>
                </rdfs:seeAlso>
                <dcterms:references>
                  <rdf:Bag>
                    <rdf:li rdf:resource="http://reference.com"/>
                  </rdf:Bag>
                </dcterms:references>
                <dc:creator>
                  <rdf:Bag>
                    <rdf:li>John Doe</rdf:li>
                    <rdf:li>https://someurl.com</rdf:li>
                    <rdf:li>https://anotherurl</rdf:li>
                  </rdf:Bag>
                </dc:creator>
                <dc:creator>
                  <rdf:Bag>
                    <rdf:li>Jane Smith</rdf:li>
                  </rdf:Bag>
                </dc:creator>
                <dc:contributor>
                  <rdf:Bag>
                    <rdf:li>Jane Smith</rdf:li>
                  </rdf:Bag>
                </dc:contributor>
                <dc:contributor>
                  <rdf:Bag>
                    <rdf:li>Jane Doe</rdf:li>
                  </rdf:Bag>
                </dc:contributor>
                <dc:contributor>
                  <rdf:Bag>
                    <rdf:li>John Smith</rdf:li>
                  </rdf:Bag>
                </dc:contributor>
                <dcterms:license>
                  <rdf:Bag>
                    <rdf:li rdf:resource="CC0"/>
                  </rdf:Bag>
                </dcterms:license>
                <scoro:funder>
                  <rdf:Bag>
                    <rdf:li rdf:resource="http://afundingbody.org"/>
                  </rdf:Bag>
                </scoro:funder>
                <dcterms:created>
                  <rdf:Description>
                    <dcterms:W3CDTF>2024-04-18</dcterms:W3CDTF>
                  </rdf:Description>
                </dcterms:created>
                <dcterms:modified>
                  <rdf:Description>
                    <dcterms:W3CDTF>2024-04-18</dcterms:W3CDTF>
                    <dcterms:W3CDTF>2024-04-19</dcterms:W3CDTF>
                  </rdf:Description>
                </dcterms:modified>
              </rdf:Description>
            </rdf:RDF>

Here's the pyneuroml code that will create it:

https://github.com/NeuroML/pyNeuroML/blob/development/pyneuroml/annotations.py#L90

Not entirely sure if these bits should also be in bags:

                <dc:title>None</dc:title>
                <dcterms:abstract>lol, something nice</dcterms:abstract>
                <dc:description>A tests model</dc:description>
                <prism:keyword>something</prism:keyword>
                <prism:keyword>and something</prism:keyword>
                <collex:thumbnail rdf:resource="http://omex-library.org/ArchiveName.omex/lol.png"/>
sanjayankur31 commented 4 months ago

Update: any entry that can have multiple values goes into a "bag" in the MIRIAM way of doing things. So that's what we'll follow. RDF seems to be quite flexible when it comes to how information is represented, so this is the convention we'll use for reading/writing NeuroML.

This is required for https://github.com/NeuroML/pyNeuroML/pull/354