2.6 KiB
file_format | mystnb | ||
---|---|---|---|
mystnb |
|
Quickstart
Reading Data
To get the fun part out of the way, you can read ur data:
:tags: [hide-output]
from pathlib import Path
from rich.pretty import pprint, pretty_repr
from rich.console import Console
from nwb_linkml.io import HDF5IO
# set up for pprinting in notebooks
console = Console(width=100)
print = console.print
# find sample data file and read
nwb_file = Path('../../nwb_linkml/tests/data/aibs.nwb')
data = HDF5IO(nwb_file).read()
print(data)
Load and manipulate NWB schemas
A {mod}~nwb_linkml.providers.git
provider module can manage a repository to
provide a given NWB namespace at a given version, and cast the
schema into Pydantic models from {mod}nwb_schema_language
.
For the nwb-core schema, loading first just the namespaces file (without adjoining schema):
:tags: [hide-output]
from nwb_linkml.providers.git import NWB_CORE_REPO
from nwb_linkml.io.schema import load_namespaces
namespace_file: 'Path' = NWB_CORE_REPO.provide_from_git('2.6.0')
core_namespaces = load_namespaces(namespace_file)
print(core_namespaces)
Or for a schema file...
:tags: [hide-output]
from nwb_linkml.io.schema import load_schema_file
base_schema_file = namespace_file.parent / 'nwb.base.yaml'
nwb_core_base = load_schema_file(base_schema_file)
print(nwb_core_base)
And additional {mod}~nwb_linkml.adapters
are used to handle some of the
implicit behavior in nwb schema files, like importing other namespaces
at a specific version, and inter-schema class imports. Eg. the
{class}~nwb_linkml.adapters.NamespacesAdapter
finds the implicitly
imported hdmf-common
namespace (again provided by the git schema provider).
:tags: [hide-output]
from nwb_linkml.adapters import NamespacesAdapter
core_ns = NamespacesAdapter.from_yaml(namespace_file)
print(core_ns.imported)
The classes in {mod}nwb_schema_language
are just pydantic models, so they
can be used like any other to create new, validated schemas.
Translating to LinkML
{mod}~nwb_linkml.adapters
handle the conversion from NWB schema language to
LinkML.
:tags: [hide-output]
core_linkml = core_ns.build()
print(core_linkml)
The {class}~nwb_linkml.adapters.BuildResult
class holds the LinkML representation
of each of the schemas and their classes, which are now in {class}linkml_runtime.linkml_model.SchemaDefinition
and ClassDefinition
classes:
:tags: [hide-output]
print(core_linkml.schemas[0])