From 2c7562a56b3d67c657f2bd8ee88e14faaf0a8020 Mon Sep 17 00:00:00 2001 From: mark doerr Date: Thu, 12 Jan 2023 18:30:05 +0100 Subject: [PATCH 01/11] new implementation of the labware ontology based on owlready2 / EMMOntopy --- .bumpversion.cfg | 14 + .editorconfig | 21 + .../__init__.py => .env.dev | 0 .flake8 | 7 + .gitattributes | 29 + .gitignore | 130 +- AUTHORS.md | 16 + DEVELOPMENT.md | 101 + HISTORY.md | 8 + LICENSE | 21 + Makefile | 89 + README.md | 145 +- TODOs.md | 3 + VERSION | 1 + docs/Makefile | 216 + docs/_static/LARA_logo.svg | 296 + docs/_static/custom.css-tpl | 28 + docs/authors.rst | 4 + docs/conf.py | 178 + docs/development.rst | 1 + docs/history.rst | 4 + docs/index.rst | 21 + docs/installation.rst | 28 + docs/readme.rst | 4 + docs/usage.rst | 7 + labop_labware/__init__.py | 5 + labop_labware/__main__.py | 75 + labop_labware/labware.py | 217 + notebooks/labop_labware_dev.ipynb | 736 ++ notebooks/strateos_containers.csv | 66 + owl/.gitattributes | 2 - owl/.gitignore | 2 - owl/BBN Containers.xlsx | 3 - owl/Makefile | 29 - owl/Strateos containers.xlsx | 3 - owl/all-catalogs.ttl | 24 - owl/bbn-plate-catalog.ttl | 158 - owl/catalog-v001.m4 | 15 - owl/catalog-v001.xml | 12 - owl/container-ontology.ttl | 1310 --- owl/om-subset.omn | 7224 ----------------- owl/om-subset.ttl | 272 - owl/owlery-catalog.xml | 9 - owl/owlery-conf/.gitignore | 1 - owl/owlery-conf/application.conf | 24 - owl/owlery-conf/logback.xml | 26 - owl/sbolowl3.rdf | 924 --- owl/strateos-catalog.ttl | 2033 ----- owl/strateos_containers_with_ids.csv | 35 - pyproject.toml | 61 + requirements.txt | 2 +- requirements_dev.txt | 8 + scripts/owl2sparql.py | 76 - scripts/rdfdiff.py | 50 - setup.cfg | 2 + setup.py | 69 +- src/catalog_translator/Strateos Catalog.py | 346 - src/catalog_translator/catalog_translator.py | 431 - src/container_api/__init__.py | 1 - src/container_api/__main__.py | 52 - src/container_api/client_api.py | 153 - src/server-swagger.json | 755 -- src/server-swagger.yaml | 619 -- tasks.py | 472 ++ test/test_server.py | 141 - tests/__init__.py | 1 + tests/test_oso_labware.py | 23 + 67 files changed, 2927 insertions(+), 14912 deletions(-) create mode 100644 .bumpversion.cfg create mode 100644 .editorconfig rename src/catalog_translator/__init__.py => .env.dev (100%) create mode 100644 .flake8 create mode 100644 .gitattributes create mode 100644 AUTHORS.md create mode 100644 DEVELOPMENT.md create mode 100644 HISTORY.md create mode 100644 LICENSE create mode 100644 Makefile create mode 100644 TODOs.md create mode 100644 VERSION create mode 100644 docs/Makefile create mode 100644 docs/_static/LARA_logo.svg create mode 100644 docs/_static/custom.css-tpl create mode 100644 docs/authors.rst create mode 100755 docs/conf.py create mode 100644 docs/development.rst create mode 100644 docs/history.rst create mode 100644 docs/index.rst create mode 100644 docs/installation.rst create mode 100644 docs/readme.rst create mode 100644 docs/usage.rst create mode 100644 labop_labware/__init__.py create mode 100644 labop_labware/__main__.py create mode 100644 labop_labware/labware.py create mode 100644 notebooks/labop_labware_dev.ipynb create mode 100644 notebooks/strateos_containers.csv delete mode 100644 owl/.gitattributes delete mode 100644 owl/.gitignore delete mode 100644 owl/BBN Containers.xlsx delete mode 100644 owl/Makefile delete mode 100644 owl/Strateos containers.xlsx delete mode 100644 owl/all-catalogs.ttl delete mode 100644 owl/bbn-plate-catalog.ttl delete mode 100644 owl/catalog-v001.m4 delete mode 100644 owl/catalog-v001.xml delete mode 100644 owl/container-ontology.ttl delete mode 100644 owl/om-subset.omn delete mode 100644 owl/om-subset.ttl delete mode 100644 owl/owlery-catalog.xml delete mode 100644 owl/owlery-conf/.gitignore delete mode 100644 owl/owlery-conf/application.conf delete mode 100644 owl/owlery-conf/logback.xml delete mode 100644 owl/sbolowl3.rdf delete mode 100644 owl/strateos-catalog.ttl delete mode 100644 owl/strateos_containers_with_ids.csv create mode 100644 pyproject.toml create mode 100644 requirements_dev.txt delete mode 100644 scripts/owl2sparql.py delete mode 100644 scripts/rdfdiff.py create mode 100644 setup.cfg delete mode 100644 src/catalog_translator/Strateos Catalog.py delete mode 100644 src/catalog_translator/catalog_translator.py delete mode 100644 src/container_api/__init__.py delete mode 100644 src/container_api/__main__.py delete mode 100644 src/container_api/client_api.py delete mode 100644 src/server-swagger.json delete mode 100644 src/server-swagger.yaml create mode 100644 tasks.py delete mode 100644 test/test_server.py create mode 100644 tests/__init__.py create mode 100644 tests/test_oso_labware.py diff --git a/.bumpversion.cfg b/.bumpversion.cfg new file mode 100644 index 0000000..e37d452 --- /dev/null +++ b/.bumpversion.cfg @@ -0,0 +1,14 @@ +[bumpversion] +current_version = 0.0.1 +commit = True +tag = True + +[bumpversion:file:VERSION] + +[bumpversion:file:pyproject.toml] +search = version = "{current_version}" +replace = version = "{new_version}" + +[bumpversion:file:labop_labware/__init__.py] +search = __version__ = "{current_version}" +replace = __version__ = "{new_version}" diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..d4a2c44 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,21 @@ +# http://editorconfig.org + +root = true + +[*] +indent_style = space +indent_size = 4 +trim_trailing_whitespace = true +insert_final_newline = true +charset = utf-8 +end_of_line = lf + +[*.bat] +indent_style = tab +end_of_line = crlf + +[LICENSE] +insert_final_newline = false + +[Makefile] +indent_style = tab diff --git a/src/catalog_translator/__init__.py b/.env.dev similarity index 100% rename from src/catalog_translator/__init__.py rename to .env.dev diff --git a/.flake8 b/.flake8 new file mode 100644 index 0000000..68a25f1 --- /dev/null +++ b/.flake8 @@ -0,0 +1,7 @@ +[flake8] +ignore = E203, W503 +select = B,B9,C,E,F,W +max-complexity = 10 +max-line-length = 120 +per-file-ignores = + test/*:S101 diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..5f090af --- /dev/null +++ b/.gitattributes @@ -0,0 +1,29 @@ +# this file is used by git large file support (git-lfs) to move +# large / binary files to a special location / database +*.jar filter=lfs diff=lfs merge=lfs -text +*.zip filter=lfs diff=lfs merge=lfs -text +*.ZIP filter=lfs diff=lfs merge=lfs -text +*.tar filter=lfs diff=lfs merge=lfs -text +*.tar.bz2 filter=lfs diff=lfs merge=lfs -text +*.tar filter=lfs diff=lfs merge=lfs -text +*.png filter=lfs diff=lfs merge=lfs -text +*.PNG filter=lfs diff=lfs merge=lfs -text +*.jpg filter=lfs diff=lfs merge=lfs -text +*.JPG filter=lfs diff=lfs merge=lfs -text +*.jpeg filter=lfs diff=lfs merge=lfs -text +*.JPEG filter=lfs diff=lfs merge=lfs -text +*.pdf filter=lfs diff=lfs merge=lfs -text +*.PDF filter=lfs diff=lfs merge=lfs -text +*.mp3 filter=lfs diff=lfs merge=lfs -text +*.MP3 filter=lfs diff=lfs merge=lfs -text +*.wav filter=lfs diff=lfs merge=lfs -text +*.WAV filter=lfs diff=lfs merge=lfs -text +*.mp4 filter=lfs diff=lfs merge=lfs -text +*.mov filter=lfs diff=lfs merge=lfs -text +*.ods filter=lfs diff=lfs merge=lfs -text +*.xls filter=lfs diff=lfs merge=lfs -text +*.xlsx filter=lfs diff=lfs merge=lfs -text +*.odt filter=lfs diff=lfs merge=lfs -text +*.doc filter=lfs diff=lfs merge=lfs -text +*.docx filter=lfs diff=lfs merge=lfs -text + diff --git a/.gitignore b/.gitignore index 5e487cd..1af71fa 100644 --- a/.gitignore +++ b/.gitignore @@ -1,8 +1,126 @@ +# this file is used by git to ignore certain files or directories +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +env/ +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +*.egg-info/ +.installed.cfg +*.egg + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# sqlite database +*.sqlite +*.sqlite3 + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +.hypothesis/ +.pytest_cache/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ +docs/source/ +_build + +# PyBuilder +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# pyenv +.python-version + +# celery beat schedule file +celerybeat-schedule + +# SageMath parsed files +*.sage.py + +# dotenv +.env + +# virtualenv +.venv +venv/ +ENV/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ + +# IntelliJ Idea family of suites +.idea/ +*.iml + +# IDE settings - Visual Stuido code +.vscode/ + +# PyCharm .idea + +# Mac stuff .DS_Store -__pycache__ -.ipynb_checkpoints -*.out -README.html -build -*.egg-info + +# Generated files +bin/ +.build_* diff --git a/AUTHORS.md b/AUTHORS.md new file mode 100644 index 0000000..df58034 --- /dev/null +++ b/AUTHORS.md @@ -0,0 +1,16 @@ + +# Acknowledgements and Credits + +The OSO labware project thanks + + +Contributors +------------ + +* Mickey Kim ! Thanks for the phantastic cookiecutter template ! + + +Development Lead +---------------- + +* mark doerr \ No newline at end of file diff --git a/DEVELOPMENT.md b/DEVELOPMENT.md new file mode 100644 index 0000000..4f7e327 --- /dev/null +++ b/DEVELOPMENT.md @@ -0,0 +1,101 @@ +.. highlight:: shell + +Development +=========== + +Get Started! +------------ + +Ready to contribute? Here's how to set up `labop_labware` for local development. + +#. Clone the `labop_labware` repo from GitLab:: + + $ git clone git@gitlab.com:https://gitlab.com/opensourcelab/scientificdata/ontologies/openscienceontology/labware.git + +#. Ensure `poetry is installed`_. +#. Install dependencies and start your virtualenv:: + + $ poetry install + $ poetry shell + +#. Create a branch for local development:: + + $ git checkout -b feature/IssueNumber_name-of-your-bugfix-or-feature + + # please do not use the '#' in branch names ! + +Now you can make your changes locally. + +#. When you're done making changes, check that your changes pass the + tests, including testing other Python versions, with tox:: + + $ tox + +#. Commit your changes and push your branch to GitLab:: + + $ git add . + $ git commit -m "Your detailed description of your changes." + $ git push origin feature/IssueNumber_name-of-your-bugfix-or-feature + +#. Submit a merge request through GitLab + +.. _poetry is installed: https://python-poetry.org/docs/ + +Merge Request Guidelines +------------------------- + +Before you submit a merge request, check that it meets these guidelines: + +1. The merge request should only include changes relating to one ticket. +2. The merge request should include tests to cover any added changes and + check that all existing and new tests pass. +3. If the merge request adds functionality, the docs should be updated. + Put your new functionality into a function with a docstring, and add + the feature to the list in README.rst. +4. The team should be informed of any impactful changes. + +Documentation +-------------- + +The Sphinx Documentation Sytem is used, + +markdown is supported via the mystparser ( https://cerodell.github.io/sphinx-quickstart-guide/build/html/markdown.html ) + +To build the documentation, run + + $ invoke docs + +Tips +---- + +#. To run a subset of tests:: + + $ pytest tests.test_labop_labware + +Deploying to PyPI +----------------- + +For every release: + +#. Update HISTORY.rst + +#. Update version number (can also be patch or major):: + + bump2version minor + +#. Run the static analysis and tests:: + + tox + +#. Commit the changes:: + + git add HISTORY.rst + git commit -m "Changelog for upcoming release <#.#.#>" + +#. Push the commit:: + + git push + +#. Add the release tag (version) on GitLab: https://gitlab.com/https://gitlab.com/opensourcelab/scientificdata/ontologies/openscienceontology/labware/-/tags + +The GitLab CI pipeline will then deploy to PyPI if tests pass. diff --git a/HISTORY.md b/HISTORY.md new file mode 100644 index 0000000..9f1ba41 --- /dev/null +++ b/HISTORY.md @@ -0,0 +1,8 @@ + +# History of labop_labware + + +* 0.0.1 (2022-12-11) + + +* First release .... diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..423874b --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2022, mark doerr + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..28a76d3 --- /dev/null +++ b/Makefile @@ -0,0 +1,89 @@ +CODE_PATHS := labop_labware + +GITLAB_USERNAME ?= +GITLAB_TOKEN ?= + +PYTHON_VERSION ?= 3.9## default python build to 3.9 + +# Originally CI_PROJECT_NAME came from the CI, but it is safer if this comes directly from pyproject.toml +CI_PROJECT_NAME := $(shell grep -i name pyproject.toml | head -1 | awk -F'"' '{print $$2}' | tr "[A-Z]" "[a-z]" | tr "_" "-") +CI_COMMIT_REF_NAME ?= $(shell git symbolic-ref --short -q HEAD) +CI_COMMIT_REF_NAME := $(subst /,-,$(CI_COMMIT_REF_NAME)) +CI_COMMIT_BEFORE_SHA := $(shell git rev-parse HEAD^1) +CI_COMMIT_SHA ?= $(shell git rev-parse HEAD) +CI_COMMIT_SHORT_SHA ?= $(shell git rev-parse --short HEAD) +CURRENT_LOCATION ?= $(shell pwd) +CI_ENVIRONMENT_NAME ?= +CI_DOCKER_BUILD_ARGS ?= + +PYPI_URL ?= https://artifactory.aws.gel.ac/artifactory/api/pypi/pypi/simple + +CI_REGISTRY ?= registry.gitlab.com +CI_REGISTRY_IMAGE ?= ${CI_REGISTRY}/https://gitlab.com/opensourcelab/scientificdata/ontologies/openscienceontology/labware +DOCKER_IMAGE_NAMESPACE := ${CI_REGISTRY_IMAGE}/${CI_PROJECT_NAME} +DOCKER_IMAGE_TAG ?= ${DOCKER_IMAGE_NAMESPACE}:py${PYTHON_VERSION}-${CI_COMMIT_REF_NAME} + +.PHONY: build test + +help: ## Prints this help/overview message + @awk 'BEGIN {FS = ":.*?## "} /^[a-z0-9_-]+:.*?## / {printf "\033[36m%-17s\033[0m %s\n", $$1, $$2}' $(MAKEFILE_LIST) + +_CMD_DOCKER_BUILD := \ + docker build \ + ${CI_DOCKER_BUILD_ARGS} \ + +## construct the docker image with the git branch inc. into the tag +.build_${PYTHON_VERSION}: Dockerfile labop_labware clean__py + ${_CMD_DOCKER_BUILD} \ + --platform linux/amd64 \ + --build-arg PYTHON_BASE=${PYTHON_VERSION} \ + --build-arg PYPI_URL=${PYPI_URL} \ + --cache-from ${DOCKER_IMAGE_TAG} \ + --tag ${DOCKER_IMAGE_TAG} \ + --target test \ + . + touch $@ + +build: .build_${PYTHON_VERSION} ## build local python3.9 image. Define PYTHON_VERSION to select other python version. + +push: build + docker push ${DOCKER_IMAGE_TAG} + +pull: + docker pull ${DOCKER_IMAGE_TAG} || echo "No pre-made image available" + +test: ## run pytest on mounted-in tests (change tests, no rebuild!) + mkdir -p $(shell pwd)/bin && \ + docker run \ + --platform linux/amd64 \ + --volume $(shell pwd)/bin/:/labop_labware/bin/ \ + --volume $(shell pwd):/labop_labware:rw \ + ${DOCKER_IMAGE_TAG} \ + pytest --cov-report xml:/labop_labware/bin/coverage.xml tests/ + +test_shell: ## enter test docker image Bash + mkdir -p $(shell pwd)/bin && \ + docker run -it \ + --platform linux/amd64 \ + --volume $(shell pwd)/bin/:/labop_labware/bin/ \ + --volume $(shell pwd):/labop_labware:rw \ + ${DOCKER_IMAGE_TAG} \ + /bin/bash + +# cleaning up -------------------------------------------------------- +clean: clean__docker clean__py clean__reports + +clean__py: ## clean python temp files + find . -iname *.pyc -delete + find . -iname __pycache__ -delete + find . -iname .cache -delete + +clean__docker: ## Clean up all docker images generated by this repo + rm -rf .*sentinel + for image in \ + $$(docker images --format "{\{.Repository}\}:{\{.Tag}\}\t{\{.ID}\}" | grep -e "${DOCKER_IMAGE_NAMESPACE}" | awk '{print $$2}'); do \ + docker rmi -f $$image; \ + done + +clean__reports: + rm -rf ${PATH_REPORTS} diff --git a/README.md b/README.md index f486bcc..85ba1d5 100644 --- a/README.md +++ b/README.md @@ -1,15 +1,15 @@ -Container ontology slug +Labware ontology slug -# Container ontology -Container ontology for use with [PAML (Protocol Activity Markup Language)](https://github.com/Bioprotocols/PAML-specification) and the [PAML library](https://github.com/Bioprotocols/paml). +# Labware ontology +Labware ontology for use with [Laboratory Open Protocol language (LabOP)](https://github.com/Bioprotocols/labop). -The intent is to supply an ontology of OWL classes and individuals that can be used to specify required containers for use in biology protocols specified in PAML. +The intent is to supply an ontology of OWL classes and individuals that can be used to specify required labwares for use in biology protocols specified in PAML. -There are OWL classes for concepts such as `Standard96Wellplate`. These should be used to specify requirements (e.g., `Standard96WellPlate and ClearPlate`) in a protocol that may be met by multiple different sorts of plate. OWL individuals are used for specific *types* of plate such as a Corning 3632 (`Corning3632`). The decision was made to represent these basic types as Individuals so that it would be readily detectable when the process of choosing a matching container was complete (one or more individuals have been found that match the requirements). +There are OWL classes for concepts such as `Standard96Wellplate`. These should be used to specify requirements (e.g., `Standard96WellPlate and ClearPlate`) in a protocol that may be met by multiple different sorts of plate. OWL individuals are used for specific *types* of plate such as a Corning 3632 (`Corning3632`). The decision was made to represent these basic types as Individuals so that it would be readily detectable when the process of choosing a matching labware was complete (one or more individuals have been found that match the requirements). # Status -The container ontology is very much in flux at the moment. We provide a proof of concept of its utility by capturing the contents of [Strateos](https://strateos.com)'s online catalog of containers (Strateos is a prominent cloud lab). We also provide a server, based on a Docker container, that you can use to query the ontology, and a Python library for automating such queries. +The labware ontology is very much in flux at the moment. We provide a proof of concept of its utility by capturing the contents of [Strateos](https://strateos.com)'s online catalog of labwares (Strateos is a prominent cloud lab). We also provide a server, based on a Docker labware, that you can use to query the ontology, and a Python library for automating such queries. **If you have questions** please post them in the "Discussions" tab, and we will try to answer them, and will move them to issues if they identify bugs or feature requests. @@ -19,135 +19,4 @@ We first describe the server, which is build on Owlery, and then we discuss how Note that the final ontology IRI has still not been chosen: we are identifying how best to provide a stable IRI from which the ontology can be retrieved reliably. If you are referring to this ontology, we strongly urge you to use a prefix definition (we use `cont`) for the ontology, so that any documents you create can be easily updated. -# The Container Server - -## Start Queryable Server - -To retrieve entities (for now, this really only works for Plates), you may do the following: - - cd owl - make server - -This will start an [Owlery](https://github.com/phenoscape/owlery) server on localhost, listening on port 8080. (If you would prefer a different port, you can do, for example, `make HOST_PORT=80 server`. - -### Interactive UI - -A rudimentary UI is provided,based on the Swagger/OpenAPI spec on the resulting server. To try it, aim your browser at `http://localhost:8080/docs/index.html` (assuming your server is running on port 8080 on the local host). - -### Making Queries - -From here, you should be able to execute queries such as the following: - - curl -G --location --request GET 'http://localhost:8080/kbs/sd2e-container-catalogs/instances' --data "kb=sd2e-container-catalogs" --data-urlencode "object=cont:Plate" --data 'direct=false' --data-urlencode 'prefixes={ "owl" : "http://www.w3.org/2002/07/owl#", "cont": "https://sift.net/container-ontology/container-ontology#"}' - -Some explanation: - -* The base of the target URL, `http://localhost:8080/kbs/`, indicates the server. - -* The next URL component indicates the Owlery knowledge base that is available. At the moment, only the `strateos-catalog` knowledge base is supplied on this server. - -* The next part of the url indicates that the query is for `instances`. Other queries include `types` and `subclasses`. See https://kb.phenoscape.org/owlery/docs/ for more details about the API. - -* Finally, there are arguments encoded as HTTP GET parameters: - - * `kb=strateos-catalog` I am not sure why Owlery requires this in addition to the path component; just do it. - * `object=cont:Plate` The object argument indicates the class whose instances you want. Note that the argument here must be *URL-encoded*. - * `prefixes=...` This is a set of prefix definitions, encoded as JSON: an object whose keys (`"cont"` and `"owl"`) are prefixes (*without* the trailing colon), and whose values are IRI prefixes (*with* the trailing hash-mark). Again, this must be URL-encoded. - * `direct=false` We want *all* instances of `cont:Plate`, not just direct instances. - -The results will come back as a JSON Object whose keys are: - -* `@id`: The IRI for the class whose instances are being returned. -* `hasInstance`: A JSON array of Individual IRIs. -* `context`: No idea what this means. - -For example: - - { - "@id": "https://raw.githubusercontent.com/rpgoldman/container-ontology/owlery-server/owl/container-ontology.ttl#Plate", - - "hasInstance": [ - "https://raw.githubusercontent.com/rpgoldman/container-ontology/owlery-server/owl/strateos-catalog.ttl#Mesoscale96-10-spot-uplex-MSD", - "https://raw.githubusercontent.com/rpgoldman/container-ontology/owlery-server/owl/strateos-catalog.ttl#Corning384-flat-white-clear", - "https://raw.githubusercontent.com/rpgoldman/container-ontology/owlery-server/owl/strateos-catalog.ttl#Eppendorf6-flat-tc", - "https://raw.githubusercontent.com/rpgoldman/container-ontology/owlery-server/owl/strateos-catalog.ttl#Mesoscale96-10-spot-vplex-m-pro-inflamm1-MSD", - "https://raw.githubusercontent.com/rpgoldman/container-ontology/owlery-server/owl/strateos-catalog.ttl#Corning384-flat-white-white-tc", - "https://raw.githubusercontent.com/rpgoldman/container-ontology/owlery-server/owl/strateos-catalog.ttl#Eppendorf6-flat", - "https://raw.githubusercontent.com/rpgoldman/container-ontology/owlery-server/owl/strateos-catalog.ttl#Eppendorf96-pcr", - "https://raw.githubusercontent.com/rpgoldman/container-ontology/owlery-server/owl/strateos-catalog.ttl#Sumitomo%20Bakelite%20Co.384-ubottom-white-tc", - "https://raw.githubusercontent.com/rpgoldman/container-ontology/owlery-server/owl/strateos-catalog.ttl#Corning96-deep", - "https://raw.githubusercontent.com/rpgoldman/container-ontology/owlery-server/owl/strateos-catalog.ttl#Corning384-round-clear-clear", - "https://raw.githubusercontent.com/rpgoldman/container-ontology/owlery-server/owl/strateos-catalog.ttl#Corning384-flat-white-white-nbs", - "https://raw.githubusercontent.com/rpgoldman/container-ontology/owlery-server/owl/strateos-catalog.ttl#Corning96-flat-uv", - "https://raw.githubusercontent.com/rpgoldman/container-ontology/owlery-server/owl/strateos-catalog.ttl#Mesoscale96-4-spot-mMIP3a-MSD", - "https://raw.githubusercontent.com/rpgoldman/container-ontology/owlery-server/owl/strateos-catalog.ttl#Eppendorf384-pcr", - "https://raw.githubusercontent.com/rpgoldman/container-ontology/owlery-server/owl/strateos-catalog.ttl#Fisher96-vbottom-microwell", - "https://raw.githubusercontent.com/rpgoldman/container-ontology/owlery-server/owl/strateos-catalog.ttl#PerkinElmer384-flat-white-white-optiplate", - "https://raw.githubusercontent.com/rpgoldman/container-ontology/owlery-server/owl/strateos-catalog.ttl#Eppendorf96-flat-clear-clear-tc", - "https://raw.githubusercontent.com/rpgoldman/container-ontology/owlery-server/owl/container-ontology.ttl#EnduraPlate_96Well_Red", - "https://raw.githubusercontent.com/rpgoldman/container-ontology/owlery-server/owl/strateos-catalog.ttl#ThermoFisher96-flat-white-dc", - "https://raw.githubusercontent.com/rpgoldman/container-ontology/owlery-server/owl/strateos-catalog.ttl#Fisher96-v-kf", - "https://raw.githubusercontent.com/rpgoldman/container-ontology/owlery-server/owl/strateos-catalog.ttl#PerkinElmer384-flat-black-black-proxiplate-plus-f", - "https://raw.githubusercontent.com/rpgoldman/container-ontology/owlery-server/owl/strateos-catalog.ttl#Costar96-flat-clear-costar-3590", - "https://raw.githubusercontent.com/rpgoldman/container-ontology/owlery-server/owl/strateos-catalog.ttl#ThermoFisher384-ubottom-clear-polypropylene-nunc-264573", - "https://raw.githubusercontent.com/rpgoldman/container-ontology/owlery-server/owl/strateos-catalog.ttl#Axygenres-mw8-hp", - "https://raw.githubusercontent.com/rpgoldman/container-ontology/owlery-server/owl/strateos-catalog.ttl#Corning384-flat", - "https://raw.githubusercontent.com/rpgoldman/container-ontology/owlery-server/owl/container-ontology.ttl#EnduraPlate_96Well_Yellow", - "https://raw.githubusercontent.com/rpgoldman/container-ontology/owlery-server/owl/strateos-catalog.ttl#Chemspeedchemspeed-96-sealed-pin-rack", - "https://raw.githubusercontent.com/rpgoldman/container-ontology/owlery-server/owl/strateos-catalog.ttl#Corning1536-tc-white-corning-3727", - "https://raw.githubusercontent.com/rpgoldman/container-ontology/owlery-server/owl/strateos-catalog.ttl#Greiner96-flat-black-black-fluotrac-600", - "https://raw.githubusercontent.com/rpgoldman/container-ontology/owlery-server/owl/strateos-catalog.ttl#Axygenres-mw12-hp", - "https://raw.githubusercontent.com/rpgoldman/container-ontology/owlery-server/owl/strateos-catalog.ttl#PerkinElmer384-flat-white-white-proxiplate-plus", - "https://raw.githubusercontent.com/rpgoldman/container-ontology/owlery-server/owl/strateos-catalog.ttl#Corning384-flat-white-white-lv", - "https://raw.githubusercontent.com/rpgoldman/container-ontology/owlery-server/owl/strateos-catalog.ttl#Corning96-flat", - "https://raw.githubusercontent.com/rpgoldman/container-ontology/owlery-server/owl/strateos-catalog.ttl#Corning96-ubottom-clear-tc", - "https://raw.githubusercontent.com/rpgoldman/container-ontology/owlery-server/owl/strateos-catalog.ttl#E%26K%20Scientific24-deep", - "https://raw.githubusercontent.com/rpgoldman/container-ontology/owlery-server/owl/strateos-catalog.ttl#Corning384-round-black-black-lv-nbs", - "https://raw.githubusercontent.com/rpgoldman/container-ontology/owlery-server/owl/container-ontology.ttl#EnduraPlate_96Well_Blue", - "https://raw.githubusercontent.com/rpgoldman/container-ontology/owlery-server/owl/strateos-catalog.ttl#Corning384-flat-clear-clear", - "https://raw.githubusercontent.com/rpgoldman/container-ontology/owlery-server/owl/strateos-catalog.ttl#Fisher96-deep-kf", - "https://raw.githubusercontent.com/rpgoldman/container-ontology/owlery-server/owl/container-ontology.ttl#EnduraPlate_96Well_Clear", - "https://raw.githubusercontent.com/rpgoldman/container-ontology/owlery-server/owl/strateos-catalog.ttl#Greiner384-v-clear-clear", - "https://raw.githubusercontent.com/rpgoldman/container-ontology/owlery-server/owl/strateos-catalog.ttl#Labcyte384-echo", - "https://raw.githubusercontent.com/rpgoldman/container-ontology/owlery-server/owl/strateos-catalog.ttl#Greiner1536-white-tc", - "https://raw.githubusercontent.com/rpgoldman/container-ontology/owlery-server/owl/strateos-catalog.ttl#Corning96-well-v-bottom", - "https://raw.githubusercontent.com/rpgoldman/container-ontology/owlery-server/owl/container-ontology.ttl#EnduraPlate_96Well_Multicolor", - "https://raw.githubusercontent.com/rpgoldman/container-ontology/owlery-server/owl/strateos-catalog.ttl#Labcyte384-echo-ldv" - ], - - "@context": "https://owlery.phenoscape.org/json/context.jsonld" - } - -For a slightly more complex query, one could try: - -`--data-urlencode "object=cont:Plate and cont:availableAt value cont:Strateos"` - -or - -`--data-urlencode "object=cont:Standard96wellplate"` - -# The Python API for the Container Server - -To install this library into python (we recommend using a dedicated virtual environment), -assuming that your current working directory is the directory of the container-ontology git -repo, you may simply do: - -``` -pip install -e . -``` - -This will give you access to the `container_api` Python library. In order for this -to run successfully, *the container server must be up and running*. At the moment, it -is up to the user to start the server manually. - -For an example of how to use the server, see the code in [`__main__.py`](src/container_api/__main__.py) - -To try it out, you can just do: - -``` -python -m container_api -``` - -in a virtual environment with this system `pip`-installed, as above. - -## More Documentation to Follow... +# The Labware Server diff --git a/TODOs.md b/TODOs.md new file mode 100644 index 0000000..f57d0ab --- /dev/null +++ b/TODOs.md @@ -0,0 +1,3 @@ +# labop_labware TODOs + +* \ No newline at end of file diff --git a/VERSION b/VERSION new file mode 100644 index 0000000..8acdd82 --- /dev/null +++ b/VERSION @@ -0,0 +1 @@ +0.0.1 diff --git a/docs/Makefile b/docs/Makefile new file mode 100644 index 0000000..ea03c62 --- /dev/null +++ b/docs/Makefile @@ -0,0 +1,216 @@ +# Makefile for Sphinx documentation +# + +# You can set these variables from the command line. +SPHINXOPTS = +SPHINXBUILD = sphinx-build +PAPER = +BUILDDIR = _build + +# User-friendly check for sphinx-build +ifeq ($(shell which $(SPHINXBUILD) >/dev/null 2>&1; echo $$?), 1) +$(error The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed, then set the SPHINXBUILD environment variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don't have Sphinx installed, grab it from http://sphinx-doc.org/) +endif + +# Internal variables. +PAPEROPT_a4 = -D latex_paper_size=a4 +PAPEROPT_letter = -D latex_paper_size=letter +ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . +# the i18n builder cannot share the environment and doctrees with the others +I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . + +.PHONY: help +help: + @echo "Please use \`make ' where is one of" + @echo " html to make standalone HTML files" + @echo " dirhtml to make HTML files named index.html in directories" + @echo " singlehtml to make a single large HTML file" + @echo " pickle to make pickle files" + @echo " json to make JSON files" + @echo " htmlhelp to make HTML files and a HTML help project" + @echo " qthelp to make HTML files and a qthelp project" + @echo " applehelp to make an Apple Help Book" + @echo " devhelp to make HTML files and a Devhelp project" + @echo " epub to make an epub" + @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" + @echo " latexpdf to make LaTeX files and run them through pdflatex" + @echo " latexpdfja to make LaTeX files and run them through platex/dvipdfmx" + @echo " text to make text files" + @echo " man to make manual pages" + @echo " texinfo to make Texinfo files" + @echo " info to make Texinfo files and run them through makeinfo" + @echo " gettext to make PO message catalogs" + @echo " changes to make an overview of all changed/added/deprecated items" + @echo " xml to make Docutils-native XML files" + @echo " pseudoxml to make pseudoxml-XML files for display purposes" + @echo " linkcheck to check all external links for integrity" + @echo " doctest to run all doctests embedded in the documentation (if enabled)" + @echo " coverage to run coverage check of the documentation (if enabled)" + +.PHONY: clean +clean: + rm -rf $(BUILDDIR)/* + +.PHONY: html +html: + $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html + @echo + @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." + +.PHONY: dirhtml +dirhtml: + $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml + @echo + @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." + +.PHONY: singlehtml +singlehtml: + $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml + @echo + @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." + +.PHONY: pickle +pickle: + $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle + @echo + @echo "Build finished; now you can process the pickle files." + +.PHONY: json +json: + $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json + @echo + @echo "Build finished; now you can process the JSON files." + +.PHONY: htmlhelp +htmlhelp: + $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp + @echo + @echo "Build finished; now you can run HTML Help Workshop with the" \ + ".hhp project file in $(BUILDDIR)/htmlhelp." + +.PHONY: qthelp +qthelp: + $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp + @echo + @echo "Build finished; now you can run "qcollectiongenerator" with the" \ + ".qhcp project file in $(BUILDDIR)/qthelp, like this:" + @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/sila_python.qhcp" + @echo "To view the help file:" + @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/sila_python.qhc" + +.PHONY: applehelp +applehelp: + $(SPHINXBUILD) -b applehelp $(ALLSPHINXOPTS) $(BUILDDIR)/applehelp + @echo + @echo "Build finished. The help book is in $(BUILDDIR)/applehelp." + @echo "N.B. You won't be able to view it unless you put it in" \ + "~/Library/Documentation/Help or install it in your application" \ + "bundle." + +.PHONY: devhelp +devhelp: + $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp + @echo + @echo "Build finished." + @echo "To view the help file:" + @echo "# mkdir -p $$HOME/.local/share/devhelp/sila_python" + @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/sila_python" + @echo "# devhelp" + +.PHONY: epub +epub: + $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub + @echo + @echo "Build finished. The epub file is in $(BUILDDIR)/epub." + +.PHONY: latex +latex: + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex + @echo + @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." + @echo "Run \`make' in that directory to run these through (pdf)latex" \ + "(use \`make latexpdf' here to do that automatically)." + +.PHONY: latexpdf +latexpdf: + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex + @echo "Running LaTeX files through pdflatex..." + $(MAKE) -C $(BUILDDIR)/latex all-pdf + @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." + +.PHONY: latexpdfja +latexpdfja: + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex + @echo "Running LaTeX files through platex and dvipdfmx..." + $(MAKE) -C $(BUILDDIR)/latex all-pdf-ja + @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." + +.PHONY: text +text: + $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text + @echo + @echo "Build finished. The text files are in $(BUILDDIR)/text." + +.PHONY: man +man: + $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man + @echo + @echo "Build finished. The manual pages are in $(BUILDDIR)/man." + +.PHONY: texinfo +texinfo: + $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo + @echo + @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo." + @echo "Run \`make' in that directory to run these through makeinfo" \ + "(use \`make info' here to do that automatically)." + +.PHONY: info +info: + $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo + @echo "Running Texinfo files through makeinfo..." + make -C $(BUILDDIR)/texinfo info + @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo." + +.PHONY: gettext +gettext: + $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale + @echo + @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale." + +.PHONY: changes +changes: + $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes + @echo + @echo "The overview file is in $(BUILDDIR)/changes." + +.PHONY: linkcheck +linkcheck: + $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck + @echo + @echo "Link check complete; look for any errors in the above output " \ + "or in $(BUILDDIR)/linkcheck/output.txt." + +.PHONY: doctest +doctest: + $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest + @echo "Testing of doctests in the sources finished, look at the " \ + "results in $(BUILDDIR)/doctest/output.txt." + +.PHONY: coverage +coverage: + $(SPHINXBUILD) -b coverage $(ALLSPHINXOPTS) $(BUILDDIR)/coverage + @echo "Testing of coverage in the sources finished, look at the " \ + "results in $(BUILDDIR)/coverage/python.txt." + +.PHONY: xml +xml: + $(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml + @echo + @echo "Build finished. The XML files are in $(BUILDDIR)/xml." + +.PHONY: pseudoxml +pseudoxml: + $(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml + @echo + @echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml." diff --git a/docs/_static/LARA_logo.svg b/docs/_static/LARA_logo.svg new file mode 100644 index 0000000..89acfad --- /dev/null +++ b/docs/_static/LARA_logo.svg @@ -0,0 +1,296 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/_static/custom.css-tpl b/docs/_static/custom.css-tpl new file mode 100644 index 0000000..83609f1 --- /dev/null +++ b/docs/_static/custom.css-tpl @@ -0,0 +1,28 @@ +dl { + margin: 1em 0; +} + +dl.class > dt, +dl.method > dt, +dl.exception > dt, +dl.function > dt { + padding: 6px; +} + +dl.class > dt, dl.exception > dt { + color: hsl(195, 60%, 52%); + background: hsl(195, 62%, 94%); + border-top: solid 3px hsl(195, 69%, 68%); + margin: 6px 0; +} + +dl.method > dt, dl.function > dt { + color: #555; + background: #f0f0f0; + border-left: solid 3px #ccc; + margin-bottom: 6px; +} + +code.sig-prename, code.sig-name { + font-weight: bold; +} diff --git a/docs/authors.rst b/docs/authors.rst new file mode 100644 index 0000000..2930f4a --- /dev/null +++ b/docs/authors.rst @@ -0,0 +1,4 @@ +Authors +======== + +.. include:: ../AUTHORS.md diff --git a/docs/conf.py b/docs/conf.py new file mode 100755 index 0000000..10a3d50 --- /dev/null +++ b/docs/conf.py @@ -0,0 +1,178 @@ +#!/usr/bin/env python +# +# labop_labware documentation build configuration file, created by +# sphinx-quickstart on Fri Jun 9 13:47:02 2017. +# +# This file is execfile()d with the current directory set to its +# containing dir. +# +# Note that not all possible configuration values are present in this +# autogenerated file. +# +# All configuration values have a default; values that are commented out +# serve to show the default. + +# If extensions (or modules to document with autodoc) are in another +# directory, add these directories to sys.path here. If the directory is +# relative to the documentation root, use os.path.abspath to make it +# absolute, like shown here. +# +import os +import sys +sys.path.insert(0, os.path.abspath('..')) + +import labop_labware + +# -- General configuration --------------------------------------------- + +# If your documentation needs a minimal Sphinx version, state it here. +# +# needs_sphinx = '1.0' + +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom ones. +extensions = [ + 'sphinx.ext.autodoc', + 'sphinx.ext.viewcode', + 'sphinx.ext.napoleon', + 'sphinx.ext.todo', + 'myst_parser', + 'python_docs_theme', + #'sphinx.ext.mathjax', +] + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_templates'] + +# The suffix(es) of source filenames. +# You can specify multiple suffix as a list of string: +# +source_suffix = ['.rst', '.md'] +#source_suffix = '.rst' + +# The master toctree document. +master_doc = 'index' + +# General information about the project. +project = 'OSO labware' +copyright = "2022, mark doerr" +author = "mark doerr" + +# The version info for the project you're documenting, acts as replacement +# for |version| and |release|, also used in various other places throughout +# the built documents. +# +# The short X.Y version. +version = labop_labware.__version__ +# The full version, including alpha/beta/rc tags. +release = labop_labware.__version__ + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +# +# This is also used if you do content translation via gettext catalogs. +# Usually you set "language" from the command line for these cases. +language = "en" + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This patterns also effect to html_static_path and html_extra_path +exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store'] + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = 'sphinx' + +# If true, `todo` and `todoList` produce output, else they produce nothing. +todo_include_todos = False + + +# -- Options for HTML output ------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +# +#html_theme = 'alabaster' +html_theme = "python_docs_theme" + +# Theme options are theme-specific and customize the look and feel of a +# theme further. For a list of options available for each theme, see the +# documentation. +# +# html_theme_options = { +# "logo": "LARA_logo.svg", +# "show_powered_by": False, +# "font_family": "sans-serif", +# "head_font_family": "Lato, sans-serif", +# "page_width": "1280px", +# "sidebar_width": "200px", +# "code_font_size": ".85em", +# "font_size": ".9em", +# "link": "hsl(195, 60%, 20%)", +# } + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +html_static_path = ['_static'] + +html_logo = "_static/LARA_logo.svg" + +# -- Options for HTMLHelp output --------------------------------------- + +# Output file base name for HTML help builder. +htmlhelp_basename = 'labop_labwaredoc' + + +# -- Options for LaTeX output ------------------------------------------ + +latex_elements = { + # The paper size ('letterpaper' or 'a4paper'). + # 'papersize': 'letterpaper', + + # The font size ('10pt', '11pt' or '12pt'). + # 'pointsize': '10pt', + + # Additional stuff for the LaTeX preamble. + # 'preamble': '', + + # Latex figure (float) alignment + # 'figure_align': 'htbp', +} + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, author, documentclass +# [howto, manual, or own class]). +latex_documents = [ + (master_doc, 'labop_labware.tex', + 'OSO labware Documentation', + author, 'manual'), +] + + +# -- Options for manual page output ------------------------------------ + +# One entry per manual page. List of tuples +# (source start file, name, description, authors, manual section). +man_pages = [ + (master_doc, 'labop_labware', + 'OSO labware Documentation', + [author], 1) +] + + +# -- Options for Texinfo output ---------------------------------------- + +# Grouping the document tree into Texinfo files. List of tuples +# (source start file, target name, title, author, +# dir menu entry, description, category) +texinfo_documents = [ + (master_doc, 'labop_labware', + 'OSO labware Documentation', + author, + 'labop_labware', + 'One line description of project.', + 'Miscellaneous'), +] + + + diff --git a/docs/development.rst b/docs/development.rst new file mode 100644 index 0000000..339b948 --- /dev/null +++ b/docs/development.rst @@ -0,0 +1 @@ +.. include:: ../DEVELOPMENT.md diff --git a/docs/history.rst b/docs/history.rst new file mode 100644 index 0000000..0473b9b --- /dev/null +++ b/docs/history.rst @@ -0,0 +1,4 @@ +HISTORY +======== + +.. include:: ../HISTORY.md diff --git a/docs/index.rst b/docs/index.rst new file mode 100644 index 0000000..cc013e5 --- /dev/null +++ b/docs/index.rst @@ -0,0 +1,21 @@ +Welcome to OSO labware's documentation! +====================================================================== + +.. toctree:: + :glob: + :maxdepth: 2 + :caption: Contents: + + readme + installation + usage + source/modules + development + authors + history + +Indices and tables +================== +* :ref:`genindex` +* :ref:`modindex` +* :ref:`search` diff --git a/docs/installation.rst b/docs/installation.rst new file mode 100644 index 0000000..83542aa --- /dev/null +++ b/docs/installation.rst @@ -0,0 +1,28 @@ +.. highlight:: shell + +============ +Installation +============ + + +Stable release +-------------- + +To install OSO labware, run this command in your terminal: + +.. code-block:: console + + $ pip install labop_labware + +This is the preferred method to install OSO labware, as it will always install the most recent stable release. + +If you don't have `pip`_ installed, this `Python installation guide`_ can guide +you through the process. + +.. _pip: https://pip.pypa.io +.. _Python installation guide: http://docs.python-guide.org/en/latest/starting/installation/ + + +From source +----------- + diff --git a/docs/readme.rst b/docs/readme.rst new file mode 100644 index 0000000..cbfbfbb --- /dev/null +++ b/docs/readme.rst @@ -0,0 +1,4 @@ +README +======= + +.. include:: ../README.md diff --git a/docs/usage.rst b/docs/usage.rst new file mode 100644 index 0000000..8f9a0bf --- /dev/null +++ b/docs/usage.rst @@ -0,0 +1,7 @@ +===== +Usage +===== + +To use OSO labware in a project:: + + import labop_labware diff --git a/labop_labware/__init__.py b/labop_labware/__init__.py new file mode 100644 index 0000000..5cf01b9 --- /dev/null +++ b/labop_labware/__init__.py @@ -0,0 +1,5 @@ +"""Top-level package for OSO labware.""" + +__author__ = """mark doerr""" +__email__ = "mark.doerr@uni-greifswald.de" +__version__ = "0.0.1" diff --git a/labop_labware/__main__.py b/labop_labware/__main__.py new file mode 100644 index 0000000..313ca0b --- /dev/null +++ b/labop_labware/__main__.py @@ -0,0 +1,75 @@ +#!/usr/bin/env python3 +# vim:fileencoding=utf-8 +"""_____________________________________________________________________ + +:PROJECT: OSO labware + +* Main module command line interface * + +:details: Main module command line interface. + !!! Warning: it should have a diffent name than the package name. + +.. note:: - +.. todo:: - +________________________________________________________________________ +""" + +"""Main module implementation. !!! Warning: it should have a diffent name than the package name. """ +"""Console script for labop_labware.""" + +import argparse +import sys +import logging +from .__init__ import __version__ + +from .labop_labware_impl import HelloWorld + +logging.basicConfig( + format="%(levelname)-4s| %(module)s.%(funcName)s: %(message)s", + level=logging.DEBUG, +) + +def parse_command_line(): + """ Looking for command line arguments""" + + description = "labop_labware" + parser = argparse.ArgumentParser(description=description) + + parser.add_argument("_", nargs="*") + + parser.add_argument( + "-n", "--name", action="store", default="yvain", help="name to greet" + ) + + parser.add_argument('-v', '--version', action='version', version='%(prog)s ' + __version__) + + # add more arguments here + + return parser.parse_args() + +def main(): + """Console script for labop_labware.""" + # or use logging.INFO (=20) or logging.ERROR (=30) for less output + logging.basicConfig( + format='%(levelname)-4s| %(module)s.%(funcName)s: %(message)s', level=logging.DEBUG) + + + args = parse_command_line() + + if len(sys.argv) <= 2: + logging.debug("no arguments provided !") + + + print("Arguments: " + str(args._)) + print("Replace this message by putting your code into labop_labware.__main__") + + hw = HelloWorld() + greeting = hw.greet_the_world(args.name) + logging.debug(greeting) + + return 0 + + +if __name__ == "__main__": + + sys.exit(main()) # pragma: no cover diff --git a/labop_labware/labware.py b/labop_labware/labware.py new file mode 100644 index 0000000..285dfff --- /dev/null +++ b/labop_labware/labware.py @@ -0,0 +1,217 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +"""_____________________________________________________________________ + +:PROJECT: LabOP - Laboratory Open Protocol language or LabOP + +* labOP labware implementation * + +:details: Main module i. + + https://en.wikipedia.org/wiki/Dimensional_analysis + +.. note:: - +.. todo:: - +________________________________________________________________________ +""" + +import os +import pathlib +import logging + +from ontopy import World +from ontopy.utils import write_catalog + +import owlready2 + +from labop_labware.__init__ import __version__ # Version of this ontology + + +# --- helper functions + +def en(s): + """Returns `s` as an English location string.""" + return owlready2.locstr(s, lang='en') + + +def pl(s): + """Returns `s` as a plain literal string.""" + return owlready2.locstr(s, lang='') + + +class labop_Labware: + def __init__(self, emmo_world=None) -> None: + + self.labop_labware_base_iri = 'http://www.oso.org/oso/labware#' + self.labop_labware_version_iri = f'http://www.oso.org/{__version__}/oso/labware' + + output_filename_base = os.path.join('labop_labware') + self.labop_labware_owl_filename = f'{output_filename_base}-v{__version__}.owl' + self.labop_labware_ttl_filename = f'{output_filename_base}-v{__version__}.ttl' + + # Load crystallography, which imports emmo + # alternative url "https://raw.githubusercontent.com/emmo-repo/EMMO/master/self.emmo.ttl" + + self.emmo_url = ( + 'https://raw.githubusercontent.com/emmo-repo/emmo-repo.github.io/' + 'master/versions/1.0.0-beta/emmo-inferred-chemistry2.ttl') + + self.emmo_url_local = os.path.join(pathlib.Path( + __file__).parent.resolve(), "emmo", "emmo-inferred-chemistry2") + + if os.path.isfile(self.emmo_url_local + '.ttl'): + self.emmo_url = self.emmo_url_local + + #self.emmo_world = World(filename="emmo_labwares.sqlite3") + if emmo_world is not None: + self.emmo_world = emmo_world + else: + self.emmo_world = World() + # self.emmo_world.onto_path.append("../emmo") + + self.emmo = self.emmo_world.get_ontology(self.emmo_url) + self.emmo.load() # reload_if_newer = True + self.emmo.sync_python_names() # Syncronize annotations + self.emmo.base_iri = self.emmo.base_iri.rstrip('/#') + self.catalog_mappings = {self.emmo.base_iri: self.emmo_url} + + # Create new ontology + self.osolw = self.emmo_world.get_ontology(self.labop_labware_base_iri) + if emmo_world is None: + self.osolw.imported_ontologies.append(self.emmo) + self.osolw.sync_python_names() + + def define_ontology(self): + logging.debug('defining labware ontology') + + with self.osolw: + + # Basic Relations + # ================ + + class hasType(self.osolw.hasConvention): + """Associates a type (string, number...) to a property.""" + + class isTypeOf(self.osolw.hasConvention): + """Associates a property to a type (string, number...).""" + inverse_property = hasType + + # Physical Properties + # ========== + + class Length: + """"Labware total length """ + + class Width: + """Labware total width, """ + + class Height: + """Labware total hight, without any additions, like lids etc. """ + + class HigthLidded: + """Labware total hight, with additions, like lids etc.""" + + class HightStacked: + """Labware stacking height without any additions, like lids.""" + + class HightStackedLidded: + """Labware stacking height with additions, like lids.""" + + class Mass: + """Mass of the Labware """ + + class Material: + """polymer, properties, like solvent tolerance, transperancy, ....""" + + class Color: + """Labware color""" + + class Liddable: + """container is liddable""" + + class Sealable: + """container is sealable""" + + # multiwell labware + + class NumRows: + """Number of rows of container""" + + class NumCols : + """Number of columns of container""" + + class NumWells: + """Number of wells - could be auto generated""" + + class WellDistRow: + """wWll-to-well distance in row direction""" + + class WellDistCol: + """"Well-to-well distance in column direction""" + + # Well properties of labware with wells + class DepthWell: + """Well total well depth=hight""" + + class ShapeWell: + """Well overall / top well shape,e.g. round, square, buffeled,...""" + + class ShapeWellBottom: + """Well, bottom shape, flat, round, conical-""" + + class TopRadiusXY: + """Well radius of a round well at the top opening in x-y plane.""" + + class BottomRadiusXY: + """Radius of a round bottom in xy plane / direction.""" + + class BottomRadiusZ: + """Radius of a round bottom in z (hight) direction.""" + + class ConeAngle: + """Opening angle of cone in deg.""" + + class ConeDepth: + """Depth of cone from beginning of conical shape.""" + + class ShapePolygonXY: + """Generalized shape polygon for more complex well shapes, in xy plane / direction.""" + + class ShapePolygonZ: + """Generalized shape polygon for more complex well shapes, in z direction = rotation axis.""" + + class ShapeModel2D: + """2D model of Well shape""" + + class ShapeModel3D: + """3D model of Well shape""" + + # Production Properties / Metadata + class Manufacturer: + """Name of the Manufacturer """ + + class ProductType: + """Labware product Type""" + + class ModelNumber: + """Labware model number""" + + class ProductNumber: + """Manufacturer Product Number of the Labware""" + + # class Description: + # """Labware description. Possible applications/purpose for this labware could be also added here.""" + + + # Relations + # =========== + + # Measurement Classes + # ==================== + + # Basic ------ + + class Labware(self.osolw.Device): + """Labware is a utility device that all experiments are done with and which is not actively measuring. Examples: a container, a pipette tip, a reactor, ... """ + + #is_a = [self.osom.hasProperty.some(self.osom.Time)] \ No newline at end of file diff --git a/notebooks/labop_labware_dev.ipynb b/notebooks/labop_labware_dev.ipynb new file mode 100644 index 0000000..6729d8a --- /dev/null +++ b/notebooks/labop_labware_dev.ipynb @@ -0,0 +1,736 @@ +{ + "cells": [ + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# LabOP Labware development\n", + "\n", + "Why using a EMMOntoPy base approach\n", + "\n", + "- the ontology is formulated programmatically in python\n", + "- supports developer with a lot of automatic functionality, like using UUIDs as IDs (by default), SKOS-labels (prefered label) , annotations, ...\n", + "- includes dimension and unit support out of the box (no extra definition required) - also many other concepts that are useful \n", + "- unifies the way, the OWL based ontology is generated\n", + "- has verification tool to check the syntactic consistency of the ontology\n", + "- fast FACT++ reasoner for logic consistency check\n", + "- easy generation of turtle (ttl) OWL files and many other formats\n", + "- basic query is directly supported\n", + "- integrated SPRAQL engine for advance queries\n", + "\n", + " - everything is encapsulated in python classes, that can directly be used in applications (!!)\n", + "\n", + "\n", + "## Design guidelines for the labware ontology\n", + "\n", + "- as general as possible -> wide applicability\n", + "- capturing the most important/common labware features\n", + "- separation of abstract class definitions and individuals\n", + "- no hard coded features\n", + "\n", + " ## outlook\n", + "\n", + " - improved properties / relations (proper auto - unit support)\n", + " - packing everything into a nice package\n", + " - copying code to LapOP repository (best in a new project)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# currently only reflib 4.2.1 is supported\n", + "#! pip install rdflib==4.2.1\n", + "#! pip install packaging==21.0\n", + "import os\n", + "import pathlib\n", + "import logging\n", + "import pandas as pd\n", + "\n", + "from ontopy import World\n", + "from ontopy.utils import write_catalog\n", + "\n", + "import owlready2\n", + "from owlready2 import DatatypeProperty, FunctionalProperty\n", + "\n", + "# --- helper functions\n", + "\n", + "def en(s):\n", + " \"\"\"Returns `s` as an English location string.\"\"\"\n", + " return owlready2.locstr(s, lang='en')\n", + "\n", + "\n", + "def pl(s):\n", + " \"\"\"Returns `s` as a plain literal string.\"\"\"\n", + " return owlready2.locstr(s, lang='')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "class labop_Labware:\n", + " def __init__(self, emmo_world=None) -> None:\n", + "\n", + " __version__ = \"0.0.1\"\n", + " __file__ = \".\"\n", + "\n", + " self.__version__ = __version__\n", + "\n", + " self.labop_labware_base_iri = 'http://www.oso.org/oso/labware#'\n", + " self.labop_labware_version_iri = f'http://www.oso.org/{__version__}/oso/labware'\n", + "\n", + " output_filename_base = os.path.join('labop_labware')\n", + " self.labop_labware_owl_filename = f'{output_filename_base}-v{__version__}.owl'\n", + " self.labop_labware_ttl_filename = f'{output_filename_base}-v{__version__}.ttl'\n", + "\n", + " # Load crystallography, which imports emmo\n", + " # alternative url \"https://raw.githubusercontent.com/emmo-repo/EMMO/master/self.emmo.ttl\"\n", + "\n", + " self.emmo_url = (\n", + " 'https://raw.githubusercontent.com/emmo-repo/emmo-repo.github.io/'\n", + " 'master/versions/1.0.0-beta/emmo-inferred-chemistry2.ttl')\n", + "\n", + " self.emmo_url_local = os.path.join(pathlib.Path(\n", + " __file__).parent.resolve(), \"emmo\", \"emmo-inferred-chemistry2\")\n", + "\n", + " if os.path.isfile(self.emmo_url_local + '.ttl'):\n", + " self.emmo_url = self.emmo_url_local\n", + "\n", + " #self.emmo_world = World(filename=\"emmo_labwares.sqlite3\")\n", + " if emmo_world is not None:\n", + " self.emmo_world = emmo_world\n", + " else:\n", + " self.emmo_world = World()\n", + " # self.emmo_world.onto_path.append(\"../emmo\")\n", + "\n", + " self.emmo = self.emmo_world.get_ontology(self.emmo_url)\n", + " self.emmo.load() # reload_if_newer = True\n", + " self.emmo.sync_python_names() # Synchronise annotations\n", + " self.emmo.base_iri = self.emmo.base_iri.rstrip('/#')\n", + " self.catalog_mappings = {self.emmo.base_iri: self.emmo_url}\n", + "\n", + " # Create new ontology\n", + " self.osolw = self.emmo_world.get_ontology(self.labop_labware_base_iri)\n", + " if emmo_world is None:\n", + " self.osolw.imported_ontologies.append(self.emmo)\n", + " self.osolw.sync_python_names()\n", + "\n", + " def define_ontology(self):\n", + " logging.debug('defining labware ontology')\n", + "\n", + " with self.osolw:\n", + "\n", + " # Basic Relations\n", + " # ================\n", + "\n", + " class hasType(self.osolw.hasConvention):\n", + " \"\"\"Associates a type (string, number...) to a property.\"\"\"\n", + "\n", + " class isTypeOf(self.osolw.hasConvention):\n", + " \"\"\"Associates a property to a type (string, number...).\"\"\"\n", + " inverse_property = hasType\n", + "\n", + " # Physical Properties\n", + " # ==========\n", + "\n", + " class Length:\n", + " \"\"\"\"Labware total length \"\"\"\n", + "\n", + " class Width:\n", + " \"\"\"Labware total width, \"\"\"\n", + " \n", + " class Height:\n", + " \"\"\"Labware total hight, without any additions, like lids etc. \"\"\"\n", + "\n", + " class Volume:\n", + " \"\"\"Total Labware volume \"\"\"\n", + "\n", + " class HigthLidded:\n", + " \"\"\"Labware total hight, with additions, like lids etc.\"\"\"\n", + "\n", + " class HightStacked:\n", + " \"\"\"Labware stacking height without any additions, like lids.\"\"\"\n", + "\n", + " class HightStackedLidded:\n", + " \"\"\"Labware stacking height with additions, like lids.\"\"\"\n", + "\n", + " class Mass:\n", + " \"\"\"Mass of the Labware \"\"\"\n", + "\n", + " class Material:\n", + " \"\"\"Polymer, properties, like solvent tolerance, transparency, ....\"\"\"\n", + "\n", + " class Model3D:\n", + " \"\"\"3D model of the labware in X format.\"\"\"\n", + " \n", + " class Color:\n", + " \"\"\"Labware color\"\"\"\n", + "\n", + " class Liddable:\n", + " \"\"\"container is liddable\"\"\"\n", + "\n", + " class Sealable:\n", + " \"\"\"container is sealable\"\"\"\n", + "\n", + " # multiwell labware\n", + "\n", + " class WellVolume:\n", + " \"\"\"Total Labware volume \"\"\"\n", + "\n", + " class WellDistRow:\n", + " \"\"\"wWll-to-well distance in row direction\"\"\"\n", + " \n", + " class WellDistCol:\n", + " \"\"\"\"Well-to-well distance in column direction\"\"\"\n", + "\n", + " # Well properties of labware with wells\n", + " class DepthWell:\n", + " \"\"\"Well total well depth=hight\"\"\"\n", + " \n", + " class ShapeWell:\n", + " \"\"\"Well overall / top well shape,e.g. round, square, buffeled,...\"\"\"\n", + " \n", + " class ShapeWellBottom:\n", + " \"\"\"Well, bottom shape, flat, round, conical-\"\"\"\n", + "\n", + " class TopRadiusXY:\n", + " \"\"\"Well radius of a round well at the top opening in x-y plane.\"\"\"\n", + "\n", + " class BottomRadiusXY:\n", + " \"\"\"Radius of a round bottom in xy plane / direction.\"\"\"\n", + "\n", + " class BottomRadiusZ:\n", + " \"\"\"Radius of a round bottom in z (hight) direction.\"\"\"\n", + "\n", + " class ConeAngle:\n", + " \"\"\"Opening angle of cone in deg.\"\"\"\n", + "\n", + " class ConeDepth:\n", + " \"\"\"Depth of cone from beginning of conical shape.\"\"\"\n", + "\n", + " class ShapePolygonXY:\n", + " \"\"\"Generalized shape polygon for more complex well shapes, in xy plane / direction.\"\"\"\n", + "\n", + " class ShapePolygonZ:\n", + " \"\"\"Generalized shape polygon for more complex well shapes, in z direction = rotation axis.\"\"\"\n", + "\n", + " class ShapeModel2D:\n", + " \"\"\"2D model of Well shape\"\"\"\n", + "\n", + " class ShapeModel3D:\n", + " \"\"\"3D model of Well shape\"\"\"\n", + "\n", + "\n", + "\n", + " # class Description:\n", + " # \"\"\"Labware description. Possible applications/purpose for this labware could be also added here.\"\"\"\n", + " \n", + "\n", + " # Labware Classes\n", + " # ====================\n", + "\n", + " # Basic ------\n", + "\n", + " class Labware(self.osolw.Device):\n", + " \"\"\"Labware is a utility device that all experiments are done with and which is not actively measuring. Examples: a container, a pipette tip, a reactor, ... \"\"\"\n", + "\n", + " # is_a = [self.osolw.has_Material.some(str),\n", + " # self.osolw.has_NumCols.some(int),\n", + " # self.osolw.has_NumRows.some(int)]\n", + "\n", + " # Relations / Properties\n", + " # ========================\n", + "\n", + " # Physical Properties\n", + "\n", + " class hasLength:\n", + " \"\"\"\"Labware total length \"\"\"\n", + " is_a = [\n", + " self.osolw.hasReferenceUnit.only(\n", + " self.osolw.hasPhysicalDimension.only(self.osolw.Length)\n", + " ),\n", + " hasType.exactly(1, self.osolw.Real), ]\n", + "\n", + " # class hasWidth(FunctionalProperty):\n", + " # \"\"\"Labware total width, \"\"\"\n", + " # domain = [Labware]\n", + " # range = [Width]\n", + "\n", + " # class hasHeight(Labware >> self.osolw.Height, FunctionalProperty):\n", + " # \"\"\"Labware total hight, without any additions, like lids etc. \"\"\"\n", + " \n", + " class hasWidth(Labware >> float, FunctionalProperty):\n", + " \"\"\"Labware total width, \"\"\"\n", + " \n", + " class hasHeight(Labware >> float, FunctionalProperty):\n", + " \"\"\"Labware total hight, without any additions, like lids etc. \"\"\"\n", + "\n", + " class hasRadiusXY(Labware >> float, FunctionalProperty):\n", + " \"\"\"Labware radius of a round shape in XY direction \"\"\"\n", + "\n", + " class hasRadiusZ(Labware >> float, FunctionalProperty):\n", + " \"\"\"Labware radius of a round shape in XY direction \"\"\"\n", + "\n", + " class hasVolume(Labware >> float, FunctionalProperty):\n", + " \"\"\"Total Labware volume \"\"\"\n", + "\n", + " class hasHigthLidded(Labware >> float, FunctionalProperty):\n", + " \"\"\"Labware total hight, with additions, like lids etc.\"\"\"\n", + "\n", + " class hasHightStacked(Labware >> float, FunctionalProperty):\n", + " \"\"\"Labware stacking height without any additions, like lids.\"\"\"\n", + "\n", + " class hasHightStackedLidded(Labware >> float, FunctionalProperty):\n", + " \"\"\"Labware stacking height with additions, like lids.\"\"\"\n", + "\n", + " class hasMass(Labware >> float, FunctionalProperty):\n", + " \"\"\"Mass of the Labware \"\"\"\n", + "\n", + " \n", + " class hasColor(Labware >> str, FunctionalProperty):\n", + " \"\"\"Labware color in RGB hex encoding\"\"\"\n", + "\n", + " class isLiddable(Labware >> bool, FunctionalProperty):\n", + " \"\"\"container is liddable\"\"\"\n", + "\n", + " class isSealable(Labware >> bool, FunctionalProperty):\n", + " \"\"\"container is sealable\"\"\"\n", + "\n", + " class hasMaterial(Labware >> str, DatatypeProperty):\n", + " \"\"\"Polymer, properties, like solvent tolerance, transparency, ....\"\"\"\n", + " domain = [Labware]\n", + " range = [str]\n", + "\n", + " # multiwell labware\n", + " \n", + "\n", + " class hasNumCols(Labware >> int, FunctionalProperty):\n", + " \"\"\"Number of Columns of muti-well labware\"\"\"\n", + "\n", + " class hasNumRows(Labware >> int, FunctionalProperty):\n", + " \"\"\"Number of Rows of Labware\"\"\"\n", + "\n", + " class hasNumWells(Labware >> int, FunctionalProperty):\n", + " \"\"\"Number of Wells of muti-well labware\"\"\"\n", + "\n", + " # Production Properties / Metadata\n", + "\n", + " class hasManifacturer(Labware >> str, FunctionalProperty):\n", + " \"\"\"Name of the Manufacturer \"\"\"\n", + " \n", + " class isProductType(Labware >> str, FunctionalProperty):\n", + " \"\"\"Labware product Type\"\"\"\n", + "\n", + " class hasModelNumber(Labware >> str, FunctionalProperty):\n", + " \"\"\"Labware model number\"\"\"\n", + "\n", + " class hasProductNumber(Labware >> str, FunctionalProperty):\n", + " \"\"\"Manufacturer Product Number of the Labware\"\"\"\n", + "\n", + " # multiwell labware\n", + "\n", + " class hasWellVolume(Labware >> float, FunctionalProperty):\n", + " \"\"\"Total Labware volume \"\"\"\n", + "\n", + " class hasWellDistRow(Labware >> float, FunctionalProperty):\n", + " \"\"\"wWll-to-well distance in row direction\"\"\"\n", + " \n", + " class hasWellDistCol(Labware >> float, FunctionalProperty):\n", + " \"\"\"\"Well-to-well distance in column direction\"\"\"\n", + "\n", + " # Well properties of labware with wells\n", + " class hasDepthWell(Labware >> float, FunctionalProperty):\n", + " \"\"\"Well total well depth=hight\"\"\"\n", + " \n", + " class hasShapeWell(Labware >> str, FunctionalProperty):\n", + " \"\"\"Well overall / top well shape,e.g. round, square, buffeled,...\"\"\"\n", + " \n", + " class hasShapeWellBottom(Labware >> str, FunctionalProperty):\n", + " \"\"\"Well, bottom shape, flat, round, conical-\"\"\"\n", + "\n", + " class hasTopRadiusXY(Labware >> float, FunctionalProperty):\n", + " \"\"\"Well radius of a round well at the top opening in x-y plane.\"\"\"\n", + "\n", + " class hasBottomRadiusXY(Labware >> float, FunctionalProperty):\n", + " \"\"\"Radius of a round bottom in xy plane / direction.\"\"\"\n", + "\n", + " class hasBottomRadiusZ(Labware >> float, FunctionalProperty):\n", + " \"\"\"Radius of a round bottom in z (hight) direction.\"\"\"\n", + "\n", + " class hasConeAngle(Labware >> float, FunctionalProperty):\n", + " \"\"\"Opening angle of cone in deg.\"\"\"\n", + "\n", + " class hasConeDepth(Labware >> float, FunctionalProperty):\n", + " \"\"\"Depth of cone from beginning of conical shape.\"\"\"\n", + "\n", + " class hasShapePolygonXY(Labware >> float, FunctionalProperty):\n", + " \"\"\"Generalized shape polygon for more complex well shapes, in xy plane / direction.\"\"\"\n", + "\n", + " class hasShapePolygonZ(Labware >> str, FunctionalProperty):\n", + " \"\"\"Generalized shape polygon for more complex well shapes, in z direction = rotation axis.\"\"\"\n", + "\n", + " class hasShapeModel2D(Labware >> str, FunctionalProperty):\n", + " \"\"\"2D model of Well shape\"\"\"\n", + "\n", + " class hasShapeModel3D(Labware >> str, FunctionalProperty):\n", + " \"\"\"3D model of Well shape\"\"\"\n", + "\n", + " \n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "olw = labop_Labware()\n", + "olw.define_ontology()\n", + "\n", + "list(olw.osolw.classes())" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Defining individuals" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "with olw.osolw:\n", + " greiner_384_v = olw.osolw.Labware(\"Greiner_384_V\", \n", + " hasNumRows=192, \n", + " hasNumCols=16, \n", + " hasNumWells=384 )" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "greiner_384_v.is_a\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "type(greiner_384_v)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "greiner_384_v.hasNumCols, greiner_384_v.hasNumWells" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# loading an example labware catalog csv file:\n", + "\n", + "print(os.getcwd())\n", + "\n", + "strateos_csv = \"./strateos_containers.csv\"\n", + "strateos_cont_df = pd.read_csv(strateos_csv, delimiter=\";\")\n", + "strateos_cont_df = strateos_cont_df.reset_index() # make sure indexes pair with number of rows\n", + "strateos_cont_df.head(32)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "strateos_cont_df[strateos_cont_df['Vendor'] == 'Greiner']" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "with olw.osolw:\n", + " for index,row in strateos_cont_df.iterrows():\n", + " print(row['Id'], \"-- >\", row['Well Count'])\n", + " lw = olw.osolw.Labware( row['Id'],\n", + " hasManifacturer=row['Vendor'],\n", + " hasNumRows=row['Well Count'] / row['Column Count'], \n", + " hasNumCols=row['Column Count'],\n", + " hasNumWells=row['Well Count'],\n", + " hasHeight=row['Height (mm)'],\n", + " hasWellVolume=row['Well Volume (ul)'],\n", + " )" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### exporting ontology as ttl file" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## SPARQL queries" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "prefix_dict = {\n", + " 'rdf': \"http://www.w3.org/1999/02/22-rdf-syntax-ns#\",\n", + " 'rdfs': \"http://www.w3.org/2000/01/rdf-schema#\",\n", + " 'xml': \"http://www.w3.org/XML/1998/namespace\",\n", + " 'xsd': \"http://www.w3.org/2001/XMLSchema#\",\n", + " 'owl': \"http://www.w3.org/2002/07/owl#\",\n", + " 'skos': \"http://www.w3.org/2004/02/skos/core#\",\n", + " 'dc': \"http://purl.org/dc/elements/1.1/\",\n", + " 'dcterm': \"http://purl.org/dc/terms/\",\n", + " 'dctype': \"http://purl.org/dc/dcmitype/\",\n", + " 'foaf': \"http://xmlns.com/foaf/0.1/\",\n", + " 'wd': \"http://www.wikidata.org/entity/\",\n", + " 'ex': \"http://www.example.com/\",\n", + " 'emmo': \"http://emmo.info/emmo#\",\n", + " 'oso': \"http://www.oso.org/oso#\",\n", + " 'osom': \"http://www.oso.org/oso/measurements#\",\n", + " 'osolw': \"http://www.oso.org/oso/labware#\",\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "graph = olw.emmo_world.as_rdflib_graph()\n", + "\n", + "for prefix, iri in prefix_dict.items():\n", + " print(prefix, \"--- \", iri )\n", + " graph.bind(prefix, iri)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# get all labware from Greiner\n", + "\n", + "query = \"\"\"\n", + "\n", + "PREFIX osolw: \n", + "\n", + "SELECT ?lm \n", + "WHERE {\n", + " ?lm rdf:type osolw:Labware.\n", + " ?lm osolw:hasManifacturer \"Greiner\".\n", + " }\n", + "\"\"\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "results = list(olw.emmo_world.sparql(query))\n", + "results" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# get all labware from Greiner with 384 wells \n", + "\n", + "query = \"\"\"\n", + "\n", + "PREFIX osolw: \n", + "\n", + "SELECT ?lm \n", + "WHERE {\n", + " ?lm rdf:type osolw:Labware.\n", + " ?lm osolw:hasManifacturer \"Greiner\".\n", + " ?lm osolw:hasNumWells 384.\n", + " }\n", + "\"\"\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "results = list(olw.emmo_world.sparql(query))\n", + "results" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "results = list(olw.emmo_world.sparql(query))\n", + "results" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## saving ontology as ttl file" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "# Save new ontology as owl\n", + "olw.osolw.sync_attributes(name_policy='uuid', class_docstring='elucidation',\n", + " name_prefix='labop_')\n", + " \n", + "olw.osolw.set_version(version_iri=olw.labop_labware_version_iri)\n", + "olw.osolw.dir_label = False\n", + "\n", + "olw.catalog_mappings[olw.labop_labware_version_iri] = olw.labop_labware_ttl_filename \n", + "\n", + "#################################################################\n", + "# Annotate the ontology metadata\n", + "#################################################################\n", + "\n", + "olw.osolw.metadata.abstract.append(en(\n", + " 'An EMMO-based domain ontology scientific measurements.'\n", + " 'olw-measurement is released under the Creative Commons Attribution 4.0 '\n", + " 'International license (CC BY 4.0).'))\n", + "\n", + "\n", + "olw.osolw.metadata.title.append(en('OSO-Measurement'))\n", + "olw.osolw.metadata.creator.append(en('mark doerr'))\n", + "olw.osolw.metadata.contributor.append(en('university greifswald'))\n", + "olw.osolw.metadata.publisher.append(en(''))\n", + "olw.osolw.metadata.license.append(en(\n", + " 'https://creativecommons.org/licenses/by/4.0/legalcode'))\n", + "olw.osolw.metadata.versionInfo.append(en(olw.__version__))\n", + "olw.osolw.metadata.comment.append(en(\n", + " 'The EMMO requires FaCT++ reasoner plugin in order to visualize all'\n", + " 'inferences and class hierarchy (ctrl+R hotkey in Protege).'))\n", + "olw.osolw.metadata.comment.append(en(\n", + " 'This ontology is generated with data from the ASE Python package.'))\n", + "olw.osolw.metadata.comment.append(en(\n", + " 'Contacts:\\n'\n", + " 'mark doerr\\n'\n", + " 'University Greifswald\\n'\n", + " 'email: mark.doerr@suni-greifswald.de\\n'\n", + " '\\n'\n", + " ))\n", + "\n", + "olw.osolw.save(olw.labop_labware_ttl_filename , overwrite=True)\n", + "#olw.save(labop_measurement_owl_filename, overwrite=True)\n", + "write_catalog(olw.catalog_mappings)\n", + "# olw.sync_reasoner()\n", + "# olw.save('olw-measurement-inferred.ttl', overwrite=True)\n", + "# ...and to the sqlite3 database.\n", + "# world.save()\n", + "\n", + "\n", + "# Manually change url of EMMO to `emmo_url` when importing it to make\n", + "# it resolvable without consulting the catalog file. This makes it possible\n", + "# to open the ontology from url in Protege\n", + "import rdflib # noqa: E402, F401\n", + "g = rdflib.Graph()\n", + "g.parse(olw.labop_labware_ttl_filename , format='turtle')\n", + "for s, p, o in g.triples(\n", + " (None, rdflib.URIRef('http://www.w3.org/2002/07/owl#imports'), None)):\n", + " if 'emmo-inferred' in o:\n", + " g.remove((s, p, o))\n", + " g.add((s, p, rdflib.URIRef(olw.emmo_url)))\n", + "g.serialize(destination=olw.labop_labware_ttl_filename, format='turtle')\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "lara39", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.16" + }, + "orig_nbformat": 4, + "vscode": { + "interpreter": { + "hash": "bd9418668fc44f68c3d5dedbe2cf4d3042fece1c527f44dc626a93675f7ef664" + } + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/notebooks/strateos_containers.csv b/notebooks/strateos_containers.csv new file mode 100644 index 0000000..5e3c75f --- /dev/null +++ b/notebooks/strateos_containers.csv @@ -0,0 +1,66 @@ +Id;Vendor;Catalog Number;Name;Retired At;Well Count;Well Depth (mm);Height (mm);Well Volume (ul);Column Count;Capabilities;Acceptable Lids;Sale Price +384-pcr;Eppendorf;951020539;384-Well twin.tec PCR Plate;-;384;9.6;10.6;40;24;bluewash, dispense-destination, echo_dest, envision, flash_freeze, image_plate, incubate, qrt_thermocycle, seal, spin, stamp, thermocycle;ultra-clear, foil;*$9.35* +96-10-spot-vplex-m-pro-inflamm1-MSD;Mesoscale;K15048G;96-well 10-spot v-plex mouse pro-inflammatory panel 1 MSD plate;-;96;11.68;14.35;410;12;bluewash, cover, deseal, dispense-destination, envision, incubate, mesoscale_sectors600, pipette, seal, spin, stamp, uncover;low_evaporation, standard, universal, ultra-clear;*$0.00* +single-vbottom-microwell;unknown;unknown;Single-V-Bottom Microwell;-;1;10.5;14.7;400;1;agitate, evaporate, image, incubate, lcms, liquid_handle, provision;universal;*$1.19* +conical-50;Greiner;227270;50mL Conical;-;1;0;-;50000;1;cover, dispense-source, incubate, provision, spin, transfer, uncover;screw-cap;*$1.07* +384-flat-white-white-nbs;Corning;3574;384-Well Low Flange White FlatBottom Polystyrene NBS Microplate;-;384;11.43;14.35;80;24;cover, deseal, dispense-destination, echo_dest, envision, image_plate, incubate, luminescence, pipette, seal, spin, stamp, uncover;universal, standard, ultra-clear, foil;*$11.80* +384-flat-white-white-optiplate;PerkinElmer;6007290;384-Well White Opaque Microplate;-;384;10.45;14.4;105;24;bluewash, cover, dispense-destination, echo_dest, envision, flash_freeze, fluorescence, image_plate, incubate, luminescence, maxiprep_destination, maxiprep_source, miniprep_destination, miniprep_source, pipette, sanger_sequence, seal, spin, stamp, uncover;universal, ultra-clear, foil;*$8.28* +96-v-kf;Fisher;22-387-030;96-well KingFisher PCR microplate;-;96;12.9;14.5;200;12;cover, dispense-destination, envision, image_plate, incubate, magnetic_transfer_deep, magnetic_transfer_pcr, pipette, spin, stamp, uncover;standard;*$6.31* +chemspeed-96-sealed-pin-rack;Chemspeed;unknown;Chemspeed 96 Pin Rack;-;96;36;36;9000;12;;;*$0.00* +384-echo;Labcyte;PP-0200;384-Well Echo Qualified Polypropylene Microplate 2.0;-;384;11.5;14.4;135;24;dispense-destination, echo_dest, echo_source, envision, image_plate, incubate, seal, spin, stamp;universal, foil, ultra-clear;*$7.35* +96-flat-clear-costar-3590;Costar;3590;96-well EIA/RIA Clear Flat Bottom Polystyrene High Bind Microplate;-;96;10.67;14.22;360;12;absorbance, bluewash, cover, deseal, dispense, echo_dest, envision, fluorescence, gel_purify, gel_separate, incubate, liquid_handle, luminescence, pipette, seal, spectrophotometry, spin, stamp, uncover;universal, standard, ultra-clear, foil, low_evaporation, breathable;*$0.00* +96-flat-uv;Corning;3635;96-Well Clear Flat Bottom UV-Transparent Microplate;-;96;10.67;14.22;340;12;absorbance, dispense-destination, envision, fluorescence, image_plate, incubate, luminescence, magnetic_transfer_pcr, spin, stamp;low_evaporation, standard, universal;*$16.78* +bottle-250;not_applicable;not_applicable;250mL Bottle;-;1;0;-;250000;1;cover, dispense-source, incubate, provision, spin, transfer, uncover;screw-cap;*$1.01* +nmr-tube-5mm;unknown;unknown;Nuclear Magnetic Resonance Tube 5mm OD;-;1;103.5;117.2;600;1;cover, dispense, liquid_handle, provision, uncover;screw-cap;*$0.00* +res-sw96-hp;Axygen;res-sw96-hp;1-Well Reagent Reservoir with 96-Bottom Troughs, High Profile;-;1;38.6;43.92;280000;1;cover, dispense-destination, dispense-source, incubate, liquid_handle, uncover;universal;*$8.35* +96-flat-white-dc;ThermoFisher;136101;Nunc MicroWell 96-Well, Nunclon Delta-Treated, Flat-Bottom Microplate;-;96;11.2;14.6;320;12;absorbance, cover, dispense-destination, fluorescence, incubate, liquid_handle, luminescence, pipette, provision, seal, spin, stamp, uncover, unseal;low_evaporation, standard, universal, ultra-clear, foil;*$0.00* +96-4-spot-mMIP3a-MSD;Mesoscale;K152MSD;96-well 4-spot mouse MIP3a MSD plate;-;96;11.68;14.35;410;12;bluewash, cover, deseal, dispense-destination, envision, incubate, mesoscale_sectors600, pipette, seal, spin, stamp, uncover;low_evaporation, standard, universal, ultra-clear;*$0.00* +384-flat-white-white-lv;Corning;3824;384-Well Low Volume White Flat Bottom Polystyrene NBS Microplate;-;384;9.39;12.19;40;24;absorbance, cover, dispense-destination, echo_dest, envision, fluorescence, image_plate, incubate, luminescence, pipette, spin, stamp, uncover;standard, universal;*$15.70* +96-10-spot-uplex-MSD;Mesoscale;K15069L;96-well 10-spot u-plex MSD plate;-;96;11.68;14.35;410;12;bluewash, cover, deseal, dispense-destination, envision, incubate, mesoscale_sectors600, pipette, seal, spin, stamp, uncover;low_evaporation, standard, universal, ultra-clear;*$0.00* +pcr-0.5;USA Scientific;1405-8100;0.5mL PCR tube;2/27/2018;1;0;-;500;1;thermocycle;;*$0.00* +96-flat;Corning;3632;96-Well White with Clear Flat Bottom Polystyrene Not Treated Microplate;-;96;10.67;14.22;340;12;absorbance, bluewash, dispense-destination, echo_dest, envision, fluorescence, image_plate, incubate, luminescence, magnetic_transfer_pcr, maxiprep_source, spin, stamp;low_evaporation, standard, universal;*$9.56* +96-flat-black-black-fluotrac-600;Greiner;655077;96-Well F-Bottom Black Fluotrac High-Binding Microplate;-;96;10.9;14.22;340;12;absorbance, bluewash, cover, deseal, dispense-destination, envision, fluorescence, gel_purify, gel_separate, incubate, luminescence, pipette, seal, spin, stamp;low_evaporation, standard, universal, ultra-clear;*$2.46* +vendor-tube;not_applicable;not_applicable;Vendor tube;-;1;0;-;999999999;1;;screw-cap;*$0.00* +conical-15;Greiner;188261;15mL Conical;-;1;0;-;15000;1;cover, dispense-source, incubate, provision, spin, transfer, uncover;screw-cap;*$0.75* +micro-2.0;E&K Scientific;280200;2mL Microcentrifuge tube;-;1;37.5;-;2200;1;flash_freeze, incubate, maxiprep_destination, miniprep_destination, sanger_sequence_primer, spin, spin;;*$0.06* +mrv-small;unknown;unknown;Small MRV;-;1;82.25;83.35;2000;1;agitate, cover, dispense, evaporate, image, incubate, liquid_handle, measure_mass, provision, spe, spin, uncover;screw-cap;*$1.19* +6-flat-tc;Eppendorf;30720113;6-Well TC Treated Sterile Plate;-;6;16.5;19;5000;3;colonize, dispense-destination, envision, image_plate, incubate;standard, universal;*$4.82* +hplc-vial;unknown;unknown;HPLC Vial;-;1;31.4;33.73;2000;1;agitate, cover, dispense, evaporate, image, incubate, lcms, liquid_handle, measure_mass, provision, spe, spin, uncover;screw-cap;*$1.19* +96-ubottom-clear-tc;Corning;353077;Falcon 96-Well, Cell Culture-Treated, U-Shaped-Bottom Microplate;-;96;10.59;14.6;320;12;cover, dispense-destination, incubate, pipette, provision, seal, spin, stamp, uncover, unseal;low_evaporation, standard, universal, ultra-clear, foil;*$0.00* +96-deep-kf;Fisher;22-387-031;96-Well KingFisher Deepwell Plate V-bottom Polypropylene;-;96;42.3;44;1000;12;cover, deseal, dispense-destination, image_plate, incubate, magnetic_transfer_deep, pipette, seal, spin, stamp, uncover;standard;*$9.82* +384-flat-white-white-tc;Corning;3570;384-Well Low Flange White Flat Bottom Polystyrene TC-Treated Microplate;-;384;11.43;14.22;80;24;absorbance, cover, dispense-destination, echo_dest, envision, fluorescence, image_plate, incubate, luminescence, pipette, spin, stamp, uncover;standard, universal;*$9.58* +tube-15;Greiner;188261;15 mL centrifuge tube;2/27/2018;1;0;-;2200;1;spin;;*$0.00* +bottle-500;not_applicable;not_applicable;500mL Bottle;-;1;0;-;500000;1;cover, dispense-source, incubate, provision, spin, transfer, uncover;screw-cap;*$1.13* +96-pcr;Eppendorf;951020619;96-Well twin.tec PCR Plate;-;96;14.6;15.9;160;12;bluewash, dispense-destination, echo_dest, envision, flash_freeze, image_plate, incubate, magnetic_separate, magnetic_transfer_pcr, miniprep_destination, qrt_thermocycle, sanger_sequence, seal, spin, stamp, thermocycle;ultra-clear, foil, breathable, low_evaporation;*$4.93* +micro-1.5;USA Scientific;1615-5500;1.5mL Microcentrifuge tube;-;1;36;-;1650;1;flash_freeze, incubate, maxiprep_destination, miniprep_destination, sanger_sequence_primer, spin, spin;;*$0.06* +384-round-clear-clear;Corning;3657;384-Well Clear Round Bottom Polypropylene Not Treated Microplate;-;384;11.57;14.22;70;24;cover, deseal, dispense-destination, echo_dest, envision, image_plate, incubate, luminescence, pipette, seal, spin, stamp, uncover;universal, standard, ultra-clear, foil;*$5.65* +6-flat;Eppendorf;30720016;6-Well Non-Treated Sterile Plate;-;6;16.5;19;5000;3;colonize, dispense-destination, envision, image_plate, incubate;standard, universal;*$4.50* +mrv-medium;unknown;unknown;Medium MRV;-;1;81.5;83.5;5000;1;agitate, cover, dispense, evaporate, image, incubate, liquid_handle, measure_mass, provision, spe, spin, uncover;screw-cap;*$1.19* +384-flat-white-white-proxiplate-plus;PerkinElmer;6008280;384-well flat-bottom polystyrene proximity plus plate;-;384;5.3;14.35;28;24;cover, dispense, dispense-destination, echo_dest, envision, flash_freeze, fluorescence, image_plate, incubate, liquid_handle, luminescence, pipette, seal, spin, stamp, uncover, unseal;universal, ultra-clear, foil;*$9.69* +96-well-v-bottom;Corning;3894;96-well cell culture multiple well plate, V bottom;-;96;10.668;3.25;200;12;absorbance, cover, dispense, dispense-destination, echo_dest, envision, fluorescence, image_plate, incubate, liquid_handle, seal, spectrophotometry, spin, uncover, unseal;standard, universal, low_evaporation, ultra-clear, foil;*$0.00* +flask-250;not_applicable;not_applicable;250mL Flask;-;1;0;-;250000;1;cover, dispense-source, incubate, maxiprep_source, provision, seal, spin, transfer, uncover;screw-cap;*$1.19* +384-flat-white-clear;Corning;3763;384-well flat-bottom polystyrene plate;-;384;11.56;14.22;90;24;absorbance, bluewash, cover, dispense, dispense-destination, echo_dest, envision, fluorescence, gel_purify, gel_separate, incubate, luminescence, pipette, seal, spin, stamp, uncover, unseal;standard, universal, ultra-clear;*$13.73* +96-flat-clear-clear-tc;Eppendorf;30730119;96-Well Flat TC-Treated Polystyrene Microplate;-;96;11.3;14.4;340;12;cover, dispense-destination, envision, gel_purify, gel_separate, incubate, pipette, spin, stamp;low_evaporation, standard, universal;*$3.11* +res-sw384-lp;Axygen;res-sw384-lp;1-Well Reagent Reservoir with 384-Bottom Troughs, Low Profile;-;1;11.96;19.05;92000;1;cover, dispense, incubate, liquid_handle, pipette, stamp;universal;*$10.15* +res-mw8-hp;Axygen;res-mw8-hp;Multiple Well Reagent Reservoir with 8-Channel Trough, High Profile;-;8;39.1;43.8;32000;1;cover, dispense-destination, incubate, liquid_handle, uncover;universal;*$8.35* +384-ubottom-clear-polypropylene-nunc-264573;ThermoFisher;264573;Nunc 384-Well Polypropylene U-Bottom Natural Color Storage Microplate;-;384;11.7;14.4;120;24;absorbance, cover, dispense, dispense-destination, echo_dest, envision, fluorescence, image_plate, incubate, liquid_handle, luminescence, pipette, provision, seal, spectrophotometry, spin, uncover, unseal;standard, universal, low_evaporation, ultra-clear, foil;*$9.95* +384-echo-ldv;Labcyte;LP-0200;384-well Echo low dead volume plate;-;384;5.1;10.48;14;24;absorbance, bluewash, colonize, cover, dispense, echo_dest, echo_source, flash_freeze, fluorescence, image_plate, incubate, luminescence, magnetic_separate, magnetic_transfer_deep, magnetic_transfer_pcr, maxiprep_destination, maxiprep_source, miniprep_destination, miniprep_source, pipette, qrt_thermocycle, sanger_sequence, sanger_sequence_primer, seal, spin, stamp, thermocycle, uncover;universal, foil, ultra-clear;*$16.28* +384-round-black-black-lv-nbs;Corning;4514;Corning 4514 384-well Low Volume Black Round Bottom Polystyrene NBS Microplate;-;384;6.58;14.22;35;24;cover, deseal, dispense, dispense-destination, echo_dest, envision, flash_freeze, fluorescence, image_plate, incubate, liquid_handle, luminescence, pipette, seal, spin, stamp, uncover;universal, foil, ultra-clear;*$17.85* +1-flat;Fisher;267060;1-Well Nunc Non-treated Flat Bottom Plate;-;1;11.6;17.3;90000;1;colonize, envision, image_plate, incubate;universal;*$5.60* +96-vbottom-microwell;Fisher;249944;96 vbottom microwell lcms plate;-;96;10.5;14.7;400;12;absorbance, agitate, cover, dispense, dispense-destination, echo_dest, envision, evaporate, fluorescence, image, image_plate, incubate, lcms, liquid_handle, provision, seal, spectrophotometry, spin, uncover, unseal;standard, universal, ultra-clear, foil, breathable, low_evaporation;*$0.00* +384-flat-black-black-proxiplate-plus-f;PerkinElmer;6008260;384-well black flat-bottom polystyrene proximity plus plate;-;384;5.3;14.35;28;24;cover, deseal, dispense, dispense-destination, echo_dest, envision, flash_freeze, fluorescence, image_plate, incubate, liquid_handle, luminescence, pipette, seal, spin, stamp, uncover, unseal;universal, ultra-clear, foil;*$10.15* +384-flat;Corning;3706;384-Well Clear Bottom White Polystyrene Microplate;-;384;11.43;14.22;90;24;absorbance, bluewash, dispense-destination, echo_dest, envision, fluorescence, image_plate, incubate, luminescence, spin, stamp;standard, universal;*$13.73* +24-deep;E&K Scientific;EK-2053-S;24-Well Pyramid Bottom Plate;-;24;42;44.04;10000;6;deseal, dispense-destination, image_plate, incubate, seal;foil, breathable;*$9.23* +384-flat-clear-clear;Corning;3700;384-Well Clear Flat Bottom Polystyrene High Bind Microplate;-;384;11.43;14.2;80;24;absorbance, bluewash, cover, dispense-destination, envision, flash_freeze, fluorescence, image_plate, incubate, luminescence, pipette, seal, spin, stamp, uncover;standard, universal, low_evaporation, ultra-clear, foil;*$8.22* +chemspeed-sealed-pin;Chemspeed;unknown;Chemspeed Pin;-;1;32;32;9000;1;provision;;*$0.00* +384-v-clear-clear;Greiner;781280;384-Well PP V-Bottom Microplate;-;384;11.5;14.4;120;24;cover, deseal, dispense-destination, echo_dest, envision, image_plate, incubate, luminescence, pipette, seal, spin, stamp, uncover;universal, standard, ultra-clear, foil;*$7.93* +1536-tc-white-corning-3727;Corning;3727;1536 well Corning white TC treated HiBase;-;1536;4.8;10.4;12.5;48;absorbance, cover, dispense, dispense-destination, echo_dest, envision, fluorescence, image_plate, incubate, liquid_handle, luminescence, pipette, provision, seal, spectrophotometry, spin, uncover, unseal;standard, universal, low_evaporation, ultra-clear, foil;*$0.00* +1536-white-tc;Greiner;782073;1536 Greiner White TC-treated HiBase;-;1536;5;10.4;10;48;absorbance, cover, dispense, dispense-destination, echo_dest, envision, fluorescence, image_plate, incubate, liquid_handle, luminescence, pipette, provision, seal, spectrophotometry, spin, uncover, unseal;standard, universal, low_evaporation, ultra-clear, foil;*$0.00* +a1-vial;Tradewinds;unknown;A1 vial;-;1;41.7;42;3500;1;cover, evaporate, incubate, liquid_handle, measure_mass, provision, uncover;screw-cap;*$0.00* +96-deep;Corning;3961;96-Well Clear V-Bottom Polypropylene Deep Well Plate;-;96;42.03;43.8;2000;12;deseal, dispense-destination, flash_freeze, image_plate, incubate, magnetic_separate, magnetic_transfer_deep, maxiprep_destination, maxiprep_source, miniprep_source, seal, spin, stamp;standard, universal, breathable;*$9.94* +d2-vial;unknown;unknown;HRD2 Vial;-;1;90.5;95.3;40000;1;agitate, cover, dispense, elution-dest, evaporate, image, incubate, lcms, liquid_handle, measure_mass, provision, spe, spin, uncover;screw-cap;*$1.19* +res-mw12-hp;Axygen;res-mw12-hp;Multiple Well Reagent Reservoir with 12-Channel Trough, High Profile;-;12;39.3;44.04;21000;12;cover, dispense-destination, incubate, liquid_handle, uncover;universal;*$8.35* +flask-25;not_applicable;not_applicable;25mL Flask;-;1;0;-;25000;1;cover, dispense-source, incubate, provision, seal, spin, transfer, uncover;screw-cap;*$0.89* +384-ubottom-white-tc;Sumitomo Bakelite Co.;MS-9384WZ;Sumitomo Bakelite Co. PrimeSurface384U White Plate 3-D Cell Culture Plate;-;384;12;14.4;100;24;absorbance, agitate, cover, deseal, dispense, dispense-destination, echo_dest, echo_source, fluorescence, image, image_plate, incubate, liquid_handle, luminescence, pipette, provision, seal, spectrophotometry, spin, stamp, thermocycle, transfer, uncover;breathable, foil, low_evaporation, ultra-clear, universal, standard;*$0.00* +d1-vial;Tradewinds;unknown;D1 vial;-;1;62.4;63;25900;1;agitate, cover, dispense, elution-dest, evaporate, image, incubate, lcms, liquid_handle, measure_mass, provision, spe, spin, uncover;screw-cap;*$0.00* +mrv-large;unknown;unknown;Large MRV;-;1;81.25;83;20000;1;agitate, cover, dispense, evaporate, image, incubate, liquid_handle, measure_mass, provision, spe, spin, uncover;screw-cap;*$1.19* diff --git a/owl/.gitattributes b/owl/.gitattributes deleted file mode 100644 index 33079b0..0000000 --- a/owl/.gitattributes +++ /dev/null @@ -1,2 +0,0 @@ -Strateos[[:space:]]containers.xlsx filter=lfs diff=lfs merge=lfs -text -BBN[[:space:]]Containers.xlsx filter=lfs diff=lfs merge=lfs -text diff --git a/owl/.gitignore b/owl/.gitignore deleted file mode 100644 index 595e8da..0000000 --- a/owl/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -server-files -server.log diff --git a/owl/BBN Containers.xlsx b/owl/BBN Containers.xlsx deleted file mode 100644 index de5e0df..0000000 --- a/owl/BBN Containers.xlsx +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:aa8cb8843f3db8f560b9823e2ed2b551bb8e248753415c540629bd7f9b81de64 -size 13711 diff --git a/owl/Makefile b/owl/Makefile deleted file mode 100644 index 08edf07..0000000 --- a/owl/Makefile +++ /dev/null @@ -1,29 +0,0 @@ -HOST_PORT ?= 8080 - -GIT_BRANCH := $(shell git rev-parse --abbrev-ref HEAD) - -# Previously, this was based on git branch, but that was not tenable -URL_PREFIX = https://raw.githubusercontent.com/rpgoldman/container-ontology/main/owl -FILE_PREFIX = /srv/owl - -turtle_files = container-ontology.ttl om-subset.omn strateos-catalog.ttl bbn-plate-catalog.ttl all-catalogs.ttl sbolowl3.rdf - -catalog_file = catalog-v001.xml - -server_catalog_file = owlery-catalog.xml - -DOCKER_IMAGE ?= phenoscape/owlery # was rpgoldman/owlery - -makeFileDir := $(dir $(abspath $(lastword $(MAKEFILE_LIST)))) - -# -Dorg.slf4j.simpleLogger.logFile=/srv/owlery.log -JAVA_ARGS := '-Dorg.slf4j.simpleLogger.defaultLogLevel=DEBUG -Dlogback.configurationFile=/srv/conf/logback.xml -Dconfig.file=/srv/conf/application.conf' # -Dlog4j.configurationFile=/srv/conf/log4j.xml" - -.PHONY: server - -server: ${server_catalog_file} - mkdir -p $(makeFileDir)server-files - cp $(turtle_files) $(makeFileDir)server-files - cp $(server_catalog_file) $(makeFileDir)server-files - rm -f $(makeFileDir)server-files/.DS_Store - docker run --rm --env JAVA_OPTS=$(JAVA_ARGS) -p $(HOST_PORT):8080 -v $(makeFileDir)/server-files:/srv/owl -v $(makeFileDir)owlery-conf:/srv/conf $(DOCKER_IMAGE):latest 2>&1 | tee server.log diff --git a/owl/Strateos containers.xlsx b/owl/Strateos containers.xlsx deleted file mode 100644 index 761e40e..0000000 --- a/owl/Strateos containers.xlsx +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:e7f330b082fee913d24d68b250e166f9a92e5930860e109131cc86323277949c -size 18526 diff --git a/owl/all-catalogs.ttl b/owl/all-catalogs.ttl deleted file mode 100644 index 4527a78..0000000 --- a/owl/all-catalogs.ttl +++ /dev/null @@ -1,24 +0,0 @@ -@prefix : . -@prefix owl: . -@prefix rdf: . -@prefix xml: . -@prefix xsd: . -@prefix rdfs: . -@base . - - rdf:type owl:Ontology ; - owl:imports , - , - , - ; - rdfs:label "Set of plate catalogs"@en . - -################################################################# -# Object Properties -################################################################# - -### https://sift.net/container-ontology/container-ontology#hasWellBottomShape - rdf:type owl:FunctionalProperty . - - -### Generated by the OWL API (version 4.5.9.2019-02-01T07:24:44Z) https://github.com/owlcs/owlapi diff --git a/owl/bbn-plate-catalog.ttl b/owl/bbn-plate-catalog.ttl deleted file mode 100644 index 07901f0..0000000 --- a/owl/bbn-plate-catalog.ttl +++ /dev/null @@ -1,158 +0,0 @@ -@prefix : . -@prefix om: . -@prefix owl: . -@prefix rdf: . -@prefix xml: . -@prefix xsd: . -@prefix cont: . -@prefix rdfs: . -@base . - - rdf:type owl:Ontology ; - owl:imports , - ; - rdfs:label "BBN Plate catalog"@en . - -################################################################# -# Object Properties -################################################################# - -### https://sift.net/container-ontology/container-ontology.ttl#wellVolume -cont:wellVolume rdfs:domain cont:Container . - - -################################################################# -# Classes -################################################################# - -### https://sift.net/container-ontology/bbn-plate-catalog#CorningCatalogEntry -:CorningCatalogEntry rdf:type owl:Class ; - rdfs:subClassOf cont:CatalogEntry , - [ rdf:type owl:Restriction ; - owl:onProperty cont:hasVendorFirm ; - owl:hasValue :Corning - ] . - - -### https://sift.net/container-ontology/bbn-plate-catalog#MRLabPlate -:MRLabPlate rdf:type owl:Class ; - rdfs:subClassOf cont:Plate , - [ rdf:type owl:Restriction ; - owl:onProperty cont:availableAt ; - owl:hasValue :miles-rogers-lab-bbn - ] . - - -### https://sift.net/container-ontology/bbn-plate-catalog#NESTCatalogEntry -:NESTCatalogEntry rdf:type owl:Class ; - rdfs:subClassOf cont:CatalogEntry , - [ rdf:type owl:Restriction ; - owl:onProperty cont:hasVendorFirm ; - owl:hasValue :NEST - ] . - - -################################################################# -# Individuals -################################################################# - -### https://sift.net/container-ontology/bbn-plate-catalog#Corning -:Corning rdf:type owl:NamedIndividual , - cont:VendorFirm ; - cont:vendorName "Corning" . - - -### https://sift.net/container-ontology/bbn-plate-catalog#Corning_96_well_black_clear_bottom_plates -:Corning_96_well_black_clear_bottom_plates rdf:type owl:NamedIndividual , - :MRLabPlate , - cont:ClearPlate , - cont:SLAS_4-2004_96_Well_Plate ; - cont:hasCatalogEntry :ce-corning-3340 ; - cont:hasWellBottomShape cont:flatBottom ; - cont:height :corning-33xx-height ; - cont:wellVolume :corning-3340-well-volume . - - -### https://sift.net/container-ontology/bbn-plate-catalog#Corning_96_well_clear_plates -:Corning_96_well_clear_plates rdf:type owl:NamedIndividual , - :MRLabPlate , - cont:ClearPlate , - cont:SLAS_4-2004_96_Well_Plate ; - cont:hasCatalogEntry :ce-corning-3300 ; - cont:hasWellBottomShape cont:flatBottom ; - cont:height :corning-33xx-height . - - -### https://sift.net/container-ontology/bbn-plate-catalog#NEST -:NEST rdf:type owl:NamedIndividual , - cont:VendorFirm ; - cont:vendorName "NEST Scientific" ; - rdfs:label "NEST Scientific" . - - -### https://sift.net/container-ontology/bbn-plate-catalog#NEST_0.1_mL_96-Well_PCR_Plate_Full_Skirt -:NEST_0.1_mL_96-Well_PCR_Plate_Full_Skirt rdf:type owl:NamedIndividual , - :MRLabPlate , - cont:ClearPlate , - cont:SLAS_4-2004_96_Well_Plate ; - cont:hasCatalogEntry :ce-nest-402501 ; - cont:hasWellBottomShape cont:veeBottom ; - cont:plateHeight :nest-pcr-plate-height ; - cont:wellVolume :nest-505102-well-volume ; - rdfs:label "NEST 0.1 mL 96-Well PCR Plate Full Skirt" . - - -### https://sift.net/container-ontology/bbn-plate-catalog#ce-corning-3300 -:ce-corning-3300 rdf:type owl:NamedIndividual , - :CorningCatalogEntry ; - cont:catalogNumber "3300" . - - -### https://sift.net/container-ontology/bbn-plate-catalog#ce-corning-3340 -:ce-corning-3340 rdf:type owl:NamedIndividual , - :CorningCatalogEntry ; - cont:catalogNumber "3340" . - - -### https://sift.net/container-ontology/bbn-plate-catalog#ce-nest-402501 -:ce-nest-402501 rdf:type owl:NamedIndividual , - :NESTCatalogEntry ; - cont:catalogNumber "402501" . - - -### https://sift.net/container-ontology/bbn-plate-catalog#corning-3340-well-volume -:corning-3340-well-volume rdf:type owl:NamedIndividual , - om:Volume ; - om:hasUnit om:microlitre ; - cont:hasCatalogEntry :ce-corning-3340 ; - om:hasNumericalValue "360"^^xsd:int . - - -### https://sift.net/container-ontology/bbn-plate-catalog#corning-33xx-height -:corning-33xx-height rdf:type owl:NamedIndividual , - om:Height ; - om:hasUnit om:millimetre ; - om:hasNumericalValue "16.51"^^xsd:decimal . - - -### https://sift.net/container-ontology/bbn-plate-catalog#miles-rogers-lab-bbn -:miles-rogers-lab-bbn rdf:type owl:NamedIndividual , - cont:Lab ; - rdfs:label "Miles Rogers's lab at BBN" . - - -### https://sift.net/container-ontology/bbn-plate-catalog#nest-505102-well-volume -:nest-505102-well-volume rdf:type owl:NamedIndividual , - om:Measure ; - om:hasUnit om:microlitre ; - om:hasNumericalValue "200"^^xsd:int . - - -### https://sift.net/container-ontology/bbn-plate-catalog#nest-pcr-plate-height -:nest-pcr-plate-height rdf:type owl:NamedIndividual , - om:Measure ; - om:hasUnit om:millimetre ; - om:hasNumericalValue "22.862"^^xsd:decimal . - - -### Generated by the OWL API (version 4.5.9.2019-02-01T07:24:44Z) https://github.com/owlcs/owlapi diff --git a/owl/catalog-v001.m4 b/owl/catalog-v001.m4 deleted file mode 100644 index c110d20..0000000 --- a/owl/catalog-v001.m4 +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/owl/catalog-v001.xml b/owl/catalog-v001.xml deleted file mode 100644 index 6fef15f..0000000 --- a/owl/catalog-v001.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - diff --git a/owl/container-ontology.ttl b/owl/container-ontology.ttl deleted file mode 100644 index 4507e72..0000000 --- a/owl/container-ontology.ttl +++ /dev/null @@ -1,1310 +0,0 @@ -@prefix : . -@prefix om: . -@prefix owl: . -@prefix rdf: . -@prefix xml: . -@prefix xsd: . -@prefix cont: . -@prefix rdfs: . -@prefix sbol: . -@base . - - rdf:type owl:Ontology ; - owl:imports , - ; - om:abbreviation "cont:" ; - rdfs:label "Container Ontology"@en . - -################################################################# -# Annotation properties -################################################################# - -### http://www.ontology-of-units-of-measure.org/resource/om-2/abbreviation -om:abbreviation rdf:type owl:AnnotationProperty . - - -################################################################# -# Object Properties -################################################################# - -### http://www.ontology-of-units-of-measure.org/resource/om-2/hasQuantity -om:hasQuantity rdf:type owl:ObjectProperty . - - -### https://sift.net/container-ontology/container-ontology#availableAt -cont:availableAt rdf:type owl:ObjectProperty ; - rdfs:domain cont:LabEquipment ; - rdfs:range cont:Lab . - - -### https://sift.net/container-ontology/container-ontology#catalogEntryOf -cont:catalogEntryOf rdf:type owl:ObjectProperty ; - owl:inverseOf cont:hasCatalogEntry ; - rdfs:domain cont:CatalogEntry ; - rdfs:range cont:LabEquipment . - - -### https://sift.net/container-ontology/container-ontology#centrifugeResistance -cont:centrifugeResistance rdf:type owl:ObjectProperty ; - rdfs:domain cont:Container ; - rdfs:range [ owl:intersectionOf ( om:Measure - [ rdf:type owl:Restriction ; - owl:onProperty cont:measureType ; - owl:allValuesFrom om:Force - ] - ) ; - rdf:type owl:Class - ] ; - rdfs:comment "What is the maximum force the container can (or must) resist (for the assay/protocol if this is defined there)."^^xsd:string ; - rdfs:label "centrifugeResistance" . - - -### https://sift.net/container-ontology/container-ontology#clearanceToPlateBottom -cont:clearanceToPlateBottom rdf:type owl:ObjectProperty ; - rdfs:subPropertyOf cont:height ; - rdfs:comment "The minimum clearance from the resting plane to the plane of the bottom external surface of the wells."@en ; - rdfs:label "clearanceToPlateBottom" . - - -### https://sift.net/container-ontology/container-ontology#coating -cont:coating rdf:type owl:ObjectProperty ; - rdfs:subPropertyOf owl:topObjectProperty ; - rdfs:domain cont:Container ; - rdfs:range cont:CoatingMaterial ; - rdfs:label "coating" . - - -### https://sift.net/container-ontology/container-ontology#columnLabels -cont:columnLabels rdf:type owl:ObjectProperty , - owl:FunctionalProperty ; - rdfs:domain cont:Plate ; - rdfs:comment "A sequence listing the labels assigned to the wells in each column."@en ; - rdfs:label "column labels"@en . - - -### https://sift.net/container-ontology/container-ontology#compatibleCentrifuges -cont:compatibleCentrifuges rdf:type owl:ObjectProperty ; - rdfs:subPropertyOf cont:compatibleLabEquipment ; - rdfs:domain cont:Container ; - rdfs:comment "Centrifuge TYPES with which this container is compatible."^^xsd:string ; - rdfs:label "compatibleCentrifuges" . - - -### https://sift.net/container-ontology/container-ontology#compatibleLabEquipment -cont:compatibleLabEquipment rdf:type owl:ObjectProperty ; - rdfs:label "compatibleLabEquipment" . - - -### https://sift.net/container-ontology/container-ontology#compatiblePlateReaders -cont:compatiblePlateReaders rdf:type owl:ObjectProperty ; - rdfs:subPropertyOf cont:compatibleLabEquipment ; - rdfs:label "compatiblePlateReaders" . - - -### https://sift.net/container-ontology/container-ontology#cornerRadius -cont:cornerRadius rdf:type owl:ObjectProperty ; - rdfs:subPropertyOf cont:geometricProperty ; - rdfs:label "cornerRadius" . - - -### https://sift.net/container-ontology/container-ontology#diameter -cont:diameter rdf:type owl:ObjectProperty ; - rdfs:subPropertyOf cont:geometricProperty ; - rdfs:range om:Measure , - [ rdf:type owl:Restriction ; - owl:onProperty om:hasQuantity ; - owl:allValuesFrom om:Diameter - ] ; - rdfs:label "diameter" . - - -### https://sift.net/container-ontology/container-ontology#equipmentVendor -cont:equipmentVendor rdf:type owl:ObjectProperty ; - rdfs:domain cont:LabEquipment ; - rdfs:range cont:VendorFirm . - - -### https://sift.net/container-ontology/container-ontology#geometricProperty -cont:geometricProperty rdf:type owl:ObjectProperty ; - rdfs:domain cont:Container ; - rdfs:range om:Measure ; - rdfs:label "geometricProperty" . - - -### https://sift.net/container-ontology/container-ontology#hasCatalogEntry -cont:hasCatalogEntry rdf:type owl:ObjectProperty ; - rdfs:subPropertyOf owl:topObjectProperty ; - rdfs:domain cont:LabEquipment ; - rdfs:range cont:CatalogEntry ; - rdfs:label "hasCatalogEntry" . - - -### https://sift.net/container-ontology/container-ontology#hasColor -cont:hasColor rdf:type owl:ObjectProperty ; - rdfs:subPropertyOf cont:qualitativeProperty ; - rdfs:range cont:Color . - - -### https://sift.net/container-ontology/container-ontology#hasVendorFirm -cont:hasVendorFirm rdf:type owl:ObjectProperty ; - rdfs:subPropertyOf owl:topObjectProperty ; - rdfs:domain cont:CatalogEntry ; - rdfs:range cont:VendorFirm ; - rdfs:label "hasVendorFirm" . - - -### https://sift.net/container-ontology/container-ontology#hasWellBottomShape -cont:hasWellBottomShape rdf:type owl:ObjectProperty ; - rdfs:subPropertyOf cont:qualitativeProperty ; - rdf:type owl:FunctionalProperty ; - rdfs:label "hasWellBottomShape"^^xsd:string . - - -### https://sift.net/container-ontology/container-ontology#height -cont:height rdf:type owl:ObjectProperty ; - rdfs:subPropertyOf cont:geometricProperty ; - rdfs:range [ owl:intersectionOf ( om:Measure - [ rdf:type owl:Restriction ; - owl:onProperty cont:measureType ; - owl:allValuesFrom om:Height - ] - ) ; - rdf:type owl:Class - ] ; - rdfs:label "height" . - - -### https://sift.net/container-ontology/container-ontology#length -cont:length rdf:type owl:ObjectProperty ; - rdfs:subPropertyOf cont:geometricProperty ; - rdfs:label "length" . - - -### https://sift.net/container-ontology/container-ontology#lengthAtEdge -cont:lengthAtEdge rdf:type owl:ObjectProperty ; - rdfs:subPropertyOf cont:length ; - rdfs:comment """ANSI SLAS spec 1.2004 (plate footprint spec) specifies different tolerances for the length within 12.7mm of the edge and in general, the former being tighter than the latter. - -This property is for the length within 12.7 mm of the edge; the other property is lengthOverall.""" ; - rdfs:label "lengthAtEdge" . - - -### https://sift.net/container-ontology/container-ontology#lengthOverall -cont:lengthOverall rdf:type owl:ObjectProperty ; - rdfs:subPropertyOf cont:length ; - rdfs:comment """ANSI SLAS spec 1.2004 (plate footprint spec) specifies different tolerances for the length within 12.7mm of the edge and in general, the former being tighter than the latter. - -This property is for the length anywhere on the plate (the more permissive constraint); the other property is lengthAtEdge."""@en ; - rdfs:label "lengthOverall" . - - -### https://sift.net/container-ontology/container-ontology#measureType -cont:measureType rdf:type owl:ObjectProperty ; - rdfs:domain om:Measure ; - rdfs:range om:Quantity ; - rdfs:label "measureType" . - - -### https://sift.net/container-ontology/container-ontology#overallPlateHeight -cont:overallPlateHeight rdf:type owl:ObjectProperty ; - rdfs:subPropertyOf cont:height ; - owl:propertyDisjointWith cont:plateHeight ; - rdfs:comment "The overall plate height, measured from ... the resting plane ... to the maximum protrusion of the plate."@en ; - rdfs:label "overallPlateHeight" . - - -### https://sift.net/container-ontology/container-ontology#plateHeight -cont:plateHeight rdf:type owl:ObjectProperty ; - rdfs:subPropertyOf cont:height ; - rdfs:domain cont:Plate ; - rdfs:comment "The plate height measured from ... the resting plane... to the maximum protrusion of the perimeter wells."@en ; - rdfs:label "plateHeight" . - - -### https://sift.net/container-ontology/container-ontology#qualitativeProperty -cont:qualitativeProperty rdf:type owl:ObjectProperty ; - rdfs:domain cont:Container . - - -### https://sift.net/container-ontology/container-ontology#rowLabels -cont:rowLabels rdf:type owl:ObjectProperty , - owl:FunctionalProperty ; - rdfs:domain cont:Plate ; - rdfs:comment "A sequence listing the labels assigned to the wells in each row."@en ; - rdfs:label "row labels"@en . - - -### https://sift.net/container-ontology/container-ontology#wellDepth -cont:wellDepth rdf:type owl:ObjectProperty ; - rdfs:subPropertyOf cont:geometricProperty ; - rdf:type owl:FunctionalProperty ; - rdfs:domain cont:Container ; - rdfs:range [ owl:intersectionOf ( om:Measure - [ rdf:type owl:Restriction ; - owl:onProperty cont:measureType ; - owl:hasValue om:Depth - ] - ) ; - rdf:type owl:Class - ] ; - rdfs:label "wellDepth" . - - -### https://sift.net/container-ontology/container-ontology#wellVolume -cont:wellVolume rdf:type owl:ObjectProperty ; - rdfs:subPropertyOf cont:geometricProperty ; - rdfs:label "wellVolume" . - - -### https://sift.net/container-ontology/container-ontology#width -cont:width rdf:type owl:ObjectProperty ; - rdfs:subPropertyOf cont:geometricProperty ; - rdfs:label "width" . - - -################################################################# -# Data properties -################################################################# - -### http://www.ontology-of-units-of-measure.org/resource/om-2/hasNumericalValue -om:hasNumericalValue rdfs:range xsd:decimal . - - -### https://sift.net/container-ontology/container-ontology#catalogNumber -cont:catalogNumber rdf:type owl:DatatypeProperty ; - rdfs:subPropertyOf owl:topDataProperty ; - rdfs:domain cont:CatalogEntry ; - rdfs:range xsd:string ; - rdfs:label "catalogNumber" . - - -### https://sift.net/container-ontology/container-ontology#colorName -cont:colorName rdf:type owl:DatatypeProperty ; - rdfs:domain cont:Color ; - rdfs:range xsd:string . - - -### https://sift.net/container-ontology/container-ontology#columnCount -cont:columnCount rdf:type owl:DatatypeProperty ; - rdfs:subPropertyOf cont:containerDataProperty ; - rdf:type owl:FunctionalProperty ; - rdfs:domain cont:Plate ; - rdfs:range xsd:positiveInteger ; - rdfs:label "columnCount" . - - -### https://sift.net/container-ontology/container-ontology#containerDataProperty -cont:containerDataProperty rdf:type owl:DatatypeProperty ; - rdfs:domain cont:Container ; - rdfs:label "containerDataProperty" . - - -### https://sift.net/container-ontology/container-ontology#isOpticallyTransparent -cont:isOpticallyTransparent rdf:type owl:DatatypeProperty ; - rdfs:subPropertyOf cont:containerDataProperty ; - rdfs:domain cont:Container ; - rdfs:range xsd:boolean ; - rdfs:label "isOpticallyTransparent" . - - -### https://sift.net/container-ontology/container-ontology#isSLAS1-2004compliant -cont:isSLAS1-2004compliant rdf:type owl:DatatypeProperty ; - rdfs:subPropertyOf cont:containerDataProperty ; - rdfs:range xsd:boolean ; - rdfs:label "isSLAS1-2004compliant" . - - -### https://sift.net/container-ontology/container-ontology#isStackable -cont:isStackable rdf:type owl:DatatypeProperty ; - rdfs:subPropertyOf cont:containerDataProperty ; - rdfs:range xsd:boolean . - - -### https://sift.net/container-ontology/container-ontology#labName -cont:labName rdf:type owl:DatatypeProperty , - owl:FunctionalProperty ; - rdfs:domain cont:Lab ; - rdfs:range xsd:string . - - -### https://sift.net/container-ontology/container-ontology#rowCount -cont:rowCount rdf:type owl:DatatypeProperty ; - rdfs:subPropertyOf cont:containerDataProperty ; - rdf:type owl:FunctionalProperty ; - rdfs:domain cont:Plate ; - rdfs:range xsd:positiveInteger . - - -### https://sift.net/container-ontology/container-ontology#vendorName -cont:vendorName rdf:type owl:DatatypeProperty ; - rdfs:domain [ rdf:type owl:Class ; - owl:unionOf ( cont:LabEquipment - cont:VendorFirm - ) - ] ; - rdfs:range xsd:string . - - -### https://sift.net/container-ontology/container-ontology#wellCount -cont:wellCount rdf:type owl:DatatypeProperty ; - rdfs:subPropertyOf cont:containerDataProperty ; - rdf:type owl:FunctionalProperty ; - rdfs:domain cont:Plate ; - rdfs:range xsd:positiveInteger . - - -################################################################# -# Classes -################################################################# - -### http://purl.obolibrary.org/obo/NCIT_C96142 - rdf:type owl:Class ; - owl:equivalentClass cont:Plate ; - rdfs:subClassOf ; - rdfs:comment """Microwell plate. - -A flat dish type device with multiple wells for testing cellular material. - -Small volume multi-chambered plate (e.g. 96 well).""" ; - rdfs:label "Microwell plate" . - - -### http://www.ontology-of-units-of-measure.org/resource/om-2/Force -om:Force rdf:type owl:Class . - - -### http://www.ontology-of-units-of-measure.org/resource/om-2/Measure -om:Measure rdfs:subClassOf [ owl:intersectionOf ( [ rdf:type owl:Restriction ; - owl:onProperty om:hasDimension ; - owl:minCardinality "1"^^xsd:nonNegativeInteger - ] - [ rdf:type owl:Restriction ; - owl:onProperty om:hasDimension ; - owl:maxCardinality "1"^^xsd:nonNegativeInteger - ] - ) ; - rdf:type owl:Class - ] , - [ rdf:type owl:Restriction ; - owl:onProperty om:hasNumericalValue ; - owl:minCardinality "1"^^xsd:nonNegativeInteger - ] , - [ rdf:type owl:Restriction ; - owl:onProperty om:hasNumericalValue ; - owl:maxCardinality "1"^^xsd:nonNegativeInteger - ] . - - -### https://identifiers.org/http://purl.obolibrary.org/obo/http://purl.obolibrary.org/obo/NCIT_C43377 - rdf:type owl:Class . - - -### https://sift.net/container-ontology/container-ontology#CatalogEntry -cont:CatalogEntry rdf:type owl:Class ; - rdfs:subClassOf cont:ContainerRoot ; - rdfs:label "CatalogEntry" . - - -### https://sift.net/container-ontology/container-ontology#Centrifuge -cont:Centrifuge rdf:type owl:Class ; - rdfs:subClassOf cont:LabMachinery . - - -### https://sift.net/container-ontology/container-ontology#Clear -cont:Clear rdf:type owl:Class ; - rdfs:subClassOf cont:Color . - - -### https://sift.net/container-ontology/container-ontology#ClearPlate -cont:ClearPlate rdf:type owl:Class ; - owl:equivalentClass [ owl:intersectionOf ( cont:Plate - [ rdf:type owl:Restriction ; - owl:onProperty cont:hasColor ; - owl:someValuesFrom cont:Clear - ] - ) ; - rdf:type owl:Class - ] ; - rdfs:subClassOf cont:Plate . - - -### https://sift.net/container-ontology/container-ontology#CoatingMaterial -cont:CoatingMaterial rdf:type owl:Class ; - rdfs:subClassOf cont:ContainerRoot ; - rdfs:label "CoatingMaterial" . - - -### https://sift.net/container-ontology/container-ontology#Color -cont:Color rdf:type owl:Class ; - rdfs:subClassOf cont:ContainerRoot ; - rdfs:comment "Enumeration class of optical properties for well plates." ; - rdfs:label "OpticalProperty" . - - -### https://sift.net/container-ontology/container-ontology#Container -cont:Container rdf:type owl:Class ; - rdfs:subClassOf cont:LabEquipment ; - rdfs:label "Container" . - - -### https://sift.net/container-ontology/container-ontology#ContainerRoot -cont:ContainerRoot rdf:type owl:Class ; - rdfs:subClassOf sbol:Identified ; - rdfs:comment "This is the root class for the classes defined in the Container Ontology. It is introduced to be the bridge between the container ontology and the SBOL Ontology. In turn, this connects to the sbol:Identified class, in order to make it possible for the container ontology classes to be translated into Python classes by the SBOL factory." ; - rdfs:label "ContainerRoot" . - - -### https://sift.net/container-ontology/container-ontology#Lab -cont:Lab rdf:type owl:Class ; - rdfs:subClassOf cont:ContainerRoot , - [ rdf:type owl:Restriction ; - owl:onProperty cont:labName ; - owl:minCardinality "1"^^xsd:nonNegativeInteger - ] ; - rdfs:comment "This Class is intended to capture a location that has containers, so that one will often be asking for a container that meets some requirements and is available at a particular Lab (or possibly a Lab that has some container meeting a requirement)."@en ; - rdfs:label "Lab" . - - -### https://sift.net/container-ontology/container-ontology#LabEquipment -cont:LabEquipment rdf:type owl:Class ; - rdfs:subClassOf cont:ContainerRoot ; - rdfs:label "LabEquipment" . - - -### https://sift.net/container-ontology/container-ontology#LabMachinery -cont:LabMachinery rdf:type owl:Class ; - rdfs:subClassOf cont:LabEquipment ; - rdfs:comment "This is likely a poor name, but it is intended to refer to items of equipment that act upon containers and/or their contents." ; - rdfs:label "LabMachinery" . - - -### https://sift.net/container-ontology/container-ontology#NotFlatWellBottom -cont:NotFlatWellBottom rdf:type owl:Class ; - owl:equivalentClass [ rdf:type owl:Class ; - owl:oneOf ( cont:roundBottom - cont:uBottom - cont:veeBottom - ) - ] ; - rdfs:subClassOf cont:ContainerRoot ; - rdfs:comment "For certain operations, it's nice to have a well whose bottom does not have corners." . - - -### https://sift.net/container-ontology/container-ontology#Opaque -cont:Opaque rdf:type owl:Class ; - rdfs:subClassOf cont:Color . - - -### https://sift.net/container-ontology/container-ontology#OpaquePlate -cont:OpaquePlate rdf:type owl:Class ; - owl:equivalentClass [ owl:intersectionOf ( cont:Plate - [ rdf:type owl:Restriction ; - owl:onProperty cont:hasColor ; - owl:someValuesFrom cont:Opaque - ] - ) ; - rdf:type owl:Class - ] ; - rdfs:subClassOf cont:Plate . - - -### https://sift.net/container-ontology/container-ontology#Plate -cont:Plate rdf:type owl:Class ; - rdfs:subClassOf cont:Container ; - owl:disjointWith cont:Well ; - rdfs:label "Plate" . - - -### https://sift.net/container-ontology/container-ontology#Plate1536Well -cont:Plate1536Well rdf:type owl:Class ; - owl:equivalentClass [ owl:intersectionOf ( cont:Plate - [ rdf:type owl:Restriction ; - owl:onProperty cont:wellCount ; - owl:hasValue 1536 - ] - ) ; - rdf:type owl:Class - ] ; - rdfs:subClassOf cont:Plate . - - -### https://sift.net/container-ontology/container-ontology#Plate384Well -cont:Plate384Well rdf:type owl:Class ; - owl:equivalentClass [ owl:intersectionOf ( cont:Plate - [ rdf:type owl:Restriction ; - owl:onProperty cont:wellCount ; - owl:hasValue 384 - ] - ) ; - rdf:type owl:Class - ] ; - rdfs:subClassOf cont:Plate . - - -### https://sift.net/container-ontology/container-ontology#Plate96Well -cont:Plate96Well rdf:type owl:Class ; - owl:equivalentClass [ owl:intersectionOf ( cont:Plate - [ rdf:type owl:Restriction ; - owl:onProperty cont:wellCount ; - owl:hasValue 96 - ] - ) ; - rdf:type owl:Class - ] ; - rdfs:subClassOf cont:Plate . - - -### https://sift.net/container-ontology/container-ontology#PlateReader -cont:PlateReader rdf:type owl:Class ; - rdfs:subClassOf cont:LabMachinery . - - -### https://sift.net/container-ontology/container-ontology#SLAS-1-2004 -cont:SLAS-1-2004 rdf:type owl:Class ; - owl:equivalentClass [ owl:intersectionOf ( [ rdf:type owl:Restriction ; - owl:onProperty cont:cornerRadius ; - owl:someValuesFrom [ owl:intersectionOf ( om:Measure - [ rdf:type owl:Restriction ; - owl:onProperty om:hasUnit ; - owl:hasValue om:millimetre - ] - [ rdf:type owl:Restriction ; - owl:onProperty om:hasNumericalValue ; - owl:allValuesFrom [ rdf:type rdfs:Datatype ; - owl:onDatatype xsd:decimal ; - owl:withRestrictions ( [ xsd:minInclusive 1.58 - ] - [ xsd:maxInclusive 4.78 - ] - ) - ] - ] - ) ; - rdf:type owl:Class - ] - ] - [ rdf:type owl:Restriction ; - owl:onProperty cont:length ; - owl:someValuesFrom [ owl:intersectionOf ( om:Measure - [ rdf:type owl:Restriction ; - owl:onProperty om:hasUnit ; - owl:hasValue om:millimetre - ] - [ rdf:type owl:Restriction ; - owl:onProperty om:hasNumericalValue ; - owl:allValuesFrom [ rdf:type rdfs:Datatype ; - owl:onDatatype xsd:decimal ; - owl:withRestrictions ( [ xsd:minInclusive 127.51 - ] - [ xsd:maxInclusive 128.01 - ] - ) - ] - ] - ) ; - rdf:type owl:Class - ] - ] - [ rdf:type owl:Restriction ; - owl:onProperty cont:width ; - owl:someValuesFrom [ owl:intersectionOf ( om:Measure - [ rdf:type owl:Restriction ; - owl:onProperty om:hasUnit ; - owl:hasValue om:millimetre - ] - [ rdf:type owl:Restriction ; - owl:onProperty om:hasNumericalValue ; - owl:allValuesFrom [ rdf:type rdfs:Datatype ; - owl:onDatatype xsd:decimal ; - owl:withRestrictions ( [ xsd:minInclusive 85.23 - ] - [ xsd:maxInclusive 85.73 - ] - ) - ] - ] - ) ; - rdf:type owl:Class - ] - ] - ) ; - rdf:type owl:Class - ] ; - rdfs:subClassOf cont:Plate ; - rdfs:comment "SLAS 1-2004 specifies the microplate footprint standard"^^xsd:string ; - rdfs:label "SLAS-1-2004" . - - -### https://sift.net/container-ontology/container-ontology#SLAS-2-2004-4 -cont:SLAS-2-2004-4 rdf:type owl:Class ; - owl:equivalentClass [ owl:intersectionOf ( cont:SLAS-2-2004-4-1 - cont:SLAS-2-2004-4-2 - ) ; - rdf:type owl:Class - ] ; - rdfs:subClassOf cont:Plate . - - -### https://sift.net/container-ontology/container-ontology#SLAS-2-2004-4-1 -cont:SLAS-2-2004-4-1 rdf:type owl:Class ; - owl:equivalentClass [ owl:intersectionOf ( cont:SLAS-2-2004-4-2 - [ rdf:type owl:Restriction ; - owl:onProperty cont:clearanceToPlateBottom ; - owl:someValuesFrom [ owl:intersectionOf ( om:Measure - [ rdf:type owl:Restriction ; - owl:onProperty om:hasUnit ; - owl:hasValue om:millimetre - ] - [ rdf:type owl:Restriction ; - owl:onProperty om:hasNumericalValue ; - owl:allValuesFrom [ rdf:type rdfs:Datatype ; - owl:onDatatype xsd:decimal ; - owl:withRestrictions ( [ xsd:maxInclusive 1.0 - ] - ) - ] - ] - ) ; - rdf:type owl:Class - ] - ] - ) ; - rdf:type owl:Class - ] ; - rdfs:subClassOf cont:Plate ; - rdfs:comment "Specification of Microplates meeting the specification of ANSI SLAS-2-2004, R2012, based on section 4.1, \"Typical Height with Clearance.\""^^xsd:string ; - rdfs:label "SLAS 2-2004 Typical Height with Clearance"^^xsd:string . - - -### https://sift.net/container-ontology/container-ontology#SLAS-2-2004-4-2 -cont:SLAS-2-2004-4-2 rdf:type owl:Class ; - owl:equivalentClass [ owl:intersectionOf ( cont:Plate - [ rdf:type owl:Class ; - owl:unionOf ( [ rdf:type owl:Restriction ; - owl:onProperty cont:wellCount ; - owl:hasValue 1536 - ] - [ rdf:type owl:Restriction ; - owl:onProperty cont:wellCount ; - owl:hasValue 384 - ] - [ rdf:type owl:Restriction ; - owl:onProperty cont:wellCount ; - owl:hasValue 96 - ] - ) - ] - [ rdf:type owl:Restriction ; - owl:onProperty cont:overallPlateHeight ; - owl:someValuesFrom [ owl:intersectionOf ( om:Measure - [ rdf:type owl:Restriction ; - owl:onProperty om:hasUnit ; - owl:hasValue om:millimetre - ] - [ rdf:type owl:Restriction ; - owl:onProperty om:hasNumericalValue ; - owl:allValuesFrom [ rdf:type rdfs:Datatype ; - owl:onDatatype xsd:decimal ; - owl:withRestrictions ( [ xsd:minInclusive 13.59 - ] - [ xsd:maxInclusive 15.11 - ] - ) - ] - ] - ) ; - rdf:type owl:Class - ] - ] - [ rdf:type owl:Restriction ; - owl:onProperty cont:plateHeight ; - owl:someValuesFrom [ owl:intersectionOf ( om:Measure - [ rdf:type owl:Restriction ; - owl:onProperty om:hasUnit ; - owl:hasValue om:millimetre - ] - [ rdf:type owl:Restriction ; - owl:onProperty om:hasNumericalValue ; - owl:allValuesFrom [ rdf:type rdfs:Datatype ; - owl:onDatatype xsd:decimal ; - owl:withRestrictions ( [ xsd:minInclusive 14.1 - ] - [ xsd:maxInclusive 14.6 - ] - ) - ] - ] - ) ; - rdf:type owl:Class - ] - ] - ) ; - rdf:type owl:Class - ] ; - rdfs:subClassOf cont:Plate ; - rdfs:comment "Specification of Microplates meeting the specification of ANSI SLAS-2-2004, R2012, based on section 4.2, \"Typical Height.\""^^xsd:string ; - rdfs:label "SLAS 2-2004 Typical Height with Clearance"^^xsd:string . - - -### https://sift.net/container-ontology/container-ontology#SLAS-4-2004 -cont:SLAS-4-2004 rdf:type owl:Class ; - rdfs:subClassOf cont:Plate ; - owl:disjointUnionOf ( cont:SLAS_4-2004_1536_Well_Plate - cont:SLAS_4-2004_384_Well_Plate - cont:SLAS_4-2004_96_Well_Plate - ) ; - rdfs:comment "We do not model the well placement in detail, simply specifying whether or not it complies with 4-2004."^^xsd:string ; - rdfs:label "SLAS 4-2004 Well Placement standard"^^xsd:string . - - -### https://sift.net/container-ontology/container-ontology#SLAS_4-2004_1536_Well_Plate -cont:SLAS_4-2004_1536_Well_Plate rdf:type owl:Class ; - owl:equivalentClass cont:Standard1536WellPlate , - [ owl:intersectionOf ( [ rdf:type owl:Restriction ; - owl:onProperty cont:columnCount ; - owl:hasValue 48 - ] - [ rdf:type owl:Restriction ; - owl:onProperty cont:rowCount ; - owl:hasValue 32 - ] - [ rdf:type owl:Restriction ; - owl:onProperty cont:wellCount ; - owl:hasValue 1536 - ] - ) ; - rdf:type owl:Class - ] ; - rdfs:subClassOf cont:SLAS-4-2004 . - - -### https://sift.net/container-ontology/container-ontology#SLAS_4-2004_384_Well_Plate -cont:SLAS_4-2004_384_Well_Plate rdf:type owl:Class ; - owl:equivalentClass cont:Standard384WellPlate , - [ owl:intersectionOf ( [ rdf:type owl:Restriction ; - owl:onProperty cont:columnCount ; - owl:hasValue 24 - ] - [ rdf:type owl:Restriction ; - owl:onProperty cont:rowCount ; - owl:hasValue 16 - ] - [ rdf:type owl:Restriction ; - owl:onProperty cont:wellCount ; - owl:hasValue 384 - ] - ) ; - rdf:type owl:Class - ] ; - rdfs:subClassOf cont:SLAS-4-2004 . - - -### https://sift.net/container-ontology/container-ontology#SLAS_4-2004_96_Well_Plate -cont:SLAS_4-2004_96_Well_Plate rdf:type owl:Class ; - owl:equivalentClass [ owl:intersectionOf ( cont:Plate - [ rdf:type owl:Restriction ; - owl:onProperty cont:columnCount ; - owl:hasValue 12 - ] - [ rdf:type owl:Restriction ; - owl:onProperty cont:rowCount ; - owl:hasValue 8 - ] - [ rdf:type owl:Restriction ; - owl:onProperty cont:wellCount ; - owl:hasValue 96 - ] - ) ; - rdf:type owl:Class - ] ; - rdfs:subClassOf cont:SLAS-4-2004 . - - -### https://sift.net/container-ontology/container-ontology#Standard1536WellPlate -cont:Standard1536WellPlate rdf:type owl:Class ; - rdfs:subClassOf cont:SLAS-4-2004 . - - -### https://sift.net/container-ontology/container-ontology#Standard384WellPlate -cont:Standard384WellPlate rdf:type owl:Class ; - rdfs:subClassOf cont:SLAS-4-2004 . - - -### https://sift.net/container-ontology/container-ontology#Standard96WellPlate -cont:Standard96WellPlate rdf:type owl:Class ; - owl:equivalentClass [ owl:intersectionOf ( cont:Plate - cont:SLAS_4-2004_96_Well_Plate - [ rdf:type owl:Restriction ; - owl:onProperty cont:height ; - owl:someValuesFrom [ owl:intersectionOf ( [ rdf:type owl:Restriction ; - owl:onProperty om:hasDimension ; - owl:hasValue om:millimetre - ] - [ rdf:type owl:Restriction ; - owl:onProperty om:hasNumericalValue ; - owl:someValuesFrom [ rdf:type rdfs:Datatype ; - owl:onDatatype xsd:decimal ; - owl:withRestrictions ( [ xsd:minInclusive 13.5 - ] - [ xsd:maxInclusive 15.25 - ] - ) - ] - ] - ) ; - rdf:type owl:Class - ] - ] - ) ; - rdf:type owl:Class - ] ; - rdfs:comment "This is meant to capture the intuitive notion of a standard (i.e., not deep) 96 well plate." ; - rdfs:label "Standard 96 Well Plate" . - - -### https://sift.net/container-ontology/container-ontology#ThermoFisherCatalogEntry -cont:ThermoFisherCatalogEntry rdf:type owl:Class ; - owl:equivalentClass [ owl:intersectionOf ( cont:CatalogEntry - [ rdf:type owl:Restriction ; - owl:onProperty cont:hasVendorFirm ; - owl:hasValue cont:ThermoFisher - ] - ) ; - rdf:type owl:Class - ] ; - rdfs:subClassOf cont:CatalogEntry . - - -### https://sift.net/container-ontology/container-ontology#ThermoFisher_EnduraPlate_96Well -cont:ThermoFisher_EnduraPlate_96Well rdf:type owl:Class ; - rdfs:subClassOf cont:Plate , - cont:SLAS_4-2004_96_Well_Plate , - [ owl:intersectionOf ( [ rdf:type owl:Restriction ; - owl:onProperty cont:columnCount ; - owl:hasValue 12 - ] - [ rdf:type owl:Restriction ; - owl:onProperty cont:rowCount ; - owl:hasValue 8 - ] - ) ; - rdf:type owl:Class - ] , - [ rdf:type owl:Restriction ; - owl:onProperty cont:cornerRadius ; - owl:someValuesFrom [ owl:intersectionOf ( om:Measure - [ rdf:type owl:Restriction ; - owl:onProperty om:hasUnit ; - owl:hasValue om:millimetre - ] - [ rdf:type owl:Restriction ; - owl:onProperty om:hasNumericalValue ; - owl:hasValue 4.0 - ] - ) ; - rdf:type owl:Class - ] - ] , - [ rdf:type owl:Restriction ; - owl:onProperty cont:height ; - owl:someValuesFrom [ owl:intersectionOf ( om:Measure - [ rdf:type owl:Restriction ; - owl:onProperty om:hasUnit ; - owl:hasValue om:millimetre - ] - [ rdf:type owl:Restriction ; - owl:onProperty om:hasNumericalValue ; - owl:hasValue 20.1 - ] - ) ; - rdf:type owl:Class - ] - ] , - [ rdf:type owl:Restriction ; - owl:onProperty cont:length ; - owl:someValuesFrom [ owl:intersectionOf ( om:Measure - [ rdf:type owl:Restriction ; - owl:onProperty om:hasUnit ; - owl:hasValue om:millimetre - ] - [ rdf:type owl:Restriction ; - owl:onProperty om:hasNumericalValue ; - owl:someValuesFrom [ rdf:type rdfs:Datatype ; - owl:onDatatype xsd:decimal ; - owl:withRestrictions ( [ xsd:minInclusive 127.26 - ] - [ xsd:maxInclusive 128.26 - ] - ) - ] - ] - ) ; - rdf:type owl:Class - ] - ] , - [ rdf:type owl:Restriction ; - owl:onProperty cont:plateHeight ; - owl:someValuesFrom [ owl:intersectionOf ( om:Measure - [ rdf:type owl:Restriction ; - owl:onProperty om:hasUnit ; - owl:hasValue om:millimetre - ] - [ rdf:type owl:Restriction ; - owl:onProperty om:hasNumericalValue ; - owl:hasValue 7.50 - ] - ) ; - rdf:type owl:Class - ] - ] , - [ rdf:type owl:Restriction ; - owl:onProperty cont:wellDepth ; - owl:someValuesFrom [ owl:intersectionOf ( om:Measure - [ rdf:type owl:Restriction ; - owl:onProperty om:hasUnit ; - owl:hasValue om:millimetre - ] - [ rdf:type owl:Restriction ; - owl:onProperty cont:measureType ; - owl:hasValue om:Depth - ] - [ rdf:type owl:Restriction ; - owl:onProperty om:hasNumericalValue ; - owl:hasValue 20.1 - ] - ) ; - rdf:type owl:Class - ] - ] , - [ rdf:type owl:Restriction ; - owl:onProperty cont:width ; - owl:someValuesFrom [ owl:intersectionOf ( om:Measure - [ rdf:type owl:Restriction ; - owl:onProperty om:hasUnit ; - owl:hasValue om:millimetre - ] - [ rdf:type owl:Restriction ; - owl:onProperty om:hasNumericalValue ; - owl:someValuesFrom [ rdf:type rdfs:Datatype ; - owl:onDatatype xsd:decimal ; - owl:withRestrictions ( [ xsd:minInclusive 84.98 - ] - [ xsd:maxInclusive 85.98 - ] - ) - ] - ] - ) ; - rdf:type owl:Class - ] - ] , - [ rdf:type owl:Restriction ; - owl:onProperty cont:equipmentVendor ; - owl:hasValue cont:ThermoFisher - ] , - [ rdf:type owl:Restriction ; - owl:onProperty cont:hasWellBottomShape ; - owl:hasValue cont:veeBottom - ] , - [ rdf:type owl:Restriction ; - owl:onProperty cont:equipmentVendor ; - owl:qualifiedCardinality "1"^^xsd:nonNegativeInteger ; - owl:onClass cont:VendorFirm - ] , - [ rdf:type owl:Restriction ; - owl:onProperty cont:wellCount ; - owl:hasValue 96 - ] . - - -### https://sift.net/container-ontology/container-ontology#VWRCentrifugePCRPlateSpec -cont:VWRCentrifugePCRPlateSpec rdf:type owl:Class ; - owl:equivalentClass [ rdf:type owl:Restriction ; - owl:onProperty cont:wellDepth ; - owl:someValuesFrom [ owl:intersectionOf ( om:Measure - [ rdf:type owl:Restriction ; - owl:onProperty om:hasUnit ; - owl:hasValue om:millimetre - ] - [ rdf:type owl:Restriction ; - owl:onProperty cont:measureType ; - owl:hasValue om:Depth - ] - [ rdf:type owl:Restriction ; - owl:onProperty om:hasNumericalValue ; - owl:hasValue 20.1 - ] - ) ; - rdf:type owl:Class - ] - ] ; - rdfs:label "VWRCentrifugePCRPlateSpec" . - - -### https://sift.net/container-ontology/container-ontology#VendorFirm -cont:VendorFirm rdf:type owl:Class ; - rdfs:subClassOf cont:ContainerRoot , - [ rdf:type owl:Restriction ; - owl:onProperty cont:vendorName ; - owl:minCardinality "1"^^xsd:nonNegativeInteger - ] ; - rdfs:label "VendorFirm" . - - -### https://sift.net/container-ontology/container-ontology#Well -cont:Well rdf:type owl:Class ; - rdfs:subClassOf cont:Container ; - rdfs:label "Well" . - - -### https://sift.net/container-ontology/container-ontology#WellShape -cont:WellShape rdf:type owl:Class ; - owl:equivalentClass [ rdf:type owl:Class ; - owl:oneOf ( cont:flatBottom - cont:roundBottom - cont:uBottom - cont:veeBottom - ) - ] ; - rdfs:subClassOf cont:ContainerRoot ; - rdfs:comment "An enumeration class of different qualitative shapes of well bottoms. Note that this construct is not especially elaboration tolerant: users will not be able to add their own well shapes easily." ; - rdfs:label "WellShape" . - - -################################################################# -# Individuals -################################################################# - -### http://www.ontology-of-units-of-measure.org/resource/om-2/Depth -om:Depth rdf:type owl:NamedIndividual . - - -### https://sift.net/container-ontology/container-ontology#Centrifuge -cont:Centrifuge rdf:type owl:NamedIndividual . - - -### https://sift.net/container-ontology/container-ontology#EnduraPlate_96Well_Blue -cont:EnduraPlate_96Well_Blue rdf:type owl:NamedIndividual , - cont:OpaquePlate , - cont:ThermoFisher_EnduraPlate_96Well ; - cont:hasCatalogEntry cont:tf4483343 ; - cont:hasColor cont:blue . - - -### https://sift.net/container-ontology/container-ontology#EnduraPlate_96Well_Clear -cont:EnduraPlate_96Well_Clear rdf:type owl:NamedIndividual , - cont:ClearPlate , - cont:ThermoFisher_EnduraPlate_96Well ; - cont:hasCatalogEntry cont:tf4483352 , - cont:tf4483354 ; - cont:hasColor cont:clear . - - -### https://sift.net/container-ontology/container-ontology#EnduraPlate_96Well_Multicolor -cont:EnduraPlate_96Well_Multicolor rdf:type owl:NamedIndividual , - cont:OpaquePlate , - cont:ThermoFisher_EnduraPlate_96Well ; - cont:hasCatalogEntry cont:tf4483355 , - cont:tf4483356 ; - cont:hasColor cont:multicolor . - - -### https://sift.net/container-ontology/container-ontology#EnduraPlate_96Well_Red -cont:EnduraPlate_96Well_Red rdf:type owl:NamedIndividual , - cont:OpaquePlate , - cont:ThermoFisher_EnduraPlate_96Well ; - cont:hasCatalogEntry cont:tf4483350 ; - cont:hasColor cont:red . - - -### https://sift.net/container-ontology/container-ontology#EnduraPlate_96Well_Yellow -cont:EnduraPlate_96Well_Yellow rdf:type owl:NamedIndividual , - cont:OpaquePlate , - cont:ThermoFisher_EnduraPlate_96Well ; - cont:hasCatalogEntry cont:tf4483395 ; - cont:hasColor cont:yellow . - - -### https://sift.net/container-ontology/container-ontology#PlateReader -cont:PlateReader rdf:type owl:NamedIndividual . - - -### https://sift.net/container-ontology/container-ontology#TFEPWD -cont:TFEPWD rdf:type owl:NamedIndividual , - om:Measure ; - om:hasUnit om:millimetre ; - cont:measureType om:Depth ; - om:hasNumericalValue 20.1 ; - rdfs:comment "The measure corresponding to the well height of the ThermoFisher EnduraPlate 96 well" . - - -### https://sift.net/container-ontology/container-ontology#ThermoFisher -cont:ThermoFisher rdf:type owl:NamedIndividual , - cont:VendorFirm ; - cont:vendorName "ThermoFisher"^^xsd:string . - - -### https://sift.net/container-ontology/container-ontology#black -cont:black rdf:type owl:NamedIndividual , - cont:Color , - cont:Opaque ; - cont:colorName "black" . - - -### https://sift.net/container-ontology/container-ontology#blue -cont:blue rdf:type owl:NamedIndividual , - cont:Opaque ; - cont:colorName "blue" . - - -### https://sift.net/container-ontology/container-ontology#clear -cont:clear rdf:type owl:NamedIndividual , - cont:Clear , - cont:Color ; - cont:colorName "clear" . - - -### https://sift.net/container-ontology/container-ontology#flatBottom -cont:flatBottom rdf:type owl:NamedIndividual , - cont:WellShape . - - -### https://sift.net/container-ontology/container-ontology#green -cont:green rdf:type owl:NamedIndividual , - cont:Opaque ; - cont:colorName "green" . - - -### https://sift.net/container-ontology/container-ontology#multicolor -cont:multicolor rdf:type owl:NamedIndividual , - cont:Opaque ; - cont:colorName "multicolor" . - - -### https://sift.net/container-ontology/container-ontology#red -cont:red rdf:type owl:NamedIndividual , - cont:Opaque ; - cont:colorName "red" . - - -### https://sift.net/container-ontology/container-ontology#roundBottom -cont:roundBottom rdf:type owl:NamedIndividual , - cont:WellShape . - - -### https://sift.net/container-ontology/container-ontology#tf4483343 -cont:tf4483343 rdf:type owl:NamedIndividual , - cont:CatalogEntry ; - cont:hasVendorFirm cont:ThermoFisher ; - cont:catalogNumber "tf4483343" . - - -### https://sift.net/container-ontology/container-ontology#tf4483350 -cont:tf4483350 rdf:type owl:NamedIndividual , - cont:CatalogEntry ; - cont:hasVendorFirm cont:ThermoFisher ; - cont:catalogNumber "tf4483350" . - - -### https://sift.net/container-ontology/container-ontology#tf4483352 -cont:tf4483352 rdf:type owl:NamedIndividual , - cont:CatalogEntry ; - cont:hasVendorFirm cont:ThermoFisher ; - cont:catalogNumber "tf4483352" . - - -### https://sift.net/container-ontology/container-ontology#tf4483354 -cont:tf4483354 rdf:type owl:NamedIndividual , - cont:CatalogEntry ; - cont:hasVendorFirm cont:ThermoFisher ; - cont:catalogNumber "tf4483354" . - - -### https://sift.net/container-ontology/container-ontology#tf4483355 -cont:tf4483355 rdf:type owl:NamedIndividual , - cont:CatalogEntry ; - cont:hasVendorFirm cont:ThermoFisher ; - cont:catalogNumber "tf4483355" . - - -### https://sift.net/container-ontology/container-ontology#tf4483356 -cont:tf4483356 rdf:type owl:NamedIndividual , - cont:CatalogEntry ; - cont:hasVendorFirm cont:ThermoFisher ; - cont:catalogNumber "tf4483356" . - - -### https://sift.net/container-ontology/container-ontology#tf4483395 -cont:tf4483395 rdf:type owl:NamedIndividual , - cont:CatalogEntry ; - cont:hasVendorFirm cont:ThermoFisher ; - cont:catalogNumber "tf4483395" . - - -### https://sift.net/container-ontology/container-ontology#uBottom -cont:uBottom rdf:type owl:NamedIndividual , - cont:WellShape . - - -### https://sift.net/container-ontology/container-ontology#veeBottom -cont:veeBottom rdf:type owl:NamedIndividual , - cont:WellShape . - - -### https://sift.net/container-ontology/container-ontology#white -cont:white rdf:type owl:NamedIndividual , - cont:Color , - cont:Opaque ; - cont:colorName "white" . - - -### https://sift.net/container-ontology/container-ontology#yellow -cont:yellow rdf:type owl:NamedIndividual , - cont:Opaque ; - cont:colorName "yellow" . - - -################################################################# -# Annotations -################################################################# - -cont:Centrifuge rdfs:label "Centrifuge" ; - rdfs:comment "Likely this should actually be imported from another ontology of lab equipment, if one is available." . - - -cont:PlateReader rdfs:comment "Likely this should actually be imported from another ontology of lab equipment, if one is available." ; - rdfs:label "PlateReader" . - - -################################################################# -# General axioms -################################################################# - -[ rdf:type owl:AllDisjointClasses ; - owl:members ( cont:CatalogEntry - cont:CoatingMaterial - cont:Color - cont:LabEquipment - cont:VendorFirm - cont:WellShape - ) -] . - - -[ rdf:type owl:AllDisjointClasses ; - owl:members ( cont:CatalogEntry - cont:Color - cont:LabEquipment - ) -] . - - -[ rdf:type owl:AllDisjointProperties ; - owl:members ( cont:clearanceToPlateBottom - cont:overallPlateHeight - cont:plateHeight - ) -] . - - -### Generated by the OWL API (version 4.5.9.2019-02-01T07:24:44Z) https://github.com/owlcs/owlapi diff --git a/owl/om-subset.omn b/owl/om-subset.omn deleted file mode 100644 index 1f6e0e2..0000000 --- a/owl/om-subset.omn +++ /dev/null @@ -1,7224 +0,0 @@ -Prefix: owl: -Prefix: rdf: -Prefix: rdfs: -Prefix: xml: -Prefix: xsd: - - - -Ontology: - - -AnnotationProperty: - - -AnnotationProperty: - - -AnnotationProperty: - - Annotations: - "has abbreviation"@en, - "略記がある"@ja, - rdfs:label "abbreviation"@en, - rdfs:label "略記"@ja - - -AnnotationProperty: - - -AnnotationProperty: - - -AnnotationProperty: - - -AnnotationProperty: - - -AnnotationProperty: - - -AnnotationProperty: rdfs:comment - - -AnnotationProperty: rdfs:label - - -Datatype: rdf:PlainLiteral - - -Datatype: rdfs:Literal - - -Datatype: xsd:integer - - -Datatype: xsd:nonNegativeInteger - - -ObjectProperty: - - Annotations: - rdfs:label "has base"@en - - Domain: - - - Range: - - - -ObjectProperty: - - Annotations: - rdfs:label "has denominator"@en - - Domain: - - - Range: - - - -ObjectProperty: - - Annotations: - rdfs:label "has dimension"@en - - Domain: - or or - - Range: - - - -ObjectProperty: - - Annotations: - rdfs:label "has numerator"@en - - Domain: - - - Range: - - - -ObjectProperty: - - Annotations: - rdfs:label "has prefix"@en, - rdfs:label "補助単位を持つ"@ja - - Characteristics: - Functional - - Domain: - - - Range: - - - -ObjectProperty: - - Annotations: - rdfs:label "has quantity"@en, - rdfs:label "量を持つ"@ja - - Domain: - or - - Range: - - - -ObjectProperty: - - Annotations: - rdfs:label "has unit"@en, - rdfs:label "単位を持つ"@ja - - Domain: - or or or or or - - Range: - - - -DataProperty: - - Annotations: - rdfs:label "has exponent"@en - - Domain: - - - Range: - xsd:integer - - -DataProperty: - - Annotations: - rdfs:label "has numerical value"@en - - Domain: - or - - -Class: - - Annotations: - rdfs:label "absorbed dose rate unit"@en - - EquivalentTo: - {} - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "absorbed dose unit"@en - - EquivalentTo: - or ({ , , , }) - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "acceleration unit"@en - - EquivalentTo: - or or or ({ , }) - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "action unit"@en - - EquivalentTo: - { , } - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "activity unit"@en - - EquivalentTo: - or ({ , , }) - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "Alfvén number unit"@en - - EquivalentTo: - {} - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "amount of money unit"@en - - EquivalentTo: - { , , , , , , , , , , , , , , , , , , , , } - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "amount of substance concentration unit"@en - - EquivalentTo: - or or or or ({ , , }) - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "amount of substance flow unit"@en - - EquivalentTo: - { , } - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "amount of substance fraction unit"@en - - EquivalentTo: - { , , , , } - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "amount of substance unit"@en - - EquivalentTo: - or ({}) - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "angle unit"@en - - EquivalentTo: - or ({ , , , , , , , , , }) - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "angular acceleration unit"@en - - EquivalentTo: - {} - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "angular momentum unit"@en - - EquivalentTo: - { , } - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "angular speed unit"@en - - EquivalentTo: - { , } - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "area density rate unit"@en - - EquivalentTo: - {} - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "area density unit"@en - - EquivalentTo: - { , , , } - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "area fraction unit"@en - - EquivalentTo: - { , , , } - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "area unit"@en - - EquivalentTo: - or or ({ , , , , , , , , , }) - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "capacitance unit"@en - - EquivalentTo: - or ({ , , , }) - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "catalytic activity concentration unit"@en - - EquivalentTo: - {} - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "catalytic activity unit"@en - - EquivalentTo: - or ({ , , , }) - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "Celsius temperature unit"@en - - EquivalentTo: - or ({}) - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "column number density unit"@en - - EquivalentTo: - { , } - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "compound unit"@en, - rdfs:label "複合単位"@ja - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "Cowling number unit"@en - - EquivalentTo: - {} - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "cubic prefixed metre"@en - - EquivalentTo: - ( only ) - and ( exactly 1 owl:Thing) - and ( value "3"^^xsd:nonNegativeInteger) - and ( exactly 1 rdfs:Literal) - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "current density unit"@en - - EquivalentTo: - {} - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "curvature constant unit"@en - - EquivalentTo: - {} - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "deceleration parameter unit"@en - - EquivalentTo: - {} - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "density parameter unit"@en - - EquivalentTo: - {} - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "density unit"@en - - EquivalentTo: - or or or ({ , , , , , , , }) - - SubClassOf: - - - -Class: - - Annotations: - "d", - rdfs:label "depth"@en, - rdfs:label "diepte"@nl - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "detectivity unit"@en - - EquivalentTo: - {} - - SubClassOf: - - - -Class: - - Annotations: - "d", - rdfs:label "diameter"@en, - rdfs:label "diameter"@nl, - rdfs:label "直径"@zh - - SubClassOf: - - - -Class: - - Annotations: - rdfs:comment "Dimensions are abstract properties of units and quantities neglecting their vectorial or tensorial character and all numerical factors including their sign."@en, - rdfs:label "dimension"@en - - -Class: - - Annotations: - rdfs:label "dose equivalent unit"@en - - EquivalentTo: - or ({ , , , }) - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "dynamic range unit"@en - - EquivalentTo: - {} - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "dynamic viscosity unit"@en - - EquivalentTo: - or ({ , }) - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "electric charge density unit"@en - - EquivalentTo: - {} - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "electric charge unit"@en - - EquivalentTo: - or ({ , , , , , , , }) - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "electric current unit"@en - - EquivalentTo: - or ({ , , , }) - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "electric dipole moment unit"@en - - EquivalentTo: - { , } - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "electric field unit"@en - - EquivalentTo: - { , } - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "electric flux density unit"@en - - EquivalentTo: - {} - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "electric potential unit"@en - - EquivalentTo: - or ({ , , , }) - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "electrical conductance unit"@en - - EquivalentTo: - or ({ , , , , }) - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "electrical conductivity unit"@en - - EquivalentTo: - {} - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "electrical resistance unit"@en - - EquivalentTo: - or ({ , , , }) - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "electrical resistivity unit"@en - - EquivalentTo: - {} - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "energy density unit"@en - - EquivalentTo: - {} - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "energy unit"@en - - EquivalentTo: - or or or ({ , , , , , , , , , , , , , , , , , , , , , , , , , , , }) - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "entropy unit"@en - - EquivalentTo: - {} - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "Euler number unit"@en - - EquivalentTo: - {} - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "exposure to x and γ rays unit"@en - - EquivalentTo: - { , } - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "exposure unit"@en - - EquivalentTo: - {} - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "Fahrenheit temperature unit"@en - - EquivalentTo: - {} - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "first Cowling number unit"@en - - EquivalentTo: - {} - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "fixed point"@en - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "fluidity unit"@en - - EquivalentTo: - { , } - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "font size unit"@en - - EquivalentTo: - { , , , , , , , } - - SubClassOf: - - - -Class: - - Annotations: - "F", - rdfs:comment "Force is the extent to which an object with mass can be caused to accelerate. It is a derived quantity in the International System of Units. Force is mass times acceleration."@en, - rdfs:label "force"@en, - rdfs:label "kracht"@nl, - rdfs:label "力"@zh - - SubClassOf: - , - value - - -Class: - - Annotations: - rdfs:label "force unit"@en - - EquivalentTo: - or ({ , , , , , , }) - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "Fourier number for mass transfer unit"@en - - EquivalentTo: - {} - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "Fourier number unit"@en - - EquivalentTo: - {} - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "frequency unit"@en - - EquivalentTo: - or ({ , , , , , }) - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "Froude number unit"@en - - EquivalentTo: - {} - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "gas constant unit"@en - - EquivalentTo: - {} - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "gram per prefixed litre"@en - - EquivalentTo: - ( only ) - and ( value ) - and ( exactly 1 owl:Thing) - and ( exactly 1 owl:Thing) - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "Grashof number for mass transfer unit"@en - - EquivalentTo: - {} - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "Grashof number unit"@en - - EquivalentTo: - {} - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "Hartmann number unit"@en - - EquivalentTo: - {} - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "heat capacity unit"@en - - EquivalentTo: - {} - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "heat transfer coefficient unit"@en - - EquivalentTo: - {} - - SubClassOf: - - - -Class: - - Annotations: - "h", - rdfs:label "height"@en, - rdfs:label "hoogte"@nl - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "Hubble constant unit"@en - - EquivalentTo: - { , } - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "illuminance unit"@en - - EquivalentTo: - or ({ , , , }) - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "inductance unit"@en - - EquivalentTo: - or ({ , , , }) - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "information capacity unit"@en - - EquivalentTo: - or or ({ , , , }) - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "interval scale"@en - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "kinematic viscosity unit"@en - - EquivalentTo: - or ({ , }) - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "Knudsen number unit"@en - - EquivalentTo: - {} - - SubClassOf: - - - -Class: - - Annotations: - "L", - "l", - rdfs:comment "Length is the amount of space between two geographical points along a curve. It is a base quantity in the International System of Units and other systems of units. Length is speed times time. The metre, a base unit of length in the International System of Units, is defined in terms of speed of light during a certain time interval."@en, - rdfs:label "lengte"@nl, - rdfs:label "length"@en, - rdfs:label "长度"@zh - - SubClassOf: - , - value - - -Class: - - Annotations: - rdfs:label "length unit"@en - - EquivalentTo: - or ({ , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , }) - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "Lewis number unit"@en - - EquivalentTo: - {} - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "luminance unit"@en - - EquivalentTo: - { , , , , } - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "luminous efficacy unit"@en - - EquivalentTo: - {} - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "luminous energy unit"@en - - EquivalentTo: - {} - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "luminous flux unit"@en - - EquivalentTo: - or ({ , }) - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "luminous intensity unit"@en - - EquivalentTo: - or ({}) - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "Mach number unit"@en - - EquivalentTo: - {} - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "magnetic field unit"@en - - EquivalentTo: - { , } - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "magnetic flux density unit"@en - - EquivalentTo: - or ({ , , , , , }) - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "magnetic flux unit"@en - - EquivalentTo: - or ({ , , , , }) - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "magnetic Reynolds number unit"@en - - EquivalentTo: - {} - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "magnetomotive force unit"@en - - EquivalentTo: - or ({}) - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "magnitude unit"@en - - EquivalentTo: - { , , , } - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "mass flow unit"@en - - EquivalentTo: - { , , } - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "mass fraction unit"@en - - EquivalentTo: - { , , , , , , , , , } - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "mass unit"@en - - EquivalentTo: - or or or ({ , , , , , , , , , , , , , , , , , , }) - - SubClassOf: - - - -Class: - - Annotations: - rdfs:comment "A measure combines a number to a unit of measure. For example, \"3 m\" is a measure."@en, - rdfs:label "measure"@en - - -Class: - - Annotations: - rdfs:label "metre per prefixed second (time)"@en - - EquivalentTo: - ( only ) - and ( value ) - and ( exactly 1 owl:Thing) - and ( exactly 1 owl:Thing) - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "metre per prefixed second (time) squared"@en - - EquivalentTo: - ( only ) - and ( value ) - and ( exactly 1 owl:Thing) - and ( exactly 1 owl:Thing) - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "molality unit"@en - - EquivalentTo: - {} - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "molar energy unit"@en - - EquivalentTo: - {} - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "molar entropy unit"@en - - EquivalentTo: - {} - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "molar heat capacity unit"@en - - EquivalentTo: - {} - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "molar mass unit"@en - - EquivalentTo: - {} - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "molar volume unit"@en - - EquivalentTo: - { , } - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "mole per prefixed litre"@en - - EquivalentTo: - ( only ) - and ( value ) - and ( exactly 1 owl:Thing) - and ( exactly 1 owl:Thing) - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "mole per prefixed metre"@en - - EquivalentTo: - ( only ) - and ( value ) - and ( exactly 1 owl:Thing) - and ( exactly 1 owl:Thing) - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "moment of force unit"@en - - EquivalentTo: - { , , } - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "moment of inertia unit"@en - - EquivalentTo: - {} - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "momentum unit"@en - - EquivalentTo: - {} - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "number density unit"@en - - EquivalentTo: - { , , } - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "number unit"@en - - EquivalentTo: - { , , , , , } - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "Nusselt number for mass transfer unit"@en - - EquivalentTo: - {} - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "Nusselt number unit"@en - - EquivalentTo: - {} - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "Péclet number for mass transfer unit"@en - - EquivalentTo: - {} - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "Péclet number unit"@en - - EquivalentTo: - {} - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "percentage unit"@en - - EquivalentTo: - {} - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "permeability (earth science) unit"@en - - EquivalentTo: - or ({ , }) - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "permeability of free space unit"@en - - EquivalentTo: - {} - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "permeance (electromagnetic) unit"@en - - EquivalentTo: - {} - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "permeance (materials science) unit"@en - - EquivalentTo: - { , , } - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "permittivity unit"@en - - EquivalentTo: - {} - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "pixel count unit"@en - - EquivalentTo: - {} - - SubClassOf: - - - -Class: - - Annotations: - rdfs:comment "A point is an element of an interval scale or a ratio scale, for example, 273.16 on the Kelvin scale indicates the triple point of water thermodynamic temperature."@en, - rdfs:label "point"@en - - -Class: - - Annotations: - rdfs:label "power density unit"@en - - EquivalentTo: - {} - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "power unit"@en - - EquivalentTo: - or ({ , , , , , , , , , }) - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "Prandtl number unit"@en - - EquivalentTo: - {} - - SubClassOf: - - - -Class: - - Annotations: - rdfs:comment "A prefix is a name that precedes a basic unit of measure to indicate a decimal or binary multiple or fraction of the unit. Each prefix has a unique symbol that is prepended to the unit symbol. For example, an electric current of 0.000 000 001 ampere is written by using the SI-prefix nano as 1 nanoampere or 1 nA."@en, - rdfs:label "prefix"@en - - -Class: - - Annotations: - rdfs:label "prefixed ampere"@en - - EquivalentTo: - ( only ) - and ( value ) - and ( exactly 1 owl:Thing) - and ( exactly 1 owl:Thing) - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "prefixed are"@en - - EquivalentTo: - ( only ) - and ( value ) - and ( exactly 1 owl:Thing) - and ( exactly 1 owl:Thing) - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "prefixed becquerel"@en - - EquivalentTo: - ( only ) - and ( value ) - and ( exactly 1 owl:Thing) - and ( exactly 1 owl:Thing) - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "prefixed bit"@en - - EquivalentTo: - ( only ) - and ( value ) - and ( exactly 1 owl:Thing) - and ( exactly 1 owl:Thing) - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "prefixed byte"@en - - EquivalentTo: - ( only ) - and ( value ) - and ( exactly 1 owl:Thing) - and ( exactly 1 owl:Thing) - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "prefixed calorie (mean)"@en - - EquivalentTo: - ( only ) - and ( value ) - and ( exactly 1 owl:Thing) - and ( exactly 1 owl:Thing) - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "prefixed candela"@en - - EquivalentTo: - ( only ) - and ( value ) - and ( exactly 1 owl:Thing) - and ( exactly 1 owl:Thing) - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "prefixed coulomb"@en - - EquivalentTo: - ( only ) - and ( value ) - and ( exactly 1 owl:Thing) - and ( exactly 1 owl:Thing) - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "prefixed degree Celsius"@en - - EquivalentTo: - ( only ) - and ( value ) - and ( exactly 1 owl:Thing) - and ( exactly 1 owl:Thing) - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "prefixed electronvolt"@en - - EquivalentTo: - ( only ) - and ( value ) - and ( exactly 1 owl:Thing) - and ( exactly 1 owl:Thing) - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "prefixed farad"@en - - EquivalentTo: - ( only ) - and ( value ) - and ( exactly 1 owl:Thing) - and ( exactly 1 owl:Thing) - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "prefixed gram"@en - - EquivalentTo: - ( only ) - and ( value ) - and ( exactly 1 owl:Thing) - and ( exactly 1 owl:Thing) - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "prefixed gram per litre"@en - - EquivalentTo: - ( only ) - and ( value ) - and ( exactly 1 owl:Thing) - and ( exactly 1 owl:Thing) - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "prefixed gram per prefixed litre"@en - - EquivalentTo: - ( only ) - and ( only ) - and ( exactly 1 owl:Thing) - and ( exactly 1 owl:Thing) - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "prefixed gray"@en - - EquivalentTo: - ( only ) - and ( value ) - and ( exactly 1 owl:Thing) - and ( exactly 1 owl:Thing) - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "prefixed henry"@en - - EquivalentTo: - ( only ) - and ( value ) - and ( exactly 1 owl:Thing) - and ( exactly 1 owl:Thing) - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "prefixed hertz"@en - - EquivalentTo: - ( only ) - and ( value ) - and ( exactly 1 owl:Thing) - and ( exactly 1 owl:Thing) - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "prefixed joule"@en - - EquivalentTo: - ( only ) - and ( value ) - and ( exactly 1 owl:Thing) - and ( exactly 1 owl:Thing) - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "prefixed katal"@en - - EquivalentTo: - ( only ) - and ( value ) - and ( exactly 1 owl:Thing) - and ( exactly 1 owl:Thing) - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "prefixed kelvin"@en - - EquivalentTo: - ( only ) - and ( value ) - and ( exactly 1 owl:Thing) - and ( exactly 1 owl:Thing) - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "prefixed litre"@en - - EquivalentTo: - ( only ) - and ( value ) - and ( exactly 1 owl:Thing) - and ( exactly 1 owl:Thing) - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "prefixed lumen"@en - - EquivalentTo: - ( only ) - and ( value ) - and ( exactly 1 owl:Thing) - and ( exactly 1 owl:Thing) - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "prefixed lux"@en - - EquivalentTo: - ( only ) - and ( value ) - and ( exactly 1 owl:Thing) - and ( exactly 1 owl:Thing) - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "prefixed metre"@en - - EquivalentTo: - ( only ) - and ( value ) - and ( exactly 1 owl:Thing) - and ( exactly 1 owl:Thing) - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "prefixed metre per prefixed second (time)"@en - - EquivalentTo: - ( only ) - and ( only ) - and ( exactly 1 owl:Thing) - and ( exactly 1 owl:Thing) - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "prefixed metre per prefixed secon (time) squared"@en - - EquivalentTo: - ( only ) - and ( only ) - and ( exactly 1 owl:Thing) - and ( exactly 1 owl:Thing) - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "prefixed metre per second (time)"@en - - EquivalentTo: - ( only ) - and ( value ) - and ( exactly 1 owl:Thing) - and ( exactly 1 owl:Thing) - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "prefixed metre per second (time) squared"@en - - EquivalentTo: - ( only ) - and ( value ) - and ( exactly 1 owl:Thing) - and ( exactly 1 owl:Thing) - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "prefixed molar"@en - - EquivalentTo: - ( only ) - and ( value ) - and ( exactly 1 owl:Thing) - and ( exactly 1 owl:Thing) - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "prefixed mole"@en - - EquivalentTo: - ( only ) - and ( value ) - and ( exactly 1 owl:Thing) - and ( exactly 1 owl:Thing) - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "prefixed mole per litre"@en - - EquivalentTo: - ( only ) - and ( value ) - and ( exactly 1 owl:Thing) - and ( exactly 1 owl:Thing) - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "prefixed mole per metre"@en - - EquivalentTo: - ( only ) - and ( value ) - and ( exactly 1 owl:Thing) - and ( exactly 1 owl:Thing) - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "prefixed mole per prefixed litre"@en - - EquivalentTo: - ( only ) - and ( only ) - and ( exactly 1 owl:Thing) - and ( exactly 1 owl:Thing) - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "prefixed mole per prefixed metre"@en - - EquivalentTo: - ( only ) - and ( only ) - and ( exactly 1 owl:Thing) - and ( exactly 1 owl:Thing) - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "prefixed newton"@en - - EquivalentTo: - ( only ) - and ( value ) - and ( exactly 1 owl:Thing) - and ( exactly 1 owl:Thing) - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "prefixed ohm"@en - - EquivalentTo: - ( only ) - and ( value ) - and ( exactly 1 owl:Thing) - and ( exactly 1 owl:Thing) - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "prefixed pascal"@en - - EquivalentTo: - ( only ) - and ( value ) - and ( exactly 1 owl:Thing) - and ( exactly 1 owl:Thing) - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "prefixed poise"@en - - EquivalentTo: - ( only ) - and ( value ) - and ( exactly 1 owl:Thing) - and ( exactly 1 owl:Thing) - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "prefixed radian"@en - - EquivalentTo: - ( only ) - and ( value ) - and ( exactly 1 owl:Thing) - and ( exactly 1 owl:Thing) - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "prefixed second (time)"@en - - EquivalentTo: - ( only ) - and ( value ) - and ( exactly 1 owl:Thing) - and ( exactly 1 owl:Thing) - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "prefixed second (time) squared"@en - - EquivalentTo: - ( only ) - and ( exactly 1 owl:Thing) - and ( value "2"^^xsd:nonNegativeInteger) - and ( exactly 1 rdfs:Literal) - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "prefixed siemens"@en - - EquivalentTo: - ( only ) - and ( value ) - and ( exactly 1 owl:Thing) - and ( exactly 1 owl:Thing) - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "prefixed sievert"@en - - EquivalentTo: - ( only ) - and ( value ) - and ( exactly 1 owl:Thing) - and ( exactly 1 owl:Thing) - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "prefixed steradian"@en - - EquivalentTo: - ( only ) - and ( value ) - and ( exactly 1 owl:Thing) - and ( exactly 1 owl:Thing) - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "prefixed stokes"@en - - EquivalentTo: - ( only ) - and ( value ) - and ( exactly 1 owl:Thing) - and ( exactly 1 owl:Thing) - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "prefixed tesla"@en - - EquivalentTo: - ( only ) - and ( value ) - and ( exactly 1 owl:Thing) - and ( exactly 1 owl:Thing) - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "prefixed tonne"@en - - EquivalentTo: - ( only ) - and ( value ) - and ( exactly 1 owl:Thing) - and ( exactly 1 owl:Thing) - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "prefixed unified atomic mass unit"@en - - EquivalentTo: - ( only ) - and ( value ) - and ( exactly 1 owl:Thing) - and ( exactly 1 owl:Thing) - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "prefixed unit"@en, - rdfs:label "補助単位"@ja - - SubClassOf: - , - only - - -Class: - - Annotations: - rdfs:label "prefixed volt"@en - - EquivalentTo: - ( only ) - and ( value ) - and ( exactly 1 owl:Thing) - and ( exactly 1 owl:Thing) - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "prefixed watt"@en - - EquivalentTo: - ( only ) - and ( value ) - and ( exactly 1 owl:Thing) - and ( exactly 1 owl:Thing) - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "prefixed weber"@en - - EquivalentTo: - ( only ) - and ( value ) - and ( exactly 1 owl:Thing) - and ( exactly 1 owl:Thing) - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "pressure unit"@en - - EquivalentTo: - or ({ , , , , , , , , , , , , , }) - - SubClassOf: - - - -Class: - - Annotations: - rdfs:comment "A quantity is a representation of a quantifiable (standardised) aspect (such as length, mass, and time) of a phenomenon (e.g., a star, a molecule, or a food product). Quantities are classified according to similarity in their (implicit) metrological aspect, e.g. the length of my table and the length of my chair are both classified as length."@en, - rdfs:comment "量とは,ある現象(例: 星・分子・食品)の定量化できる(標準化された)性質(例: 長さ・質量・時間)の表現である。量は(暗黙の)計量的類似性に従って分離される。例: 机の長さ及び椅子の長さは双方とも長さに分類される。"@ja, - rdfs:label "quantity"@en, - rdfs:label "量"@ja - - -Class: - - Annotations: - rdfs:label "quantity of dimension one unit"@en - - EquivalentTo: - { , , , , , , , } - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "quantum efficiency unit"@en - - EquivalentTo: - {} - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "radiance unit"@en - - EquivalentTo: - {} - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "radiant intensity unit"@en - - EquivalentTo: - {} - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "Rankine temperature unit"@en - - EquivalentTo: - {} - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "ratio scale"@en - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "ratio unit"@en - - EquivalentTo: - { , , } - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "Rayleigh number unit"@en - - EquivalentTo: - {} - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "Réaumur temperature unit"@en - - EquivalentTo: - {} - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "relative humidity unit"@en - - EquivalentTo: - { , } - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "reluctance unit"@en - - EquivalentTo: - {} - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "responsivity unit"@en - - EquivalentTo: - { , } - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "Reynolds number unit"@en - - EquivalentTo: - {} - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "SI prefix"@en - - SubClassOf: - - - -Class: - - Annotations: - "measurement scale"@en, - "meetschaal"@nl, - "schaal"@nl, - rdfs:label "scale"@en - - -Class: - - Annotations: - rdfs:label "Schmidt number unit"@en - - EquivalentTo: - {} - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "shear rate unit"@en - - EquivalentTo: - {} - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "singular unit"@en, - rdfs:label "単数単位"@ja - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "solid angle unit"@en - - EquivalentTo: - or ({ , , , }) - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "specific amount of money unit"@en - - EquivalentTo: - { , } - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "specific catalytic activity unit"@en - - EquivalentTo: - { , } - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "specific energy unit"@en - - EquivalentTo: - { , , } - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "specific entropy unit"@en - - EquivalentTo: - {} - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "specific heat capacity unit"@en - - EquivalentTo: - {} - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "specific viable count unit"@en - - EquivalentTo: - {} - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "specific volume unit"@en - - EquivalentTo: - {} - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "speed unit"@en - - EquivalentTo: - or or or ({ , , , , , , , , }) - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "square prefixed metre"@en - - EquivalentTo: - ( only ) - and ( exactly 1 owl:Thing) - and ( value "2"^^xsd:nonNegativeInteger) - and ( exactly 1 rdfs:Literal) - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "Stanton number for mass transfer unit"@en - - EquivalentTo: - {} - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "Stanton number unit"@en - - EquivalentTo: - {} - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "strain unit"@en - - EquivalentTo: - { , } - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "stress unit"@en - - EquivalentTo: - or ({ , , , , , , , , , , , , , }) - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "Strouhal number unit"@en - - EquivalentTo: - {} - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "surface tension unit"@en - - EquivalentTo: - {} - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "symbol rate unit"@en - - EquivalentTo: - {} - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "temperature rate unit"@en - - EquivalentTo: - { , , } - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "temperature unit"@en - - EquivalentTo: - or or ({ , , , , }) - - SubClassOf: - - - -Class: - - EquivalentTo: - { , , , , } - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "thermal conductivity unit"@en - - EquivalentTo: - {} - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "thermal diffusivity unit"@en - - EquivalentTo: - {} - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "thermal insulance unit"@en - - EquivalentTo: - {} - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "thermal resistance unit"@en - - EquivalentTo: - {} - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "thermodynamic temperature unit"@en - - EquivalentTo: - or ({}) - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "time unit"@en - - EquivalentTo: - or ({ , , , , , , , , , , , , }) - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "torque unit"@en - - EquivalentTo: - { , , } - - SubClassOf: - - - -Class: - - Annotations: - "unit of measure"@en, - "unit of measurement"@en, - "測定の単位"@ja, - "測定単位"@ja, - rdfs:comment "A unit of measure is a definite magnitude of a quantity, defined and adopted by convention or by law. It is used as a standard for measurement of the same quantity, where any other value of the quantity can be expressed as a simple multiple of the unit. For example, length is a quantity; the metre is a unit of length that represents a definite predetermined length. When we say 10 metre (or 10 m), we actually mean 10 times the definite predetermined length called \"metre\"."@en, - rdfs:comment "測定単位とは,量の確定的な大きさであり,慣例又は法律によって定義し採用されている。同じ量の測定の標準として用いられ,他の如何なる量の値も当該単位の単純な倍数として表わせる。例えば,長さも量である; メートルは長さの単位であり,確定的な所定の長さを表している。10メートル(又は10 m)とは,「メートル」と呼ばれる確定的な所定の長さの10倍を,実際に意味している。"@ja, - rdfs:label "unit"@en, - rdfs:label "単位"@ja - - -Class: - - Annotations: - rdfs:label "unit division"@en - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "unit exponentiation"@en - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "unit multiple"@en, - rdfs:label "単位倍量"@ja - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "viable count unit"@en - - EquivalentTo: - { , } - - SubClassOf: - - - -Class: - - Annotations: - "inhoud"@nl, - "v", - "V", - rdfs:comment "Volume is a measure of how much three-dimensional space any phenomenon occupies. It is a derived quantity in the International System of Units. Volume is length to the power 3."@en, - rdfs:label "volume"@en, - rdfs:label "volume"@nl, - rdfs:label "体积"@zh - - SubClassOf: - , - value - - -Class: - - Annotations: - rdfs:label "volume fraction unit"@en - - EquivalentTo: - { , , , , , } - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "volume unit"@en - - EquivalentTo: - or or ({ , , , , , , , , , , , , , , , , , , , , , , , , , , , }) - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "volumetric flow rate unit"@en - - EquivalentTo: - { , , } - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "volumetric heat capacity unit"@en - - EquivalentTo: - {} - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "volumetric viable count unit"@en - - EquivalentTo: - { , , } - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "wave number unit"@en - - EquivalentTo: - { , } - - SubClassOf: - - - -Class: - - Annotations: - rdfs:label "Weber number unit"@en - - EquivalentTo: - {} - - SubClassOf: - - - -Class: owl:Thing - - -Individual: - - Annotations: - rdfs:label "Australian dollar"@en, - rdfs:label "澳元"@zh - - -Individual: - - Annotations: - rdfs:label "Brazilian real"@en, - rdfs:label "巴西里拉"@zh - - -Individual: - - Annotations: - "\\BritishTermalUnitThirtyNineF", - "39 °F British thermal unit"@en, - "Btu", - rdfs:label "British thermal unit (39 °F)"@en, - rdfs:label "英国热力单位(39°F)"@zh - - -Individual: - - Annotations: - "\\BritishTermalUnitFiftyNineF", - "59 °F British thermal unit"@en, - "Btu", - rdfs:label "British thermal unit (59 °F)"@en, - rdfs:label "英国热力单位(59°F)"@zh - - -Individual: - - Annotations: - "\\BritishTermalUnitSixtyF", - "60 °F British thermal unit"@en, - "Btu", - rdfs:label "British thermal unit (60 °F)"@en, - rdfs:label "英国热力单位(60°F)"@zh - - -Individual: - - Annotations: - "Btu_{IT}", - "International Table British thermal unit"@en, - "Btu_IT", - rdfs:label "British thermal unit (International Table)"@en, - rdfs:label "英国热力单位(国际表)"@zh - - -Individual: - - Annotations: - "mean British thermal unit"@en, - "Btu", - rdfs:label "British thermal unit (mean)"@en, - rdfs:label "英国热力单位(平均)"@zh - - -Individual: - - Annotations: - "BTU_{th}", - "thermochemical British thermal unit"@en, - "Btu_th", - rdfs:label "British thermal unit (thermochemical)"@en, - rdfs:label "英国热力单位(热力化学)"@zh - - -Individual: - - Annotations: - rdfs:label "Canadian dollar"@en, - rdfs:label "加元"@zh - - -Individual: - - Annotations: - "International Celsius Temperature scale of 1990"@en, - rdfs:label "Celsius scale"@en, - rdfs:label "Celsiusschaal"@nl, - rdfs:label "摄氏温标"@zh - - -Individual: - - Annotations: - rdfs:label "Chinese yuan"@en, - rdfs:label "中国元"@zh - - -Individual: - - Annotations: - rdfs:label "Fahrenheit scale"@en, - rdfs:label "Fahrenheitschaal"@nl, - rdfs:label "华氏温标"@zh - - -Individual: - - Annotations: - rdfs:label "Hong Kong dollar"@en, - rdfs:label "港元"@zh - - -Individual: - - Annotations: - rdfs:label "Indian rupee"@en, - rdfs:label "印度卢比"@zh - - -Individual: - - Annotations: - "IU", - rdfs:label "International Unit"@en, - rdfs:label "国际单位"@zh - - -Individual: - - Annotations: - rdfs:label "Japanese yen"@en, - rdfs:label "日元"@zh - - -Individual: - - Annotations: - "International Kelvin Temperature scale of 1990"@en, - rdfs:label "Kelvin scale"@en, - rdfs:label "Kelvinschaal"@nl, - rdfs:label "开氏温标"@zh - - -Individual: - - Annotations: - rdfs:label "Mexican peso"@en, - rdfs:label "墨西哥比索"@zh - - -Individual: - - Annotations: - rdfs:label "New Zealand dollar"@en, - rdfs:label "新西兰美元"@zh - - -Individual: - - Annotations: - rdfs:label "Norwegian krone"@en, - rdfs:label "挪威克朗"@zh - - -Individual: - - Annotations: - rdfs:label "Rankine scale"@en, - rdfs:label "Rankineschaal"@nl, - rdfs:label "兰金规模"@zh - - -Individual: - - Annotations: - rdfs:label "Réaumur scale"@en, - rdfs:label "Réaumurschaal"@nl, - rdfs:label "列氏温标"@zh - - -Individual: - - Annotations: - rdfs:label "RussianRuble"@en, - rdfs:label "俄罗斯卢布"@zh - - -Individual: - - Annotations: - rdfs:label "Singapore dollar"@en, - rdfs:label "新加坡元"@zh - - -Individual: - - Annotations: - rdfs:label "South African rand"@en, - rdfs:label "南非兰特"@zh - - -Individual: - - Annotations: - rdfs:label "South Korean won"@en, - rdfs:label "韩元"@zh - - -Individual: - - Annotations: - rdfs:label "Swedish krona"@en, - rdfs:label "瑞典克朗"@zh - - -Individual: - - Annotations: - rdfs:label "Swiss franc"@en, - rdfs:label "瑞士法郎"@zh - - -Individual: - - Annotations: - rdfs:label "Turkish lira"@en, - rdfs:label "土耳其里拉"@zh - - -Individual: - - Annotations: - rdfs:label "United States dollar"@en, - rdfs:label "美国美元"@zh - - -Individual: - - Annotations: - "1000 CFU", - rdfs:label "1000 colony forming unit"@en - - -Individual: - - Annotations: - "1000 CFU/ml", - "1000 CFU/ml", - rdfs:label "1000 colony forming unit per millilitre"@en - - -Individual: - - Annotations: - "abA", - rdfs:comment "The abampere is a unit of electric current defined as 10 ampere."@en, - rdfs:label "abampere"@en, - rdfs:label "abampère"@nl - - -Individual: - - Annotations: - "abC", - rdfs:comment "The abcoulomb is a unit of electric charge defined as 10 coulomb."@en, - rdfs:label "abcoulomb"@en, - rdfs:label "abcoulomb"@nl - - -Individual: - - Annotations: - "abF", - rdfs:comment "The abfarad is a unit of capacitance defined as 1.0e9 farad."@en, - rdfs:label "abfarad"@en, - rdfs:label "abfarad"@nl - - -Individual: - - Annotations: - "abH", - rdfs:comment "The abhenry is a unit of inductance defined as 1.0e-9 henry."@en, - rdfs:label "abhenry"@en, - rdfs:label "abhenry"@nl - - -Individual: - - Annotations: - "absiemens"@en, - "absiemens"@nl, - rdfs:comment "The abmho is a unit of electrical conductance defined as 1.0e9 siemens."@en, - rdfs:label "abmho"@en, - rdfs:label "abmho"@nl - - -Individual: - - Annotations: - "abΩ", - rdfs:comment "The abohm is a unit of electrical resistance defined as 1.0e-9 ohm."@en, - rdfs:label "abohm"@en, - rdfs:label "abohm"@nl - - -Individual: - - Annotations: - "abV", - rdfs:comment "The abvolt is a unit of electric potential defined as 1.0e-8 volt."@en, - rdfs:label "abvolt"@en, - rdfs:label "abvolt"@nl - - -Individual: - - Annotations: - "international acre"@en, - "ac", - rdfs:comment "The international acre is a unit of area defined as 4.0468564224e3 square metre."@en, - rdfs:label "acre (international)"@en, - rdfs:label "英亩(国际)"@zh - - -Individual: - - Annotations: - "US survey acre"@en, - "ac", - rdfs:comment "The US survey acre is a unit of area defined as 4.046872609874252e3 square metre."@en, - rdfs:label "acre (US survey)"@en, - rdfs:label "英亩(美国调查)"@zh - - -Individual: - - Annotations: - rdfs:comment "The acre foot is a unit of volume defined as 1.233489e3 cubic metre."@en, - rdfs:label "acre foot"@en - - -Individual: - - Annotations: - "The ampere is a unit of electric current defined as the constant current that produces an attractive force of 2e–7 newton per metre of length between two straight, parallel conductors of infinite length and negligible circular cross section placed one metre apart in a vacuum. The ampere is a base unit in the International System of Units.", - "A", - rdfs:comment "The ampere is a unit of electric current defined as the constant current that produces an attractive force of 2e–7 newton per metre of length between two straight, parallel conductors of infinite length and negligible circular cross section placed one metre apart in a vacuum."@en, - rdfs:label "ampere"@en, - rdfs:label "ampère"@nl - - -Individual: - - Annotations: - "Ah", - "A·h", - "A h", - rdfs:label "ampere hour"@en, - rdfs:label "ampère-uur"@nl - - -Individual: - - Annotations: - "A m-1", - "A·m-1", - "Ampere per metre is a unit of magnetic field defined as ampere divided by metre. Ampere per metre is a derived unit in the International System of Units.", - "A/m", - rdfs:comment "Ampere per metre is a unit of magnetic field defined as ampere divided by metre."@en, - rdfs:label "ampere per metre"@en, - rdfs:label "ampère per meter"@nl - - -Individual: - - Annotations: - "A m-2", - "A·m-2", - "Ampere per square metre is a unit of current density defined as ampere divided by square metre. Ampere per square metre is a derived unit in the International System of Units.", - "A/m2", - rdfs:comment "Ampere per square metre is a unit of current density defined as ampere divided by square metre."@en, - rdfs:label "ampere per square metre"@en, - rdfs:label "ampère per vierkante meter"@nl - - -Individual: - - Annotations: - "A V-1", - "A·V-1", - "A/V", - rdfs:label "ampere per volt"@en, - rdfs:label "ampère per volt"@nl - - -Individual: - - Annotations: - "A W-1", - "A·W-1", - "A/W", - rdfs:label "ampere per watt"@en, - rdfs:label "ampere per watt"@nl - - -Individual: - - Annotations: - "U", - "AU", - rdfs:comment "The amylase unit is a unit of catalytic activity."@en, - rdfs:label "amylase unit"@en - - -Individual: - - Annotations: - "angstrom"@en, - "angstrom"@nl, - "Å", - rdfs:comment "The ångström is a unit of length defined as 1.0e-10 metre. The unit is often used for wavelengths of electromagnetic radiation or to express the sizes of atoms and molecules."@en, - rdfs:label "ångström"@en, - rdfs:label "ångström"@nl - - -Individual: - - Annotations: - "a", - rdfs:comment "The are is a unit of area defined as 100 square metre."@en, - rdfs:label "are"@en, - rdfs:label "are"@nl - - -Individual: - - Annotations: - "AU", - "au", - rdfs:comment "The atronomical unit is a unit of length defined as 149 597 870 700 metre (IAU 2012 Resolution)."@en, - rdfs:label "astronomical unit"@en - - -Individual: - - Annotations: - "standard atmosphere"@en, - "atm", - rdfs:comment "The standard atmosphere is a unit of pressure defined as 1.01325e5 pascal."@en, - rdfs:label "atmosfeer (standaard)"@nl, - rdfs:label "atmosphere (standard)"@en - - -Individual: - - Annotations: - "technical atmosphere"@en, - "at", - rdfs:comment "The technical atmosphere is a unit of pressure defined as 9.80665e4 pascal."@en, - rdfs:label "atmosphere (technical)"@en - - -Individual: - - Annotations: - "\\barUnit", - "bar", - rdfs:comment "The bar is a unit of pressure defined as 100 000 pascal."@en, - rdfs:label "bar"@en, - rdfs:label "bar"@nl, - rdfs:label "巴(压力计量单位)"@zh - - -Individual: - - Annotations: - "b", - rdfs:comment "The barn is a unit of area defined as 1.0e-28 square metre."@en, - rdfs:label "barn"@en - - -Individual: - - Annotations: - "US barrel"@en, - "bbl", - rdfs:comment "The US barrel is a unit of volume defined as 1.589873e-1 cubic metre."@en, - rdfs:label "barrel (US)"@en - - -Individual: - - Annotations: - "ba", - rdfs:comment "The barye is a unit of pressure defined as 0.1 pascal."@en, - rdfs:label "barye"@en, - rdfs:label "barye"@nl - - -Individual: - - Annotations: - "Bd", - rdfs:comment "The baud is a unit of symbol rate defined as one distinct symbol change or signalling event made to the transmission medium per second in a digitally modulated signal or a line code."@en, - rdfs:label "baud"@en, - rdfs:label "baud"@nl - - -Individual: - - Annotations: - "The becquerel is a unit of activity defined as the activity of a quantity of radioactive material in which one nucleus decays per second. Algebraically it is defined as 1 divided by second. The becquerel is a derived unit in the International System of Units.", - "Bq", - rdfs:comment "The becquerel is a unit of activity defined as the activity of a quantity of radioactive material in which one nucleus decays per second. Algebraically it is defined as 1 divided by second."@en, - rdfs:label "becquerel"@en, - rdfs:label "becquerel"@nl - - -Individual: - - Annotations: - "Bi", - rdfs:comment "The biot is a unit of electric current defined as 10 ampere."@en, - rdfs:label "biot"@en, - rdfs:label "biot"@nl - - -Individual: - - Annotations: - "bit", - rdfs:comment "The bit is a unit of information capacity defined as the information capacity of one binary digit."@en, - rdfs:label "bit"@en, - rdfs:label "bit"@nl, - rdfs:label "指二进制中的一位"@zh - - -Individual: - - Annotations: - "US bushel"@en, - "bu", - rdfs:comment "The US bushel is a unit of volume defined as 3.523907e-2 cubic metre."@en, - rdfs:label "bushel (US)"@en - - -Individual: - - Annotations: - "B", - rdfs:comment "The byte is a unit of information capacity defined as 8 bit."@en, - rdfs:label "byte"@en, - rdfs:label "byte"@nl, - rdfs:label "字节"@zh - - -Individual: - - Annotations: - "cal_{15}", - "15 °C calorie"@en, - "15 °C calorie"@nl, - "cal_15", - rdfs:label "calorie (15 °C)"@en, - rdfs:label "calorie (15 °C)"@nl - - -Individual: - - Annotations: - "\\calorieTwentyC", - "cal_{20}", - "20 °C calorie"@en, - "20 °C calorie"@nl, - "cal_20", - rdfs:label "calorie (20 °C)"@en, - rdfs:label "calorie (20 °C)"@nl - - -Individual: - - Annotations: - "cal_{IT}", - "International Steam Table calorie"@en, - "International Table calorie"@en, - "calorie (International Steam Table)"@en, - "cal_IT", - rdfs:label "calorie (International Table)"@en - - -Individual: - - Annotations: - "mean calorie"@en, - "c", - "cal", - rdfs:comment "The mean calorie is a unit of energy defined as 4.19002 joule."@en, - rdfs:label "calorie (mean)"@en - - -Individual: - - Annotations: - "cal_{th}", - "thermochemical calorie"@en, - "cal_th", - rdfs:label "calorie (thermochemical)"@en - - -Individual: - - Annotations: - "The candela is a unit of luminous intensity defined as the luminous intensity, in a given direction, of a source that emits monochromatic radiation of frequency 540e12 hertz and that has a radiant intensity in that direction of 1/683 watt per steradian. The candela is a base unit in the International System of Units.", - "cd", - rdfs:comment "The candela is a unit of luminous intensity defined as the luminous intensity, in a given direction, of a source that emits monochromatic radiation of frequency 540e12 hertz and that has a radiant intensity in that direction of 1/683 watt per steradian."@en, - rdfs:label "candela"@en, - rdfs:label "candela"@nl, - rdfs:label "坎德拉"@zh - - -Individual: - - Annotations: - "cd cm-1", - "cd·cm-1", - "cd/cm", - rdfs:label "candela per square centimetre"@en, - rdfs:label "candela per vierkante centimeter"@nl - - -Individual: - - Annotations: - "cd m-1", - "cd·m-1", - "Candela per square metre is a unit of luminance defined as candela divided by square metre. Candela per square metre is a derived unit in the Internationa; System of Units.", - "cd/m", - rdfs:comment "Candela per square metre is a unit of luminance defined as candela divided by square metre."@en, - rdfs:label "candela per square metre"@en, - rdfs:label "candela per vierkante meter"@nl - - -Individual: - - Annotations: - "cd·sr", - "cd sr", - rdfs:label "candela steradiaal"@nl, - rdfs:label "candela steradian"@en - - -Individual: - - Annotations: - rdfs:comment "The carat (mass) is a unit of mass defined as 2.0e-4 kilogram."@en, - rdfs:label "carat (mass)"@en, - rdfs:label "karaat (massa)"@nl - - -Individual: - - Annotations: - "cm Hg", - rdfs:comment "The centimetre of mercury is a unit of pressure defined as 1.0e-2 metre of mercury."@en, - rdfs:label "centimeter kwik"@nl, - rdfs:label "centimetre of mercury"@en - - -Individual: - - Annotations: - "cm d-1", - "cm·d-1", - "cm/d", - rdfs:comment "Centimetre per day is a unit of speed defined as centimetre divided by day."@en, - rdfs:label "centimeter per dag"@nl, - rdfs:label "centimetre per day"@en - - -Individual: - - Annotations: - "ch", - rdfs:comment "The chain is a unit of length defined as 20.1168 metre."@en, - rdfs:label "chain"@en - - -Individual: - - Annotations: - rdfs:comment "The cicero is a unit of length defined as 12 point (Didot)."@en, - rdfs:label "cicero"@en, - rdfs:label "cicero"@nl - - -Individual: - - Annotations: - rdfs:comment "The cicular mil is a unit of area defined as 5.067075e-10 square metre."@en, - rdfs:label "circular mil"@en - - -Individual: - - Annotations: - "CFU", - rdfs:label "colony forming unit"@en - - -Individual: - - Annotations: - "CFU/ml", - rdfs:label "colony forming unit per 25 millilitre"@en - - -Individual: - - Annotations: - "CFU/g", - rdfs:label "colony forming unit per gram"@en - - -Individual: - - Annotations: - "CFU/ml", - rdfs:label "colony forming unit per millilitre"@en - - -Individual: - - Annotations: - rdfs:comment "The cord is a unit of volume defined as 3.624556 cubic metre."@en, - rdfs:label "cord"@en - - -Individual: - - Annotations: - "The coulomb is a unit of electric charge defined as ampere times second = farad times volt. The coulomb is a derived unit in the International System of Units.", - "C", - rdfs:comment "The coulomb is a unit of electric charge defined as ampere times second = farad times volt."@en, - rdfs:label "coulomb"@en, - rdfs:label "coulomb"@nl - - -Individual: - - Annotations: - "C·m", - "C m", - rdfs:label "coulomb meter"@nl, - rdfs:label "coulomb metre"@en - - -Individual: - - Annotations: - "C m-3", - "C·m-3", - "C/m3", - rdfs:label "coulomb per cubic metre"@en, - rdfs:label "coulomb per kubieke meter"@nl - - -Individual: - - Annotations: - "C kg-1", - "C·kg-1", - "C/kg", - rdfs:label "coulomb per kilogram"@en, - rdfs:label "coulomb per kilogram"@nl - - -Individual: - - Annotations: - "C m-2", - "C·m-2", - "C/m2", - rdfs:label "coulomb per square metre"@en, - rdfs:label "coulomb per vierkante meter"@nl - - -Individual: - - Annotations: - "C V-1", - "C·V-1", - "C/V", - rdfs:label "coulomb per volt"@en, - rdfs:label "coulomb per volt"@nl - - -Individual: - - Annotations: - "cm3 cm-3", - "cm3·cm-3", - "cm3/cm3", - rdfs:label "cubic centimetre per cubic centimetre"@en, - rdfs:label "kubieke centimeter per kubieke centimeter"@nl - - -Individual: - - Annotations: - "kpc3", - rdfs:label "cubic kiloparsec"@en, - rdfs:label "kubieke kiloparsec"@nl - - -Individual: - - Annotations: - "Cubic metre is a unit of volume defined as the volume of a cube whose sides measure exactly one metre. Cubic metre is a derived unit in the International System of Units.", - "m3", - rdfs:comment "Cubic metre is a unit of volume defined as the volume of a cube whose sides measure exactly one metre."@en, - rdfs:label "cubic metre"@en, - rdfs:label "kubieke meter"@nl - - -Individual: - - Annotations: - "m3 m-3", - "m3·m-3", - "m3/m3", - rdfs:label "cubic metre per cubic metre"@en, - rdfs:label "kubieke meter per kubieke meter"@nl - - -Individual: - - Annotations: - "m3 kg-1", - "m3·kg-1", - "Cubic metre per kilogram is a unit of specific volume defined as cubic metre divided by kilogram. Cubic metre per kilogram is a derived unit in the International System of Units.", - "m3/kg", - rdfs:comment "Cubic metre per kilogram is a unit of specific volume defined as cubic metre divided by kilogram."@en, - rdfs:label "cubic metre per kilogram"@en, - rdfs:label "kubieke meter per kilogram"@nl - - -Individual: - - Annotations: - "m3 mol-1", - "m3·mol-1", - "m3/mol", - rdfs:label "cubic metre per mole"@en, - rdfs:label "kubieke meter per mol"@nl - - -Individual: - - Annotations: - "m3 s-1", - "m3·s-1", - "m3/s", - rdfs:label "cubic metre per second"@en, - rdfs:label "kubieke meter per seconde"@nl - - -Individual: - - Annotations: - rdfs:label "cubic metre per year"@en, - rdfs:label "kubieke meter per jaar"@nl - - -Individual: - - Annotations: - "mm3 mm-3", - "mm3·mm-3", - "mm3/mm3", - rdfs:label "cubic millimetre per cubic millimetre"@en, - rdfs:label "kubieke millimeter per kubieke millimeter"@nl - - -Individual: - - Annotations: - "pc3", - rdfs:label "cubic parsec"@en, - rdfs:label "kubieke parsec"@nl - - -Individual: - - Annotations: - "\\cupUnit", - "US customary cup"@en, - rdfs:comment "The US customary cup is a unit of volume defined as 2.365882e-4 cubic metre."@en, - rdfs:label "cup (US customary)"@en - - -Individual: - - Annotations: - "Ci", - rdfs:comment "The curie is a unit of activity defined as 3.7e10 becquerel."@en, - rdfs:label "curie"@en, - rdfs:label "curie"@nl - - -Individual: - - Annotations: - rdfs:comment "The darcy is a unit of area defined as 9.869233e-13 square metre."@en, - rdfs:label "darcy"@en, - rdfs:label "darcy"@nl - - -Individual: - - Annotations: - "sidereal day"@en, - rdfs:comment "The sidereal day is a unit of time defined as 8.616409e4 second."@en, - rdfs:label "day (sidereal)"@en - - -Individual: - - Annotations: - "\\dayUnit", - "d", - rdfs:comment "The day is a unit of time defined as 86400 second."@en, - rdfs:label "dag"@nl, - rdfs:label "day"@en, - rdfs:label "天"@zh - - -Individual: - - Annotations: - "D", - rdfs:comment "The debye is a unit of electric dipole moment defined as 3.33564e-30 coulomb metre."@en, - rdfs:label "debye"@en, - rdfs:label "debye"@nl - - -Individual: - - Annotations: - "dbar", - rdfs:comment "The decibar is a unit of pressure defined as 1.0e-1 bar."@en, - rdfs:label "decibar"@en, - rdfs:label "decibar"@nl - - -Individual: - - Annotations: - "°", - rdfs:comment "The degree is a unit of angle defined as 1.745329e-2 radian."@en, - rdfs:label "degree"@en, - rdfs:label "graad"@nl, - rdfs:label "度"@zh - - -Individual: - - Annotations: - "centigrade"@en, - "The degree Celsius is a unit of temperature defined as 1 kelvin. The degree Celsius is a derived unit in the International System of Units.", - "°C", - rdfs:comment "The degree Celsius is a unit of temperature defined as 1 kelvin."@en, - rdfs:label "degree Celsius"@en, - rdfs:label "graad Celsius"@nl, - rdfs:label "摄氏度"@zh - - -Individual: - - Annotations: - "°C h-1", - "°C·h-1", - "°C/h", - rdfs:label "degree Celsius per hour"@en, - rdfs:label "graad Celsius per uur"@nl - - -Individual: - - Annotations: - "°C min-1", - "°C·min-1", - "°C/min", - rdfs:label "degree Celsius per minute"@en, - rdfs:label "graad Celsius per minuut"@nl - - -Individual: - - Annotations: - "°C s-1", - "°C·s-1", - "°C/s", - rdfs:label "degree Celsius per second"@en, - rdfs:label "graad Celsius per seconde"@nl - - -Individual: - - Annotations: - "°F", - rdfs:comment "The degree Fahrenheit is a unit of temperature defined as 5.555556e-1 kelvin."@en, - rdfs:label "degree Fahrenheit"@en, - rdfs:label "graad Fahrenheit"@nl - - -Individual: - - Annotations: - "°Ra", - "°R", - rdfs:comment "The degree Rankine is a unit of temperature defined as 5.555556e-1 kelvin."@en, - rdfs:label "degree Rankine"@en, - rdfs:label "graad Rankine"@nl - - -Individual: - - Annotations: - "°R", - "°Re", - "°Ré", - rdfs:comment "The degree Réaumur is a unit of temperature defined as 1.25 kelvin."@en, - rdfs:label "degree Réaumur"@en, - rdfs:label "graad Réaumur"@nl - - -Individual: - - Annotations: - rdfs:label "degree squared"@en - - -Individual: - - Annotations: - rdfs:label "delta A450 per second"@en, - rdfs:label "delta A450 per seconde"@nl - - -Individual: - - Annotations: - rdfs:label "delta A450 per second per milligram"@en, - rdfs:label "delta A450 per seconde per milligram"@nl - - -Individual: - - Annotations: - rdfs:comment "The desserspoon is a unit of volume defined as 2 teaspoon."@en, - rdfs:label "dessertspoon"@en - - -Individual: - - Annotations: - rdfs:comment "Dozen is a unit of dimension one defined as 12."@en, - rdfs:label "dozen"@en - - -Individual: - - Annotations: - "US dry gallon"@en, - "gallon (US dry)"@en, - "gal", - rdfs:comment "The US dry gallon is a unit of volume defined as 4.40488377086e-3 cubic metre."@en, - rdfs:label "dry gallon (US)"@en - - -Individual: - - Annotations: - "US dry pint"@en, - "pint (US dry)"@en, - "dry pt", - rdfs:comment "The US dry pint is a unit of volume defined as 5.506105e-4 cubic metre."@en, - rdfs:label "dry pint (US)"@en - - -Individual: - - Annotations: - "US dry quart"@en, - "quart (US dry)"@en, - "dry qt", - rdfs:comment "The US dry quart is a unit of volume defined as 1.101221e-3 cubic metre."@en, - rdfs:label "dry quart (US)"@en - - -Individual: - - Annotations: - "dyn", - rdfs:comment "The dyne is a unit of force defined as 1.0e-5 newton."@en, - rdfs:label "dyne"@en, - rdfs:label "dyne"@nl, - rdfs:label "达因"@zh - - -Individual: - - Annotations: - "eV", - rdfs:comment "The electronvolt is a unit of energy defined as 1.602177e-19 joule."@en, - rdfs:label "electronvolt"@en, - rdfs:label "electronvolt"@nl, - rdfs:label "电子伏特"@zh - - -Individual: - - Annotations: - "erg", - rdfs:comment "The erg is a unit of energy defined as 1.0e-7 joule."@en, - rdfs:label "erg"@en, - rdfs:label "erg"@nl, - rdfs:label "尔格"@zh - - -Individual: - - Annotations: - "erg·s", - "erg s", - rdfs:label "erg second"@en, - rdfs:label "erg seconde"@nl - - -Individual: - - Annotations: - rdfs:label "euro"@en, - rdfs:label "欧元"@zh - - -Individual: - - Annotations: - rdfs:label "euro per tonne"@en - - -Individual: - - Annotations: - "The farad is a unit of capacitance defined as ampere times second divided by volt = coulomb divided by volt = coulomb squared divided by joule = coulomb squared divided by newton times metre = second squared times coulomb squared divided by square metre times kilogram = second to the power 4 times ampere squared divided by square metre times kilogram. The farad is a derived unit in the International System of Units.", - "F", - rdfs:comment "The farad is a unit of capacitance defined as ampere times second divided by volt = coulomb divided by volt = coulomb squared divided by joule = coulomb squared divided by newton times metre = second squared times coulomb squared divided by square metre times kilogram = second to the power 4 times ampere squared divided by square metre times kilogram."@en, - rdfs:label "farad"@en, - rdfs:label "farad"@nl - - -Individual: - - Annotations: - "F m-1", - "F·m-1", - "F/m", - rdfs:label "farad per meter"@nl, - rdfs:label "farad per metre"@en - - -Individual: - - Annotations: - rdfs:comment "The faraday is a unit of electric charge defined as 9.648531e4 coulomb."@en, - rdfs:label "faraday"@en, - rdfs:label "faraday"@nl - - -Individual: - - Annotations: - "US survey fathom"@en, - rdfs:comment "The US survey fathom is a unit of length defined as 1.828804 metre."@en, - rdfs:label "fathom (US survey)"@en - - -Individual: - - Annotations: - rdfs:comment "The fermi is a unit of length defined as 1.0e-15 metre."@en, - rdfs:label "fermi"@en, - rdfs:label "fermi"@nl - - -Individual: - - Annotations: - "imperial fluid ounce"@en, - "ounce (imperial fluid)"@en, - "fl oz", - rdfs:comment "The imperial fluid ounce is a unit of volume defined as 2.841306e-5 cubic metre."@en, - rdfs:label "fluid ounce (imperial)"@en - - -Individual: - - Annotations: - "US fluid ounce"@en, - "ounce (US fluid)"@en, - "fl oz", - rdfs:comment "The US fluid ounce is a unit of volume defined as 2.957353e-5 cubic metre."@en, - rdfs:label "fluid ounce (US)"@en - - -Individual: - - Annotations: - "international foot"@en, - "ft", - rdfs:comment "The international foot is a unit of length defined as 3.048e-1 metre."@en, - rdfs:label "foot (international)"@en, - rdfs:label "英尺(国际)"@zh - - -Individual: - - Annotations: - "US survey foot"@en, - "ft", - rdfs:comment "The US survey foot is a unit of length defined as 3.048006e-1 metre."@en, - rdfs:label "foot (US survey)"@en - - -Individual: - - Annotations: - rdfs:comment "The foot poundal is a unit of energy defined as 4.214011e-2 joule."@en, - rdfs:label "foot poundal"@en - - -Individual: - - Annotations: - rdfs:comment "The footcandle is a unit of illuminance defined as 1.076391e1 lux."@en, - rdfs:label "footcandle"@en - - -Individual: - - Annotations: - rdfs:comment "The footlambert is a unit of luminance defined as 3.426259 candela per square metre."@en, - rdfs:label "footlambert"@en - - -Individual: - - Annotations: - rdfs:label "force dimension"@en, - rdfs:label "krachtdimensie"@nl - - -Individual: - - Annotations: - "Fr", - rdfs:comment "The franklin is a unit of electric charge defined as 3.335641e-10 coulomb."@en, - rdfs:label "franklin"@en, - rdfs:label "franklin"@nl - - -Individual: - - Annotations: - "international furlong"@en, - rdfs:comment "The international furlong is a unit of length defined as 201.168 metre."@en, - rdfs:label "furlong (international)"@en - - -Individual: - - Annotations: - "galileo"@en, - "galileo"@nl, - "Gal", - rdfs:comment "The gal is a unit of acceleration defined as centimetre per second (time) squared."@en, - rdfs:label "gal"@en, - rdfs:label "gal"@nl - - -Individual: - - Annotations: - "imperial gallon"@en, - "gal", - rdfs:comment "The imperial gallon is a unit of volume defined as 4.54609e-3 cubic metre."@en, - rdfs:label "gallon (imperial)"@en - - -Individual: - - Annotations: - "US gallon"@en, - "gal", - rdfs:comment "The US gallon is a unit of volume defined as 3.785412e-3 cubic metre."@en, - rdfs:label "gallon (US)"@en - - -Individual: - - Annotations: - "\\gammaUnit", - "γ", - rdfs:comment "The gamma is a unit of magnetic flux density defined as 1.0e-9 tesla."@en, - rdfs:label "gamma"@en, - rdfs:label "gamma"@nl - - -Individual: - - Annotations: - "abtesla"@en, - "abtesla"@nl, - "Gs", - "G", - rdfs:comment "The gauss is a unit of magnetic flux density defined as 1.0e-4 tesla."@en, - rdfs:label "gauss"@en, - rdfs:label "gauss"@nl - - -Individual: - - Annotations: - "GeV", - rdfs:comment "The gigaelectronvolt is a unit of energy defined as 1.0e9 electronvolt."@en, - rdfs:label "gigaelectronvolt"@en, - rdfs:label "gigaelectronvolt"@nl - - -Individual: - - Annotations: - "Gpc", - rdfs:comment "The gigaparsec is a unit of length defined as 1.0e9 parsec. Gebruikt voor de afstand op de schaal van het heelal."@en, - rdfs:label "gigaparsec"@en, - rdfs:label "gigaparsec"@nl - - -Individual: - - Annotations: - "Gyr", - rdfs:label "gigajaar"@nl, - rdfs:label "gigayear"@en - - -Individual: - - Annotations: - "Gb", - rdfs:comment "The gilbert is a unit of electric current defined as 7.957747e-1 ampere."@en, - rdfs:label "gilbert"@en, - rdfs:label "gilbert"@nl - - -Individual: - - Annotations: - "imperial gill"@en, - "gi", - rdfs:comment "The imperial gill is a unit of volume defined as 1.420653e-4 cubic metre."@en, - rdfs:label "gill (imperial)"@en - - -Individual: - - Annotations: - "US gill"@en, - "gi", - rdfs:comment "The US gill is a unit of volume defined as 1.182941e-4 cubic metre."@en, - rdfs:label "gill (US)"@en - - -Individual: - - Annotations: - "grade"@en, - "gon", - rdfs:comment "The gon is a unit of angle defined as 1.570796e-2 radian."@en, - rdfs:label "gon"@en - - -Individual: - - Annotations: - "gr", - rdfs:comment "The grain is a unit of mass defined as 6.479891e-5 kilogram."@en, - rdfs:label "grain"@en - - -Individual: - - Annotations: - "g", - rdfs:comment "The gram is a unit of mass defined as 1.0e-3 kilogram."@en, - rdfs:label "gram"@en, - rdfs:label "gram"@nl, - rdfs:label "克"@zh - - -Individual: - - Annotations: - "g cm-3", - "g·cm-3", - "Gram per cubic centimetre is a unit of density defined as gram divided by cubic centimetre. Gram per cubic centimetre is a derived unit in the International System of Units.", - "g/cm3", - rdfs:comment "Gram per cubic centimetre is a unit of density defined as gram divided by cubic centimetre."@en, - rdfs:label "gram per cubic centimetre"@en, - rdfs:label "gram per kubieke centimeter"@nl - - -Individual: - - Annotations: - "g m-3", - "g·m-3", - "Gram per cubic metre is a unit of density defined as gram divided by cubic metre. Gram per cubic metre is a derived unit in the International System of Units.", - "g/m3", - rdfs:comment "Gram per cubic metre is a unit of density defined as gram divided by cubic metre."@en, - rdfs:label "gram per cubic metre"@en, - rdfs:label "gram per kubieke meter"@nl - - -Individual: - - Annotations: - "g g-1", - "g·g-1", - "g/g", - rdfs:label "gram per gram"@en, - rdfs:label "gram per gram"@nl - - -Individual: - - Annotations: - "gram per 100 gram"@en, - "gram per 100 gram"@nl, - "g hg-1", - "g/100 g", - "g·hg-1", - "g/hg", - rdfs:label "gram per hectogram"@en, - rdfs:label "gram per hectogram"@nl - - -Individual: - - Annotations: - "g kg-1", - "g·kg-1", - "g/kg", - rdfs:label "gram per kilogram"@en, - rdfs:label "gram per kilogram"@nl - - -Individual: - - Annotations: - "g l-1", - "g·l-1", - "Gram per litre is a unit of density defined as gram divided by litre. Gram per litre is a derived unit in the International System of Units.", - "g/l", - rdfs:comment "Gram per litre is a unit of density defined as gram divided by litre."@en, - rdfs:label "gram per liter"@nl, - rdfs:label "gram per litre"@en - - -Individual: - - Annotations: - "g m-2", - "g·m-2", - "g/m2", - rdfs:label "gram per square metre"@en, - rdfs:label "gram per vierkante meter"@nl - - -Individual: - - -Individual: - - Annotations: - "The gray is a unit of absorbed dose defined as joule divided by kilogram = square metre divided by second squared. The gray is a derived unit is the International System of Units.", - "Gy", - rdfs:comment "The gray is a unit of absorbed dose defined as joule divided by kilogram = square metre divided by second squared."@en, - rdfs:label "gray"@en, - rdfs:label "gray"@nl - - -Individual: - - Annotations: - "Gy s-1", - "Gy·s-1", - "Gy/s", - rdfs:label "gray per second"@en, - rdfs:label "gray per seconde"@nl - - -Individual: - - Annotations: - rdfs:comment "Gross is a unit of dimension one defined as 144."@en, - rdfs:label "gross"@en - - -Individual: - - Annotations: - rdfs:comment "Half dozen is a unit of dimension one defined as 6."@en, - rdfs:label "half dozen"@en - - -Individual: - - Annotations: - "Hart", - rdfs:comment "The hartley is a unit of information capacity defined as 3.321928095 bit."@en, - rdfs:label "hartley"@en, - rdfs:label "hartley"@nl - - -Individual: - - Annotations: - "The henry is a unit of inductance defined as square metre times kilogram divided by second squared times ampere squared = weber divided by ampere = volt second divided by ampere = (joule divided by coulomb) times second divided by (coulomb divided by second) = joule times second squared divided by coulomb squared = square metre times kilogram divided by coulomb squared. The henry is a derived unit in the International System of Units.", - "H", - rdfs:comment "The henry is a unit of inductance defined as square metre times kilogram divided by second squared times ampere squared = weber divided by ampere = volt second divided by ampere = (joule divided by coulomb) times second divided by (coulomb divided by second) = joule times second squared divided by coulomb squared = square metre times kilogram divided by coulomb squared."@en, - rdfs:label "henry"@en, - rdfs:label "henry"@nl - - -Individual: - - Annotations: - "H m-1", - "H·m-1", - "H/m", - rdfs:label "henry per meter"@nl, - rdfs:label "henry per metre"@en - - -Individual: - - Annotations: - "The hertz is a unit of frequency defined as 1 divided by second. The hertz is a derived unit in the International System of Units.", - "Hz", - rdfs:comment "The hertz is a unit of frequency defined as 1 divided by second."@en, - rdfs:label "hertz"@en, - rdfs:label "hertz"@nl, - rdfs:label "赫兹"@zh - - -Individual: - - Annotations: - "boiler horsepower"@en, - rdfs:comment "The boiler horsepower is a unit of power defined as 9.80950e3 watt."@en, - rdfs:label "horsepower (boiler)"@en - - -Individual: - - Annotations: - "British horsepower"@en, - "imperial horsepower"@en, - rdfs:comment "The British horsepower is a unit of power defined as 7.4570e2 watt."@en, - rdfs:label "horsepower (British)"@en - - -Individual: - - Annotations: - "electric horsepower"@en, - rdfs:comment "The electric horsepower is a unit of power defined as 7.46e2 watt."@en, - rdfs:label "horsepower (electric)"@en - - -Individual: - - Annotations: - "metric horsepower"@en, - "PS", - rdfs:comment "The metric horsepower is a unit of power defined as 7.354988e2 watt."@en, - rdfs:label "horsepower (metric)"@en - - -Individual: - - Annotations: - "water horsepower"@en, - rdfs:comment "The water horsepower is a unit of power defined as 7.46043e2 watt."@en, - rdfs:label "horsepower (water)"@en - - -Individual: - - Annotations: - "sidereal hour"@en, - rdfs:label "hour (sidereal)"@en - - -Individual: - - Annotations: - "u", - "h", - rdfs:comment "The hour is a unit of time defined as 3600 second."@en, - rdfs:label "hour"@en, - rdfs:label "uur"@nl, - rdfs:label "小时"@zh - - -Individual: - - Annotations: - rdfs:comment "Hundred count is a unit of dimension one defined as 100."@en, - rdfs:label "hundred count"@en - - -Individual: - - Annotations: - "British hundredweight"@en, - rdfs:comment "The British hundredweight is a unit of mass defined as 5.080235e1 kilogram."@en, - rdfs:label "hundredweight (British)"@en - - -Individual: - - Annotations: - "US hundredweight"@en, - rdfs:comment "The US hundredweight is a unit of mass defined as 4.535924e1 kilogram."@en, - rdfs:label "hundredweight (US)"@en - - -Individual: - - Annotations: - "international inch"@en, - "in", - rdfs:comment "The international inch is a unit of length defined as 2.54e-2 metre."@en, - rdfs:label "inch (international)"@en, - rdfs:label "英寸(国际)"@zh - - -Individual: - - Annotations: - "The joule is a unit of energy defined as kilogram times square metre divided by second squared. The joule is a derived unit in the International System of Units.", - "J", - rdfs:comment "The joule is a unit of energy defined as kilogram times square metre divided by second squared."@en, - rdfs:label "joule"@en, - rdfs:label "joule"@nl, - rdfs:label "焦耳"@zh - - -Individual: - - Annotations: - "J-1 m3 K", - "J-1·m3·K", - "J/(m3·K)", - "J/m3 K", - rdfs:label "joule per cubic metre kelvin"@en, - rdfs:label "joule per kubieke meter kelvin"@nl - - -Individual: - - Annotations: - "J m-3", - "J·m-3", - "J/m3", - rdfs:label "joule per cubic metre"@en, - rdfs:label "joule per kubieke meter"@nl - - -Individual: - - Annotations: - "J K-1", - "J·K-1", - "J/K", - rdfs:label "joule per kelvin"@en, - rdfs:label "joule per kelvin"@nl - - -Individual: - - Annotations: - "J K-1 kg-1", - "J/(K·kg)", - "J·K-1·kg-1", - "J/(K kg)", - rdfs:label "joule per kelvin kilogram"@en, - rdfs:label "joule per kelvin kilogram"@nl - - -Individual: - - Annotations: - "J K-1 mol-1", - "J/(K·mol)", - "J·K-1·mol-1", - "J/(K mol)", - rdfs:label "joule per kelvin mol"@nl, - rdfs:label "joule per kelvin mole"@en - - -Individual: - - Annotations: - "J kg-1", - "J·kg-1", - "J/kg", - rdfs:label "joule per kilogram"@en, - rdfs:label "joule per kilogram"@nl, - rdfs:label "焦耳每千克"@zh - - -Individual: - - Annotations: - "J mol-1", - "J·mol-1", - "J/mol", - rdfs:label "joule per mol"@nl, - rdfs:label "joule per mole"@en - - -Individual: - - Annotations: - "J s-1", - "J·s-1", - "J/s", - rdfs:label "joule per second"@en, - rdfs:label "joule per seconde"@nl - - -Individual: - - Annotations: - "J·s", - "J s", - rdfs:label "joule second"@en, - rdfs:label "joule seconde"@nl - - -Individual: - - Annotations: - "The katal is a unit of catalytic activity defined as mole divided by second. The katal is a derived unit in the International System of Units.", - "kat", - rdfs:comment "The katal is a unit of catalytic activity defined as mole divided by second."@en, - rdfs:label "katal"@en, - rdfs:label "katal"@nl - - -Individual: - - Annotations: - "kat m-3", - "kat·m-3", - "kat/m3", - rdfs:label "katal per cubic metre"@en, - rdfs:label "katal per kubieke meter"@nl - - -Individual: - - Annotations: - "rydberg"@en, - "rydberg"@nl, - rdfs:comment "The kayser is a unit of wavenumber defined as 100 reciprocal metre."@en, - rdfs:label "kayser"@en, - rdfs:label "kayser"@nl - - -Individual: - - Annotations: - "The kelvin is a unit of temperature defined as 1/273.16 of the thermodynamic temperature of the triple point of water. The kelvin is a base unit in the International System of Units.", - "K", - rdfs:comment "The kelvin is a unit of temperature defined as 1/273.16 of the thermodynamic temperature of the triple point of water."@en, - rdfs:label "kelvin"@en, - rdfs:label "kelvin"@nl, - rdfs:label "开"@zh - - -Individual: - - Annotations: - "K W-1", - "K·W-1", - "K/W", - rdfs:label "kelvin per watt"@en, - rdfs:label "kelvin per watt"@nl - - -Individual: - - Annotations: - "kcal d-1", - "kcal·d-1", - "kcal/d", - rdfs:label "kilocalorie (mean) per day"@en - - -Individual: - - Annotations: - "kilocalorie per 100 gram"@en, - "kcal hg-1", - "kcal/100 g", - "kcal·hg-1", - "kcal/hg", - rdfs:label "kilocalorie (mean) per hectogram"@en - - -Individual: - - Annotations: - "keV", - rdfs:comment "The kiloelectronvolt is a unit of energy defined as 1.0e3 electronvolt."@en, - rdfs:label "kiloelectronvolt"@en, - rdfs:label "kiloelectronvolt"@nl - - -Individual: - - Annotations: - "kg dm-3", - "kg·dm-3", - "Kilogram per cubic decimetre is a unit of density defined as kilogram divided by cubic decimetre. Kilogram per cubic decimetre is a derived unit in the International System of Units.", - "kg/dm3", - rdfs:comment "Kilogram per cubic decimetre is a unit of density defined as kilogram divided by cubic decimetre."@en, - rdfs:label "kilogram per cubic decimetre"@en, - rdfs:label "kilogram per kubieke decimeter"@nl - - -Individual: - - Annotations: - "kg m-3", - "kg·m-3", - "Kilogram per cubic metre is a unit of density defined as kilogram divided by cubic metre. Kilogram per cubic metre is a derived unit in the International System of Units.", - "kg/m3", - rdfs:comment "Kilogram per cubic metre is a unit of density defined as kilogram divided by cubic metre."@en, - rdfs:label "kilogram per cubic metre"@en, - rdfs:label "kilogram per kubieke meter"@nl - - -Individual: - - Annotations: - "kg ha-1", - "kg·ha-1", - "kg/ha", - rdfs:label "kilogram per hectare"@en, - rdfs:label "kilogram per hectare"@nl - - -Individual: - - Annotations: - "kg ha-1 d-1", - "kg·ha-1·d-1", - "kg/(ha d)", - rdfs:label "kilogram per hectare dag"@nl, - rdfs:label "kilogram per hectare day"@en - - -Individual: - - Annotations: - "kg kg-1", - "kg·kg-1", - "kg/kg", - rdfs:label "kilogram per kilogram"@en, - rdfs:label "kilogram per kilogram"@nl - - -Individual: - - Annotations: - "kg mol-1", - "kg·mol-1", - "kg/mol", - rdfs:label "kilogram per mol"@nl, - rdfs:label "kilogram per mole"@en - - -Individual: - - Annotations: - "kg/(Pa s m2)", - "kg/(Pa·s·m2)", - "kg·Pa-1·s-1·m-2", - "kg Pa-1 s-1 m-2", - rdfs:label "kilogram per pascal second square metre"@en, - rdfs:label "kilogram per pascal seconde vierkante meter"@nl - - -Individual: - - Annotations: - "kg s-1", - "kg·s-1", - "kg/s", - rdfs:label "kilogram per second"@en, - rdfs:label "kilogram per seconde"@nl - - -Individual: - - Annotations: - "kg m-2", - "kg·m-2", - "kg/m2", - rdfs:label "kilogram per square metre"@en, - rdfs:label "kilogram per vierkante meter"@nl - - -Individual: - - Annotations: - "m-1·kg·s-2", - "m-1 kg s-2", - rdfs:label "omgekeerde meter kilogram seconde tot de macht -2"@nl, - rdfs:label "reciprocal metre kilogram second to the power -2"@en - - -Individual: - - Annotations: - "kg·m2", - "kg m2", - rdfs:label "kilogram square metre"@en, - rdfs:label "kilogram vierkante meter"@nl - - -Individual: - - Annotations: - "kilojoule per 100 gram"@en, - "kilojoule per 100 gram"@nl, - "kJ hg-1", - "kJ/100 g", - "kJ·hg-1", - "kJ/hg", - rdfs:label "kilojoule per hectogram"@en, - rdfs:label "kilojoule per hectogram"@nl - - -Individual: - - Annotations: - "km h-1", - "km·h-1", - "km/h", - rdfs:comment "Kilometre per hour is a unit of speed defined as kilometre divided by hour."@en, - rdfs:label "kilometer per uur"@nl, - rdfs:label "kilometre per hour"@en - - -Individual: - - Annotations: - "km s-1 Mpc-1", - rdfs:comment "De eenheid van de Hubble constante (die niet constant is!) (http://en.wikipedia.org/wiki/Hubble_constant)."@en, - rdfs:label "kilometer per seconde per megaparsec"@nl, - rdfs:label "kilometre per second per megaparsec"@en - - -Individual: - - Annotations: - "kpc", - rdfs:comment "The kiloparsec is a unit of length defined as 1.0e3 parsec. Gebruikt voor afstanden op de schaal van het melkwegstelsel."@en, - rdfs:label "kiloparsec"@en, - rdfs:label "kiloparsec"@nl - - -Individual: - - Annotations: - "kilowatt-hour"@en, - "kilowatthour"@en, - "kWh", - "kW·h", - "kW h", - rdfs:label "kilowatt hour"@en - - -Individual: - - Annotations: - rdfs:comment "The kip is a unit of force defined as 4.448222e3 newton."@en, - rdfs:label "kip"@en, - rdfs:label "kip"@nl - - -Individual: - - Annotations: - "international knot"@en, - rdfs:comment "The international knot is a unit of speed defined as nautical mile per hour."@en, - rdfs:label "knoop (internationaal)"@nl, - rdfs:label "knot (international)"@en, - rdfs:label "海里/小时(国际)"@zh - - -Individual: - - Annotations: - rdfs:comment "The lambert is a unit of luminance defined as 3.183099e3 candela per square metre."@en, - rdfs:label "lambert"@en, - rdfs:label "lambert"@nl - - -Individual: - - Annotations: - "L", - rdfs:label "lengtedimensie"@nl, - rdfs:label "length dimension"@en - - -Individual: - - Annotations: - "lightyear"@en, - "ly", - rdfs:comment "The light year is a unit of length defined as 9.46073e15 metre."@en, - rdfs:label "lichtjaar"@nl, - rdfs:label "light year"@en - - -Individual: - - Annotations: - "US liquid pint"@en, - "pint (US liquid)"@en, - "liq pt", - rdfs:comment "The US liquid pint is a unit of volume defined as 4.731765e-4 cubic metre."@en, - rdfs:label "liquid pint (US)"@en - - -Individual: - - Annotations: - "US liquid quart"@en, - "quart (US liquid)"@en, - "liq qt", - rdfs:comment "The US liquid quart is a unit of volume defined as 9.463529e-4 cubic metre."@en, - rdfs:label "liquid quart (US)"@en - - -Individual: - - Annotations: - "liter"@en, - "L", - "l", - rdfs:comment "The litre is a unit of volume defined as 1.0e-3 cubic metre."@en, - rdfs:label "liter"@nl, - rdfs:label "litre"@en, - rdfs:label "升"@zh - - -Individual: - - Annotations: - "l h-1", - "l·h-1", - "l/h", - rdfs:label "liter per uur"@nl, - rdfs:label "litre per hour"@en - - -Individual: - - Annotations: - "l mol-1", - "l·mol-1", - "l/mol", - rdfs:label "liter per mol"@nl, - rdfs:label "litre per mole"@en - - -Individual: - - Annotations: - "The lumen is a unit of luminous flux defined as candela times steradian = lux times square metre. The lumen is a derived unit in the International System of Units.", - "lm", - rdfs:comment "The lumen is a unit of luminous flux defined as candela times steradian = lux times square metre."@en, - rdfs:label "lumen"@en, - rdfs:label "lumen"@nl - - -Individual: - - Annotations: - "lm m-2", - "lm·m-2", - "lm/m2", - rdfs:label "lumen per square metre"@en, - rdfs:label "lumen per vierkante meter"@nl - - -Individual: - - Annotations: - "lm W-1", - "lm·W-1", - "lm/W", - rdfs:label "lumen per watt"@en, - rdfs:label "lumen per watt"@nl - - -Individual: - - Annotations: - "lm·s", - "lm s", - rdfs:label "lumen second"@en, - rdfs:label "lumen seconde"@nl - - -Individual: - - Annotations: - "The lux is a unit of illuminance defined as lumen divided by square metre = candela times steradian divided by square metre. The lux is a derived unit in the International System of Units.", - "lx", - rdfs:comment "The lux is a unit of illuminance defined as lumen divided by square metre = candela times steradian divided by square metre."@en, - rdfs:label "lux"@en, - rdfs:label "lux"@nl - - -Individual: - - Annotations: - "lx·s", - "lx s", - rdfs:label "lux second"@en, - rdfs:label "lux seconde"@nl - - -Individual: - - Annotations: - "mag", - rdfs:comment "Eenheid waarmee de helderheid van sterren wordt aangegeven. Meestal wordt het symbool niet aangeduid (http://en.wikipedia.org/wiki/Magnitude_(astronomy))."@en, - rdfs:label "magnitude"@en, - rdfs:label "magnitude"@nl - - -Individual: - - Annotations: - "Mx", - rdfs:comment "The maxwell is a unit of magnetic flux defined as 1.0e-8 weber."@en, - rdfs:label "maxwell"@en, - rdfs:label "maxwell"@nl - - -Individual: - - Annotations: - "MeV", - rdfs:comment "The megaelectronvolt is a unit of energy defined as 1.0e6 electronvolt."@en, - rdfs:label "megaelectronvolt"@en, - rdfs:label "megaelectronvolt"@nl - - -Individual: - - Annotations: - rdfs:label "megaeuro"@en - - -Individual: - - Annotations: - rdfs:label "megaeuro per megatonne"@en - - -Individual: - - Annotations: - "Mpc", - rdfs:comment "The megaparsec is a unit of length defined as 1.0e6 parsec. Gebruikt voor afstanden op de schaal van clusters."@en, - rdfs:label "megaparsec"@en, - rdfs:label "megaparsec"@nl - - -Individual: - - Annotations: - "meter"@en, - "The metre is a unit of length defined as the length of the path travelled by light in vacuum during a time interval of 1/299 792 458 of a second. The metre is a base unit in the International System of Units.", - "m", - rdfs:comment "The metre is a unit of length defined as the length of the path travelled by light in vacuum during a time interval of 1/299 792 458 of a second."@en, - rdfs:label "meter"@nl, - rdfs:label "metre"@en, - rdfs:label "米"@zh - - -Individual: - - Annotations: - "m kg s-1", - "m·kg/s", - "m·kg·s-1", - "m kg/s", - rdfs:label "meter kilogram per seconde"@nl, - rdfs:label "metre kilogram per second"@en - - -Individual: - - Annotations: - "m kg s-2", - "m·kg/s2", - "m·kg·s-2", - "m kg/s2", - rdfs:label "meter kilogram per seconde kwadraat"@nl, - rdfs:label "metre kilogram per second squared"@en - - -Individual: - - Annotations: - "m Hg", - rdfs:comment "The metre of mercury is a unit of pressure defined as 133 322 pascal."@en, - rdfs:label "meter kwik"@nl, - rdfs:label "metre of mercury"@en - - -Individual: - - Annotations: - "m d-1", - "m·d-1", - "m/d", - rdfs:comment "Metre per day is a unit of speed defined as metre divided by day."@en, - rdfs:label "meter per dag"@nl, - rdfs:label "metre per day"@en - - -Individual: - - Annotations: - "m m-1", - "m·m-1", - "m/m", - rdfs:label "meter per meter"@nl, - rdfs:label "metre per metre"@en - - -Individual: - - Annotations: - "m s-1", - "mps", - "m·s-1", - "Metre per second is a unit of speed defined as metre divided by second. Metre per second is a derived unit in the International System of Units.", - "m/s", - rdfs:comment "Metre per second is a unit of speed defined as metre divided by second."@en, - rdfs:label "meter per seconde"@nl, - rdfs:label "metre per second"@en - - -Individual: - - Annotations: - "m/s/m", - rdfs:label "meter per seconde per metre"@nl, - rdfs:label "metre per second per metre"@en - - -Individual: - - Annotations: - "m s-2", - "m·s-2", - "Metre per second squared is a unit of acceleration defined as metre divided by second squared. Metre per second squared is a derived unit in the International System of Units.", - "m/s2", - rdfs:comment "Metre per second squared is a unit of acceleration defined as metre divided by second squared."@en, - rdfs:label "meter per seconde kwadraat"@nl, - rdfs:label "metre per second squared"@en - - -Individual: - - Annotations: - "\\mhoUnit", - rdfs:comment "The mho is a unit of electrical conductance defined as 1 siemens."@en, - rdfs:label "mho"@en, - rdfs:label "mho"@nl - - -Individual: - - Annotations: - "μbar", - rdfs:comment "The microbar is a unit of pressure defined as 1.0e-6 bar."@en, - rdfs:label "microbar"@en, - rdfs:label "microbar"@nl, - rdfs:label "微巴"@zh - - -Individual: - - Annotations: - "μg cm-3", - "μg·cm-3", - "Microgram per cubic centimetre is a unit of density defined as microgram divided by cubic centimetre. Microgram per cubic centimetre is a derived unit in the International System of Units.", - "μg/cm3", - rdfs:comment "Microram per cubic centimetre is a unit of density defined as microgram divided by cubic centimetre."@en, - rdfs:label "microgram per cubic centimetre"@en, - rdfs:label "microgram per kubieke centimeter"@nl - - -Individual: - - Annotations: - "microgram per 100 gram"@en, - "microgram per 100 gram"@nl, - "μg hg-1", - "μg/100 g", - "μg·hg-1", - "μg/hg", - rdfs:label "microgram per hectogram"@en, - rdfs:label "microgram per hectogram"@nl - - -Individual: - - Annotations: - "μmag", - rdfs:comment "The micromagnitude is a unit of magnitude defined as 1.0e-6 magnitude."@en, - rdfs:label "micromagnitude"@en, - rdfs:label "micromagnitude"@nl - - -Individual: - - Annotations: - "μmol mol-1", - "μmol·mol-1", - "μmol/mol", - rdfs:label "micromol per mol"@nl, - rdfs:label "micromole per mole"@en - - -Individual: - - Annotations: - "μmol s-1", - "μmol·s-1", - "μmol/s", - rdfs:label "micromol per seconde"@nl, - rdfs:label "micromole per second"@en - - -Individual: - - Annotations: - "μ", - rdfs:comment "The micron is a unit of length defined as 1.0e-6 metre."@en, - rdfs:label "micron"@en, - rdfs:label "micron"@nl - - -Individual: - - Annotations: - "μN·m", - "μN m", - rdfs:label "micronewton meter"@nl, - rdfs:label "micronewton metre"@en - - -Individual: - - Annotations: - "microarcsecond"@en, - "microboogseconde"@nl, - "microsecond of arc"@en, - "μas", - rdfs:comment "The microsecond (angle) is a unit of length defined as 1.0e-6 second (angle). Used in astronomy (measurements of positions of stars, galaxies, etc.) to represent the error."@en, - rdfs:label "microsecond (angle)"@en, - rdfs:label "microseconde (hoek)"@nl - - -Individual: - - Annotations: - rdfs:comment "The mil (angle) is a unit of angle defined as 9.817477e-4 radian."@en, - rdfs:label "mil (angle)"@en - - -Individual: - - Annotations: - "thou"@en, - rdfs:comment "The mil (length) is a unit of length defined as 2.54e-5 metre."@en, - rdfs:label "mil (length)"@en - - -Individual: - - Annotations: - "statute mile"@en, - "mi", - rdfs:comment "The statute mile is a unit of length defined as 1.609344e3 metre."@en, - rdfs:label "mile (statute)"@en - - -Individual: - - Annotations: - "mi h-1", - "mi·h-1", - "mi/h", - rdfs:comment "Mile (statute) per hour is a unit of speed defined as mile (statute) divided by hour."@en, - rdfs:label "mijl per uur"@nl, - rdfs:label "mile (statute) per hour"@en - - -Individual: - - Annotations: - "US survey mile"@en, - rdfs:comment "The US survey mile is a unit of length defined as 1.609347e3 metre."@en, - rdfs:label "mile (US survey)"@en - - -Individual: - - Annotations: - "mAh", - "mA·h", - "mA h", - rdfs:label "milliampere hour"@en, - rdfs:label "milliampère-uur"@nl - - -Individual: - - Annotations: - "mbar", - rdfs:comment "The millibar is a unit of pressure defined as 1.0e-3 bar."@en, - rdfs:label "millibar"@en, - rdfs:label "millibar"@nl - - -Individual: - - Annotations: - "mG", - rdfs:comment "The milligauss is a unit of magnetic flux density defined as 1.0e-3 gauss."@en, - rdfs:label "milligauss"@en, - rdfs:label "milligauss"@nl - - -Individual: - - Annotations: - "mg m-3", - "mg·m-3", - "Milligram per cubic metre is a unit of density defined as milligram divided by cubic metre. Milligram per cubic metre is a derived unit in the International System of Units.", - "mg/m3", - rdfs:comment "Milligram per cubic metre is a unit of density defined as milligram divided by cubic metre."@en, - rdfs:label "milligram per cubic metre"@en, - rdfs:label "milligram per kubieke meter"@nl - - -Individual: - - Annotations: - "milligram per 100 gram"@en, - "milligram per 100 gram"@nl, - "mg hg-1", - "mg/100 g", - "mg·hg-1", - "mg/hg", - rdfs:label "milligram per hectogram"@en, - rdfs:label "milligram per hectogram"@nl - - -Individual: - - Annotations: - "mg kg-1", - "mg·kg-1", - "mg/kg", - rdfs:label "milligram per kilogram"@en, - rdfs:label "milligram per kilogram"@nl - - -Individual: - - -Individual: - - Annotations: - rdfs:label "milligram RAE"@en - - -Individual: - - Annotations: - "mmag", - rdfs:comment "The millimagnitude is a unit of magnitude defined as 1.0e-3 magnitude."@en, - rdfs:label "millimagnitude"@en, - rdfs:label "millimagnitude"@nl - - -Individual: - - Annotations: - "mm Hg", - rdfs:comment "The millimetre of mercury is a unit of pressure defined as 1.0e-3 metre of mercury."@en, - rdfs:label "millimeter kwik"@nl, - rdfs:label "millimetre of mercury"@en - - -Individual: - - Annotations: - "mm d-1", - "mm·d-1", - "mm/d", - rdfs:comment "Millimetre per day is a unit of speed defined as millimetre divided by day."@en, - rdfs:label "millimeter per dag"@nl, - rdfs:label "millimetre per day"@en - - -Individual: - - Annotations: - "mm h-1", - "mm·h-1", - "mm/h", - rdfs:comment "Millimetre per hour is a unit of speed defined as millimetre divided by hour."@en, - rdfs:label "millimeter per uur"@nl, - rdfs:label "millimetre per hour"@en - - -Individual: - - Annotations: - "mN·m", - "mN m", - rdfs:label "millinewton meter"@nl, - rdfs:label "millinewton metre"@en - - -Individual: - - Annotations: - "milliarcsecond"@en, - "milliboogseconde"@nl, - "millisecond of arc"@en, - "mas", - rdfs:comment "The millisecond (angle) is a unit of length defined as 1.0e-3 second (angle). Used in astronomy (measurements of positions of stars, galaxies, etc.) to represent the error."@en, - rdfs:label "millisecond (angle)"@en, - rdfs:label "milliseconde (hoek)"@nl - - -Individual: - - Annotations: - "mas/yr", - rdfs:comment "Wordt gebruikt om de waargenomen verandering van de positie van sterren uit te drukken (de proper motion)."@nl, - rdfs:label "millisecond (angle) per year"@en, - rdfs:label "milliseconde (hoek) per jaar"@nl - - -Individual: - - Annotations: - "arcminute"@en, - "arcminuut"@nl, - "minute of arc"@en, - "'", - rdfs:comment "The minute (angle) is a unit of angle defined as 2.908882e-4 radian."@en, - rdfs:label "minute (angle)"@en, - rdfs:label "minuut (hoek)"@nl, - rdfs:label "分钟(角)"@zh - - -Individual: - - Annotations: - "sidereal minute"@en, - rdfs:comment "The sidereal minute is a unit of time defined as 5.983617e1 second."@en, - rdfs:label "minute (sidereal)"@en - - -Individual: - - Annotations: - "min", - rdfs:comment "The minute (time) is a unit of time defined as 60 second."@en, - rdfs:label "minute"@en, - rdfs:label "minuut"@nl, - rdfs:label "分钟"@zh - - -Individual: - - Annotations: - "M", - rdfs:comment "Molar is a unit of amount of substance concentration defined as 1 mole per litre."@en, - rdfs:label "molair"@nl, - rdfs:label "molar"@en - - -Individual: - - Annotations: - "The mole is a unit of amount of substance defined as the amount of substance of a system that contains as many elementary entities as there are atoms in 0.012 kilogram of carbon 12. The mole is a base unit in the International System of Units.", - "mol", - rdfs:comment "The mole is a unit of amount of substance defined as the amount of substance of a system that contains as many elementary entities as there are atoms in 0.012 kilogram of carbon 12."@en, - rdfs:label "mol"@nl, - rdfs:label "mole"@en - - -Individual: - - Annotations: - "mol m-3", - "mol·m-3", - "Mole per cubic metre is a unit of amount of substance concentration defined as mole divided by cubic metre. Mole per cubic metre is a derived unit in the International System of Units.", - "mol/m3", - rdfs:comment "Mole per cubic metre is a unit of amount of substance concentration defined as mole divided by cubic metre."@en, - rdfs:label "mol per kubieke meter"@nl, - rdfs:label "mole per cubic metre"@en - - -Individual: - - Annotations: - "mol kg-1", - "mol·kg-1", - "mol/kg", - rdfs:label "mol per kilogram"@nl, - rdfs:label "mole per kilogram"@en - - -Individual: - - Annotations: - "mol l-1", - "mol·l-1", - "Mole per litre is a unit of amount of substance concentration defined as mole divided by litre. Mole per litre is a derived unit in the International System of Units.", - "mol/l", - rdfs:comment "Mole per litre is a unit of amount of substance concentration defined as mole divided by litre."@en, - rdfs:label "mole per liter"@nl, - rdfs:label "mole per litre"@en - - -Individual: - - Annotations: - "mol mol-1", - "mol·mol-1", - "mol/mol", - rdfs:label "mol per mol"@nl, - rdfs:label "mole per mole"@en - - -Individual: - - Annotations: - "mol s-1", - "mol·s-1", - "mol/s", - rdfs:label "mol per seconde"@nl, - rdfs:label "mole per second"@en - - -Individual: - - Annotations: - "nkat mg-1", - "nkat·mg-1", - "nkat/mg", - rdfs:label "nanokatal per milligram"@en, - rdfs:label "nanokatal per milligram"@nl - - -Individual: - - Annotations: - "international nautical mile"@en, - "M", - "NM", - "nm", - "nmi", - rdfs:comment "The international nautical mile is a unit of length defined as 1852 metre."@en, - rdfs:label "nautical mile (international)"@en, - rdfs:label "zeemijl (internationaal)"@nl, - rdfs:label "海里(国际)"@zh - - -Individual: - - Annotations: - "M h-1", - "M·h-1", - "NM h-1", - "NM/h", - "NM·h-1", - "nm h-1", - "nm/h", - "nmi h-1", - "nmi·h-1", - "nm·h-1", - "M/h", - "nmi/h", - rdfs:comment "Nautical mile per hour is a unit of speed defined as nautical mile divided by hour."@en, - rdfs:label "nautical mile per hour"@en, - rdfs:label "zeemijl per uur"@nl - - -Individual: - - Annotations: - "The newton is a unit of force defined as kilogram times metre divided by second squared. The newton is a derived unit in the International System of Units.", - "N", - rdfs:comment "The newton is a unit of force defined as kilogram timesmetre divided by second squared."@en, - rdfs:label "newton"@en, - rdfs:label "newton"@nl, - rdfs:label "牛顿"@zh - - -Individual: - - Annotations: - "N·m", - "N m", - rdfs:label "newton meter"@nl, - rdfs:label "newton metre"@en - - -Individual: - - Annotations: - "N C-1", - "N·C-1", - "N/C", - rdfs:label "newton per coulomb"@en, - rdfs:label "newton per coulomb"@nl - - -Individual: - - Annotations: - "N m-1", - "N·m-1", - "N/m", - rdfs:label "newton per meter"@nl, - rdfs:label "newton per metre"@en - - -Individual: - - Annotations: - "N m-2", - "N·m-2", - "N/m2", - rdfs:label "newton per square metre"@en, - rdfs:label "newton per vierkante meter"@nl - - -Individual: - - Annotations: - "Oe", - rdfs:comment "The oersted is a unit of magnetic field defined as 7.957747e1 ampere per metre."@en, - rdfs:label "oersted"@en - - -Individual: - - Annotations: - "The ohm is a unit of electrical resistance defined as volt divided by ampere = square metre times kilogram divided by second to the power 3 times ampere squared. The ohm is a derived unit in the International System of Units.", - "Ω", - rdfs:comment "The ohm is a unit of electrical resistance defined as volt divided by ampere = square metre times kilogram divided by second to the power 3 times ampere squared."@en, - rdfs:label "ohm"@en, - rdfs:label "ohm"@nl - - -Individual: - - Annotations: - "Ω·m", - "Ω m", - rdfs:label "ohm meter"@nl, - rdfs:label "ohm metre"@en - - -Individual: - - Annotations: - "unit one"@en, - "1", - rdfs:comment "Unit one is a unit of dimension one."@en, - rdfs:label "one"@en - - -Individual: - - Annotations: - "apothecaries' ounce"@en, - "ounce (troy)"@en, - "troy ounce"@en, - "oz (apoth)", - "oz (ap.)", - rdfs:comment "The apothecaries' ounce is a unit of mass defined as 3.110348e-2 kilogram."@en, - rdfs:label "ounce (apothecaries')"@en - - -Individual: - - Annotations: - "avoirdupois ounce"@en, - "oz (av.)", - "oz avdp", - "oz", - rdfs:comment "The avoirdupois ounce is a unit of mass defined as 2.834952e-2 kilogram."@en, - rdfs:label "ounce (avoirdupois)"@en - - -Individual: - - Annotations: - "oz yd-2", - "oz·yd-1", - "oz/yd2", - rdfs:label "ounce (avoirdupois) per square yard (international)"@en - - -Individual: - - Annotations: - "pc", - rdfs:comment "The parsec is a unit of length defined as 3.08567758149137e16 metre."@en, - rdfs:label "parsec"@en - - -Individual: - - Annotations: - "ppm", - rdfs:comment "Parts per million is a unit of dimension one defined as 1/1 000 000."@en, - rdfs:label "parts per million"@en - - -Individual: - - Annotations: - "The pascal is a unit of pressure and stress defined as newton divided by square metre = joule divided by cubic metre = kilogram divided by metre second squared. The pascal is a derived unit in the International System of Units.", - "Pa", - rdfs:comment "The pascal is a unit of pressure and stress defined as newton divided by square metre = joule divided by cubic metre = kilogram divided by metre second squared."@en, - rdfs:label "pascal"@en, - rdfs:label "pascal"@nl - - -Individual: - - Annotations: - "Pa·s", - "Pa s", - rdfs:label "pascal second"@en, - rdfs:label "pascal seconde"@nl - - -Individual: - - Annotations: - "US peck"@en, - "pk", - rdfs:comment "The US peck is a unit of volume defined as 8.809768e-3 cubic metre."@en, - rdfs:label "peck (US)"@en - - -Individual: - - Annotations: - "Troy pennyweight"@en, - "dwt", - rdfs:comment "The Troy pennyweight is a unit of mass defined as 1.555174e-3 kilogram."@en, - rdfs:label "pennyweight (Troy)"@en - - -Individual: - - Annotations: - "\\%", - "%", - rdfs:comment "The percent is a unit of dimension one defined as 1/100."@en, - rdfs:label "percent"@en, - rdfs:label "procent"@nl, - rdfs:label "百分"@zh - - -Individual: - - Annotations: - "0 °C perm"@en, - "0 °C perm"@nl, - rdfs:comment "The 0 °C perm is a unit ofpermeance defined as 5.72135e-11 kilogram per pascal second (time) square metre."@en, - rdfs:label "perm (0 °C)"@en, - rdfs:label "perm (0 °C)"@nl - - -Individual: - - Annotations: - "23 °C perm"@en, - "23 °C perm"@nl, - rdfs:comment "The 23 °C perm is a unit of permeance defined as 5.74525e-11 kilogram per pascal second (time) square metre."@en, - rdfs:label "perm (23 °C)"@en, - rdfs:label "perm (23 °C)"@nl - - -Individual: - - Annotations: - "ph", - rdfs:comment "The phot is a unit of illuminance defined as 1.0e4 lux."@en, - rdfs:label "phot"@en, - rdfs:label "phot"@nl - - -Individual: - - Annotations: - "ATA pica"@en, - rdfs:comment "The ATA pica is a unit of length defined as 12 point (ATA)."@en, - rdfs:label "pica (ATA)"@en - - -Individual: - - Annotations: - "Postscript pica"@en, - rdfs:comment "The Postscript pica is a unit of length defined as 12 point (Postscript)."@en, - rdfs:label "pica (Postscript)"@en - - -Individual: - - Annotations: - "TeX pica"@en, - rdfs:comment "The TeX pica is a unit of length defined as 12 point (TeX)."@en, - rdfs:label "pica (TeX)"@en - - -Individual: - - Annotations: - "imperial pint"@en, - rdfs:comment "The pint is a unit of volume defined as 568.26125 millilitre."@en, - rdfs:label "pint (imperial)"@en - - -Individual: - - Annotations: - rdfs:label "pixel"@en, - rdfs:label "pixel"@nl - - -Individual: - - Annotations: - "ATA point"@en, - "pt", - rdfs:comment "The ATA point is a unit of length defined as 0.3514598e-3 metre."@en, - rdfs:label "point (ATA)"@en - - -Individual: - - Annotations: - "Didot point"@en, - "pt", - rdfs:comment "The Didot point is a unit of length defined as 0.3759e-3 metre."@en, - rdfs:label "point (Didot)"@en - - -Individual: - - Annotations: - "Postscript point"@en, - "pt", - rdfs:comment "The Postscript point is a unit of length defined as 0.013888888888888888888888888888889 inch."@en, - rdfs:label "point (Postscript)"@en - - -Individual: - - Annotations: - "TeX point"@en, - "pt", - rdfs:comment "The TeX point is a unit of length defined as 0.01383700013837000138370001383 inch."@en, - rdfs:label "point (TeX)"@en - - -Individual: - - Annotations: - "P", - rdfs:comment "The poise is a unit of dynamic viscosity defined as 1.0e-1 pascal second (time)."@en, - rdfs:label "poise"@en, - rdfs:label "poise"@nl - - -Individual: - - Annotations: - "lbf", - rdfs:comment "The pound-force is a unit of force defined as 4.448222 newton."@en, - rdfs:label "pound-force"@en - - -Individual: - - Annotations: - "apothecaries' pound"@en, - "pound (troy)"@en, - "troy pound"@en, - "lb", - rdfs:comment "The apothecaries' pound is a unit of mass defined as 3.732417e-1 kilogram."@en, - rdfs:label "pound (apthecaries')"@en - - -Individual: - - Annotations: - "avoirdupois pound"@en, - "lb", - rdfs:comment "The avoirdupois pound is a unit of mass defined as 4.535924e-1 kilogram."@en, - rdfs:label "pound (avoirdupois)"@en - - -Individual: - - Annotations: - rdfs:label "pound sterling"@en, - rdfs:label "英镑"@zh - - -Individual: - - Annotations: - rdfs:comment "The poundal is a unit of force defined as 1.382550e-1 newton."@en, - rdfs:label "poundal"@en - - -Individual: - - Annotations: - "\\quadUnit", - rdfs:comment "The quad is a unit of energy defined as 1.0e15 British thermal unit (International Table)."@en, - rdfs:label "quad"@en - - -Individual: - - Annotations: - "imperial quart"@en, - rdfs:comment "The imperial quart is a unit of volume defined as 1.1365 litre."@en, - rdfs:label "quart (imperial)"@en - - -Individual: - - Annotations: - "rad", - rdfs:comment "The rad is a unit of absorbed dose defined as 1.0e-2 gray."@en, - rdfs:label "rad"@en, - rdfs:label "rad"@nl - - -Individual: - - Annotations: - "The radian is a unit of angle defined as the angle subtended at the center of a circle by an arc that is equal in length to the radius of the circle. The radian is a derived unit in the International System of Units.", - "rad", - rdfs:comment "The radian is a unit of angle defined as the angle subtended at the center of a circle by an arc that is equal in length to the radius of the circle."@en, - rdfs:label "radiaal"@nl, - rdfs:label "radian"@en, - rdfs:label "弧度"@zh - - -Individual: - - Annotations: - "rad s-1", - "rad·s-1", - "rad/s", - rdfs:label "radiaal per seconde"@nl, - rdfs:label "radian per second"@en - - -Individual: - - Annotations: - "rad s-2", - "rad·s-2", - "rad/s2", - rdfs:label "radiaal per seconde kwadraat"@nl, - rdfs:label "radian per second squared"@en - - -Individual: - - Annotations: - "cm-3", - rdfs:label "omgekeerde kubieke centimeter"@nl, - rdfs:label "reciprocal cubic centimetre"@en - - -Individual: - - Annotations: - "m-3", - rdfs:label "omgekeerde kubieke meter"@nl, - rdfs:label "reciprocal cubic metre"@en - - -Individual: - - Annotations: - "pc-3", - rdfs:label "omgekeerde kubieke parsec"@nl, - rdfs:label "reciprocal cubic parsec"@en - - -Individual: - - Annotations: - "d-1", - rdfs:label "omgekeerde dag"@nl, - rdfs:label "reciprocal day"@en - - -Individual: - - Annotations: - "H-1", - rdfs:label "omgekeerde henry"@nl, - rdfs:label "reciprocal henry"@en - - -Individual: - - Annotations: - "h-1", - rdfs:label "omgekeerd uur"@nl, - rdfs:label "reciprocal hour"@en - - -Individual: - - Annotations: - "Reciprocal metre is a unit of wavenumber defined as 1 divided by metre. Reciprocal metre is a derived unit in the International System of Units.", - "m-1", - rdfs:comment "Reciprocal metre is a unit of wavenumber defined as 1 divided by metre."@en, - rdfs:label "omgekeerder meter"@nl, - rdfs:label "reciprocal metre"@en - - -Individual: - - Annotations: - "min-1", - rdfs:label "omgekeerde minuut"@nl, - rdfs:label "reciprocal minute"@en - - -Individual: - - Annotations: - "(Pa s)-1", - "(Pa·s)-1", - "Pa-1·s-1", - "Pa-1 s-1", - rdfs:label "omgekeerde pascal seconde"@nl, - rdfs:label "reciprocal pascal second"@en - - -Individual: - - Annotations: - "s-1", - rdfs:label "omgekeerde seconde"@nl, - rdfs:label "reciprocal second"@en - - -Individual: - - Annotations: - "cm-2", - rdfs:label "omgekeerde vierkante centimeter"@nl, - rdfs:label "reciprocal square centimetre"@en - - -Individual: - - Annotations: - "m-2", - rdfs:label "omgekeerde vierkante meter"@nl, - rdfs:label "reciprocal square metre"@en - - -Individual: - - Annotations: - "W-1", - rdfs:label "omgekeerde watt"@nl, - rdfs:label "reciprocal watt"@en - - -Individual: - - Annotations: - "a-1", - rdfs:label "omgekeerd jaar"@nl, - rdfs:label "reciprocal year"@en - - -Individual: - - Annotations: - "rem", - rdfs:comment "The rem is a unit of dose equivalent defined as 1.0e-2 sievert."@en, - rdfs:label "rem"@en, - rdfs:label "rem"@nl - - -Individual: - - Annotations: - "r", - rdfs:comment "The revolution is a unit of angle defined as 6.283185 radian."@en, - rdfs:label "revolution"@en - - -Individual: - - Annotations: - rdfs:comment "The rhe is a unit of fluidity defined as 10 reciprocal pascal second (time)."@en, - rdfs:label "rhe"@en, - rdfs:label "rhe"@nl - - -Individual: - - Annotations: - "US rod"@en, - "perch"@en, - "pole"@en, - "rd", - rdfs:comment "The US rod is a unit of length defined as 5.029210 metre."@en, - rdfs:label "rod (US)"@en - - -Individual: - - Annotations: - "R", - rdfs:comment "The röntgen is a unit of exposure to x and γ rays defined as 2.58e-4 coulomb per kilogram."@en, - rdfs:label "röntgen"@en, - rdfs:label "röntgen"@nl - - -Individual: - - Annotations: - "arcsecond"@en, - "boogseconde"@nl, - "second of arc"@en, - "\"", - rdfs:comment "The second (angle) is a unit of angle defined as 4.848137e-6 radian."@en, - rdfs:label "second (angle)"@en, - rdfs:label "seconde (hoek)"@nl, - rdfs:label "秒(角度)"@zh - - -Individual: - - Annotations: - "arcsecond squared"@en, - "arcsec2", - rdfs:label "second (angle) squared"@en - - -Individual: - - Annotations: - "second (sidereal)"@en, - "sidereal second"@en, - rdfs:comment "The sidereal second is a unit of time defined as 9.972696e-1 second."@en, - rdfs:label "second (sidereal)"@en - - -Individual: - - Annotations: - "The second is a unit of time defined as the duration of 9 192 631 770 periods of the radiation corresponding to the transition between the two hyperfine levels of the ground state of the cesium 133 atom. The second is a base unit in the International System of Units.", - "s", - "sec", - rdfs:comment "The second is a unit of time defined as the duration of 9 192 631 770 periods of the radiation corresponding to the transition between the two hyperfine levels of the ground state of the cesium 133 atom."@en, - rdfs:label "second"@en, - rdfs:label "seconde"@nl, - rdfs:label "秒"@zh - - -Individual: - - Annotations: - "s·A", - "s A", - rdfs:label "second ampere"@en, - rdfs:label "seconde ampère"@nl - - -Individual: - - Annotations: - "s2", - rdfs:label "second squared"@en, - rdfs:label "seconde kwadraat"@nl - - -Individual: - - Annotations: - rdfs:comment "The shake is a unit of time defined as 1.0e-8 second."@en, - rdfs:label "shake"@en - - -Individual: - - Annotations: - "Sh", - rdfs:comment "The shannon is a unit of information capacity defined as 1 bit."@en, - rdfs:label "shannon"@en, - rdfs:label "shannon"@nl - - -Individual: - - Annotations: - "The siemens is a unit of electrical conductance defined as 1 divided by ohm = ampere divided by volt = coulomb squared times second divided by kilogram times square metre = ampere squared times second to the power 3 divided by kilogram times square metre. The siemens is a derived unit in the International System of Units.", - "S", - rdfs:comment "The siemens is a unit of electrical conductance defined as 1 divided by ohm = ampere divided by volt = coulomb squared times second divided by kilogram times square metre = ampere squared times second to the power 3 divided by kilogram times square metre."@en, - rdfs:label "siemens"@en, - rdfs:label "siemens"@nl - - -Individual: - - Annotations: - "S m-1", - "S·m-1", - "S/m", - rdfs:label "siemens per meter"@nl, - rdfs:label "siemens per metre"@en - - -Individual: - - Annotations: - "The sievert is a unit of dose equivalent defined as joule divided by kilogram = square metre divided by second squared. The sievert is a derived unit is the International System of Units.", - "Sv", - rdfs:comment "The sievert is a unit of dose equivalent defined as joule divided by kilogram = square metre divided by second squared."@en, - rdfs:label "sievert"@en, - rdfs:label "sievert"@nl - - -Individual: - - Annotations: - "slug", - rdfs:comment "The slug is a unit of mass defined as 1.459390e1 kilogram."@en, - rdfs:label "slug"@en, - rdfs:label "金属块"@zh - - -Individual: - - Annotations: - "L_{\\astrosun}", - "L_☉", - rdfs:comment "Solar luminosity is a unit used in astronomy to denote stellar or galactic radiant fluxes (http://en.wikipedia.org/wiki/SolarLuminosity)."@en, - rdfs:label "solar luminosity"@en - - -Individual: - - Annotations: - "M_{\\astrosun}", - "M_☉", - rdfs:comment "Solar mass is a unit used in astronomy to denote stellar or galactic masses (http://en.wikipedia.org/wiki/SolarMass)."@en, - rdfs:label "solar mass"@en, - rdfs:label "zonsmassa"@nl - - -Individual: - - Annotations: - "M_{\\astrosun} pc^{-3}", - "M_☉ pc-3", - "M_☉·pc-3", - "M_☉/pc3", - rdfs:comment "The mass (in solar masses) per cubic parsec."@en, - rdfs:label "solar mass per cubic parsec"@en, - rdfs:label "zonsmassa per kubieke parsec"@nl - - -Individual: - - Annotations: - "R_{\\astrosun}", - "R_☉", - rdfs:comment "Solar radius is a unit used in astronomy to denote stellar or stellar system radii (http://en.wikipedia.org/wiki/solarRadius)."@en, - rdfs:label "solar radius"@en - - -Individual: - - Annotations: - "ft2", - rdfs:label "square foot (international)"@en - - -Individual: - - Annotations: - "in2", - rdfs:label "square inch (international)"@en - - -Individual: - - Annotations: - "Square metre is a unit of area defined as the area of a square whose sides measure exactly one metre. Square metre is a derived unit in the International System of Units.", - "m2", - rdfs:comment "Square metre is a unit of area defined as the area of a square whose sides measure exactly one metre."@en, - rdfs:label "square metre"@en, - rdfs:label "vierkante meter"@nl, - rdfs:label "平方米"@zh - - -Individual: - - Annotations: - "m2 K W-1", - "m2·K/W", - "m2·K·W-1", - "m2 K/W", - rdfs:label "square metre kelvin per watt"@en, - rdfs:label "vierkante meter kelvin per watt"@nl - - -Individual: - - Annotations: - "m2 s-1", - "m2·s-1", - "m2/s", - rdfs:label "square metre per second"@en, - rdfs:label "vierkante meter per seconde"@nl - - -Individual: - - Annotations: - "m2 m-2", - "m2·m-2", - "m2/m2", - rdfs:label "square metre per square metre"@en, - rdfs:label "vierkante meter per vierkante meter"@nl - - -Individual: - - -Individual: - - Annotations: - "yd2", - rdfs:label "square yard (international)"@en - - -Individual: - - Annotations: - "statA", - rdfs:comment "The statampere is a unit of electric current defined as 3.335641e-10 ampere."@en, - rdfs:label "statampere"@en, - rdfs:label "statampère"@nl - - -Individual: - - Annotations: - "statC", - rdfs:comment "The statcoulomb is a unit of electric charge defined as 3.335641e-10 coulomb."@en, - rdfs:label "statcoulomb"@en, - rdfs:label "statcoulomb"@nl - - -Individual: - - Annotations: - "statF", - rdfs:comment "The statfarad is a unit of capacitance defined as 1.112650e-12 farad."@en, - rdfs:label "statfarad"@en, - rdfs:label "statfarad"@nl - - -Individual: - - Annotations: - "statH", - rdfs:comment "The stathenry is a unit of inductance defined as 8.987552e11 henry."@en, - rdfs:label "stathenry"@en, - rdfs:label "stathenry"@nl - - -Individual: - - Annotations: - "statsiemens"@en, - "statsiemens"@nl, - rdfs:comment "The statmho is a unit of electrical conductance defined as 1.112650e-12 siemens."@en, - rdfs:label "statmho"@en, - rdfs:label "statmho"@nl - - -Individual: - - Annotations: - "statΩ", - rdfs:comment "The statohm is a unit of electrical resistance defined as 8.987552e11 ohm."@en, - rdfs:label "statohm"@en, - rdfs:label "statohm"@nl - - -Individual: - - Annotations: - "statT", - rdfs:comment "The stattesla is a unit of magnetic flux density defined as 2.9979e6 tesla."@en, - rdfs:label "stattesla"@en, - rdfs:label "stattesla"@nl - - -Individual: - - Annotations: - "statV", - rdfs:comment "The statvolt is a unit of electric potential defined as 2.997925e2 volt."@en, - rdfs:label "statvolt"@en, - rdfs:label "statvolt"@nl - - -Individual: - - Annotations: - "statWb", - rdfs:comment "The statweber is a unit of magnetic flux defined as 2.9979e2 weber."@en, - rdfs:label "statweber"@en, - rdfs:label "statweber"@nl - - -Individual: - - Annotations: - "The steradian is a unit of solid angle defined as the solid angle subtended at the center of a sphere by a portion of the surface of the sphere that has an area equal to the square of the radius of the sphere. The steradian is a derived unit in the International System of Units.", - "sr", - rdfs:comment "The steradian is a unit of solid angle defined as the solid angle subtended at the center of a sphere by a portion of the surface of the sphere that has an area equal to the square of the radius of the sphere."@en, - rdfs:label "steradiaal"@nl, - rdfs:label "steradian"@en, - rdfs:label "球面度"@zh - - -Individual: - - Annotations: - rdfs:comment "The stere is a unit of volume defined as cubic metre."@en, - rdfs:label "stere"@en - - -Individual: - - Annotations: - "sb", - rdfs:comment "The stilb is a unit of luminance defined as 1.0e4 candela per square metre."@en, - rdfs:label "stilb"@en, - rdfs:label "stilb"@nl - - -Individual: - - Annotations: - "St", - rdfs:comment "The stokes is a unit of kinematic viscosity defined as 1.0e-4 square metre per second (time)."@en, - rdfs:label "stokes"@en, - rdfs:label "stokes"@nl - - -Individual: - - Annotations: - "US tablespoon"@en, - rdfs:comment "The US tablespoon is a unit of volume defined as 1.478676e-5 cubic metre."@en, - rdfs:label "tablespoon (US)"@en - - -Individual: - - Annotations: - "US teaspoon"@en, - rdfs:comment "The US teaspoon is a unit of volume defined as 4.928922e-6 cubic metre."@en, - rdfs:label "teaspoon (US)"@en - - -Individual: - - Annotations: - "terawatt-hour"@en, - "terawatthour"@en, - "TWh", - "TW·h", - "TW h", - rdfs:label "terawatt hour"@en - - -Individual: - - Annotations: - "The tesla is a unit of magnetic flux density defined as volt times second divided by square metre = newton divided by ampere times metre = weber divided by square metre = kilogram divided by coulomb times second = kilogram divided by ampere times second squared. The tesla is a derived unit in the International System of Units.", - "T", - rdfs:comment "The tesla is a unit of magnetic flux density defined as volt times second divided by square metre = newton divided by ampere times metre = weber divided by square metre = kilogram divided by coulomb times second = kilogram divided by ampere times second squared."@en, - rdfs:label "tesla"@en, - rdfs:label "tesla"@nl - - -Individual: - - Annotations: - "EC therm"@en, - rdfs:comment "The EC therm is a unit of energy defined as 1.05506e8 joule."@en, - rdfs:label "therm (EC)"@en - - -Individual: - - Annotations: - "US therm"@en, - rdfs:comment "The US therm is a unit of energy defined as 1.054804e8 joule."@en, - rdfs:label "therm (US)"@en - - -Individual: - - Annotations: - rdfs:comment "Thousand is a unit of dimension one defined as 1000."@en, - rdfs:label "thousand piece"@en - - -Individual: - - Annotations: - "short ton-force"@en, - rdfs:comment "The short ton-force is a unit of force defined as 8.896443e3 newton."@en, - rdfs:label "ton-force (short)"@en - - -Individual: - - Annotations: - "long ton"@en, - rdfs:comment "The long ton is a unit of mass defined as 1.016047e3 kilogram."@en, - rdfs:label "ton (long)"@en - - -Individual: - - Annotations: - "register ton"@en, - rdfs:comment "The register ton is a unit of volume defined as 100 cubic foot = 2.8316846592 cubic metre."@en, - rdfs:label "ton (register)"@en - - -Individual: - - Annotations: - "short ton"@en, - rdfs:comment "The short ton is a unit of mass defined as 9.071847e2 kilogram."@en, - rdfs:label "ton (short)"@en - - -Individual: - - Annotations: - "short assay ton"@en, - rdfs:comment "The short assay ton is a unit of mass defined as 2.916667e-2 kilogram."@en, - rdfs:label "ton (short assay)"@en - - -Individual: - - Annotations: - rdfs:comment "The ton of refrigeration is a unit of power defined as 3.516853e3 watt."@en, - rdfs:label "ton of refrigeration"@en - - -Individual: - - Annotations: - rdfs:comment "The ton of TNT is a unit of energy defined as 4.184e9 joule."@en, - rdfs:label "ton of TNT"@en - - -Individual: - - Annotations: - "metric ton"@en, - "t", - rdfs:comment "The tonne is a unit of mass defined as 1000 kilogram."@en, - rdfs:label "ton"@nl, - rdfs:label "tonne"@en, - rdfs:label "公吨"@zh - - -Individual: - - Annotations: - "Torr", - rdfs:comment "The torr is a unit of pressure defined as 1.333224e2 pascal."@en, - rdfs:label "torr"@en, - rdfs:label "torr"@nl - - -Individual: - - Annotations: - "u", - rdfs:comment "The unified atomic mass unit is a unit of mass defined as 1.660538782(83)e-27 kilogram."@en, - rdfs:label "unified atomic mass unit"@en - - -Individual: - - Annotations: - rdfs:comment "The unit pole is a unit of magnetic flux defined as 1.256637e-7 weber."@en, - rdfs:label "unit pole"@en - - -Individual: - - Annotations: - "The volt is a unit of electric potential defined as watt divided by ampere = joule divided by coulomb = newton times metre divided by ampere times second = kilogram times square metre divided by ampere times second to the power 3. The volt is a derived unit in the International System of Units.", - "V", - rdfs:comment "The volt is a unit of electric potential defined as watt divided by ampere = joule divided by coulomb = newton times metre divided by ampere times second = kilogram times square metre divided by ampere times second to the power 3."@en, - rdfs:label "volt"@en, - rdfs:label "volt"@nl - - -Individual: - - Annotations: - "V A-1", - "V·A-1", - "V/A", - rdfs:label "volt per ampere"@en, - rdfs:label "volt per ampère"@nl - - -Individual: - - Annotations: - "V m-1", - "V·m-1", - "V/m", - rdfs:label "volt per meter"@nl, - rdfs:label "volt per metre"@en - - -Individual: - - Annotations: - "V W-1", - "V·W-1", - "V/W", - rdfs:label "volt per watt"@en, - rdfs:label "volt per watt"@nl - - -Individual: - - Annotations: - "V·s", - "V s", - rdfs:label "volt second"@en, - rdfs:label "volt seconde"@nl - - -Individual: - - Annotations: - rdfs:label "volume dimension"@en, - rdfs:label "volumedimensie"@nl - - -Individual: - - Annotations: - "The watt is a unit of power defined as joule divided by second = newton times metre divided by second = volt times ampere = kilogram times square metre divided by second to the power 3. The watt is a derived unit in the International System of Units.", - "W", - rdfs:comment "The watt is a unit of power defined as joule divided by second = newton times metre divided by second = volt times ampere = kilogram times square metre divided by second to the power 3."@en, - rdfs:label "watt"@en, - rdfs:label "watt"@nl - - -Individual: - - Annotations: - "watt-hour"@en, - "watthour"@en, - "Wh", - "W·h", - "W h", - rdfs:label "watt hour"@en - - -Individual: - - Annotations: - "W A-1", - "W·A-1", - "W/A", - rdfs:label "watt per ampere"@en, - rdfs:label "watt per ampère"@nl - - -Individual: - - Annotations: - "W m-1 K-1", - "W/(m·K)", - "W·m-1·K-1", - "W/(m K)", - rdfs:label "watt per meter kelvin"@nl, - rdfs:label "watt per metre kelvin"@en - - -Individual: - - Annotations: - "W m-2", - "W·m-2", - "W/m2", - rdfs:label "watt per square metre"@en, - rdfs:label "watt per vierkante meter"@nl - - -Individual: - - Annotations: - "W-1 m2 K", - "W-1·m2·K", - "W/(m2·K)", - "W/m2 K", - rdfs:label "watt per square metre kelvin"@en, - rdfs:label "watt per vierkante meter kelvin"@nl - - -Individual: - - Annotations: - "W m-2 sr-1", - "W/(m2·sr)", - "W·m-2·sr-1", - "W/(m2 sr)", - rdfs:label "watt per square metre steradian"@en, - rdfs:label "watt per vierkante meter steradiaal"@nl - - -Individual: - - Annotations: - "W sr-1", - "W·sr-1", - "W/sr", - rdfs:label "watt per steradiaal"@nl, - rdfs:label "watt per steradian"@en - - -Individual: - - Annotations: - "The weber is a unit of magnetic flux defined as kilogram times square metre divided by second squared times ampere = volt times second = joule divided by ampere. The weber is a derived unit in the International System of Units.", - "Wb", - rdfs:comment "The weber is a unit of magnetic flux defined as kilogram times square metre divided by second squared times ampere = volt times second = joule divided by ampere."@en, - rdfs:label "weber"@en, - rdfs:label "weber"@nl - - -Individual: - - Annotations: - "Wb A-1", - "Wb·A-1", - "Wb/A", - rdfs:label "weber per ampere"@en, - rdfs:label "weber per ampère"@nl - - -Individual: - - Annotations: - "Wb m-2", - "Wb·m-2", - "Wb/m2", - rdfs:label "weber per square metre"@en, - rdfs:label "weber per vierkante meter"@nl - - -Individual: - - Annotations: - "international yard"@en, - "yd", - rdfs:comment "The international yard is a unit of length defined as 9.144e-1 metre."@en, - rdfs:label "yard (international)"@en, - rdfs:label "码(国际)"@zh - - -Individual: - - Annotations: - "sidereal year"@en, - rdfs:comment "The sidereal year is a unit of time defined as 3.155815e7 second."@en, - rdfs:label "year (sidereal)"@en - - -Individual: - - Annotations: - "tropical year"@en, - rdfs:comment "The tropical year is a unit of time defined as 3.155693e7 second."@en, - rdfs:label "year (tropical)"@en - - -Individual: - - Annotations: - "\\yearUnit", - "y", - "yr", - "a", - rdfs:comment "The year is a unit of time defined as 31556952 second."@en, - rdfs:label "jaar"@nl, - rdfs:label "year"@en - - diff --git a/owl/om-subset.ttl b/owl/om-subset.ttl deleted file mode 100644 index 335104e..0000000 --- a/owl/om-subset.ttl +++ /dev/null @@ -1,272 +0,0 @@ -@prefix : . -@prefix om: . -@prefix owl: . -@prefix rdf: . -@prefix xml: . -@prefix xsd: . -@prefix rdfs: . - - rdf:type owl:Ontology ; - owl:versionIRI . - -################################################################# -# Annotation properties -################################################################# - -### http://www.ontology-of-units-of-measure.org/resource/om-2/alternativeLabel -om:alternativeLabel rdf:type owl:AnnotationProperty . - - -### http://www.ontology-of-units-of-measure.org/resource/om-2/alternativeSymbol -om:alternativeSymbol rdf:type owl:AnnotationProperty . - - -### http://www.ontology-of-units-of-measure.org/resource/om-2/symbol -om:symbol rdf:type owl:AnnotationProperty . - - -### http://www.ontology-of-units-of-measure.org/resource/om-2/unofficialAbbreviation -om:unofficialAbbreviation rdf:type owl:AnnotationProperty . - -################################################################# -# Object Properties -################################################################# - -### http://www.ontology-of-units-of-measure.org/resource/om-2/hasDimension -om:hasDimension rdf:type owl:ObjectProperty . - - -### http://www.ontology-of-units-of-measure.org/resource/om-2/hasPrefix -om:hasPrefix rdf:type owl:ObjectProperty . - - -### http://www.ontology-of-units-of-measure.org/resource/om-2/hasUnit -om:hasUnit rdf:type owl:ObjectProperty ; - rdfs:domain [ rdf:type owl:Class ; - owl:unionOf ( om:IntervalScale - om:Measure - om:PrefixedUnit - om:RatioScale - om:SingularUnit - om:UnitMultiple - ) - ] ; - rdfs:range om:Unit ; - rdfs:label "has unit"@en , - "単位を持つ"@ja . - - -### http://www.ontology-of-units-of-measure.org/resource/om-2/hasValue -om:hasValue rdf:type owl:ObjectProperty . - - -################################################################# -# Data properties -################################################################# - -### http://www.ontology-of-units-of-measure.org/resource/om-2/hasNumericalValue -om:hasNumericalValue rdf:type owl:DatatypeProperty ; - rdfs:domain [ rdf:type owl:Class ; - owl:unionOf ( om:Measure - om:Point - ) - ] ; - rdfs:label "has numerical value"@en . - - -################################################################# -# Classes -################################################################# - -### http://www.ontology-of-units-of-measure.org/resource/om-2/Depth -om:Depth rdf:type owl:Class ; - rdfs:subClassOf om:Length ; - om:symbol "d" ; - rdfs:label "depth"@en , - "diepte"@nl . - - -### http://www.ontology-of-units-of-measure.org/resource/om-2/Diameter -om:Diameter rdf:type owl:Class ; - rdfs:subClassOf om:Length ; - om:symbol "d" ; - rdfs:label "diameter"@en , - "diameter"@nl , - "直径"@zh . - - -### http://www.ontology-of-units-of-measure.org/resource/om-2/Height -om:Height rdf:type owl:Class ; - rdfs:subClassOf om:Length ; - om:symbol "h" ; - rdfs:label "height"@en , - "hoogte"@nl . - - -### http://www.ontology-of-units-of-measure.org/resource/om-2/IntervalScale -om:IntervalScale rdf:type owl:Class . - - -### http://www.ontology-of-units-of-measure.org/resource/om-2/Length -om:Length rdf:type owl:Class ; - rdfs:subClassOf om:Quantity , - [ rdf:type owl:Restriction ; - owl:onProperty om:hasValue ; - owl:allValuesFrom [ rdf:type owl:Restriction ; - owl:onProperty om:hasUnit ; - owl:allValuesFrom om:LengthUnit - ] - ] , - [ rdf:type owl:Restriction ; - owl:onProperty om:hasDimension ; - owl:hasValue om:length-Dimension - ] ; - om:alternativeSymbol "L" ; - om:symbol "l" ; - rdfs:comment "Length is the amount of space between two geographical points along a curve. It is a base quantity in the International System of Units and other systems of units. Length is speed times time. The metre, a base unit of length in the International System of Units, is defined in terms of speed of light during a certain time interval."@en ; - rdfs:label "lengte"@nl , - "length"@en , - "长度"@zh . - - -### http://www.ontology-of-units-of-measure.org/resource/om-2/LengthUnit -om:LengthUnit rdf:type owl:Class . - - -### http://www.ontology-of-units-of-measure.org/resource/om-2/Measure -om:Measure rdf:type owl:Class ; - rdfs:comment "A measure combines a number to a unit of measure. For example, \"3 m\" is a measure."@en ; - rdfs:label "measure"@en . - - -### http://www.ontology-of-units-of-measure.org/resource/om-2/Point -om:Point rdf:type owl:Class . - - -### http://www.ontology-of-units-of-measure.org/resource/om-2/PrefixedUnit -om:PrefixedUnit rdf:type owl:Class . - - -### http://www.ontology-of-units-of-measure.org/resource/om-2/Quantity -om:Quantity rdf:type owl:Class . - - -### http://www.ontology-of-units-of-measure.org/resource/om-2/RatioScale -om:RatioScale rdf:type owl:Class . - - -### http://www.ontology-of-units-of-measure.org/resource/om-2/SingularUnit -om:SingularUnit rdf:type owl:Class . - - -### http://www.ontology-of-units-of-measure.org/resource/om-2/Thickness -om:Thickness rdf:type owl:Class ; - rdfs:subClassOf om:Length ; - om:alternativeSymbol "δ" ; - om:symbol "d" ; - rdfs:label "dikte"@nl , - "thickness"@en . - - -### http://www.ontology-of-units-of-measure.org/resource/om-2/Unit -om:Unit rdf:type owl:Class . - - -### http://www.ontology-of-units-of-measure.org/resource/om-2/UnitMultiple -om:UnitMultiple rdf:type owl:Class . - -### http://www.ontology-of-units-of-measure.org/resource/om-2/Volume -om:Volume rdf:type owl:Class ; - rdfs:subClassOf om:Quantity , - [ rdf:type owl:Restriction ; - owl:onProperty om:hasValue ; - owl:allValuesFrom [ rdf:type owl:Restriction ; - owl:onProperty om:hasUnit ; - owl:allValuesFrom om:VolumeUnit - ] - ] , - [ rdf:type owl:Restriction ; - owl:onProperty om:hasDimension ; - owl:hasValue om:volume-Dimension - ] ; - om:alternativeLabel "inhoud"@nl ; - om:alternativeSymbol "v" ; - om:symbol "V" ; - rdfs:comment "Volume is a measure of how much three-dimensional space any phenomenon occupies. It is a derived quantity in the International System of Units. Volume is length to the power 3."@en ; - rdfs:label "volume"@en , - "volume"@nl , - "体积"@zh . - -### http://www.ontology-of-units-of-measure.org/resource/om-2/VolumeUnit -om:VolumeUnit rdf:type owl:Class . - - - - -### http://www.ontology-of-units-of-measure.org/resource/om-2/Width -om:Width rdf:type owl:Class ; - rdfs:subClassOf om:Length ; - om:symbol "w" ; - rdfs:label "breedte"@nl , - "width"@en . - - -################################################################# -# Individuals -################################################################# - -### http://www.ontology-of-units-of-measure.org/resource/om-2/length-Dimension -om:length-Dimension rdf:type owl:NamedIndividual . - - -### http://www.ontology-of-units-of-measure.org/resource/om-2/metre -om:metre rdf:type owl:NamedIndividual . - - -### http://www.ontology-of-units-of-measure.org/resource/om-2/milli -om:milli rdf:type owl:NamedIndividual . - - -### http://www.ontology-of-units-of-measure.org/resource/om-2/millimetre -om:millimetre rdf:type owl:NamedIndividual , - om:PrefixedUnit ; - om:hasDimension om:length-Dimension ; - om:hasPrefix om:milli ; - om:hasUnit om:metre ; - om:symbol "mm" ; - rdfs:comment "The millimetre is a unit of length defined as 1.0e-3 metre."@en ; - rdfs:label "millimeter"@nl , - "millimetre"@en , - "毫米"@zh . - -### http://www.ontology-of-units-of-measure.org/resource/om-2/litre -om:litre rdf:type owl:NamedIndividual . - - -### http://www.ontology-of-units-of-measure.org/resource/om-2/micro -om:micro rdf:type owl:NamedIndividual . - - -### http://www.ontology-of-units-of-measure.org/resource/om-2/microlitre -om:microlitre rdf:type owl:NamedIndividual , - om:PrefixedUnit ; - om:hasDimension om:volume-Dimension ; - om:hasPrefix om:micro ; - om:hasUnit om:litre ; - om:symbol "μl" ; - om:unofficialAbbreviation "ul" ; - rdfs:label "microliter"@nl , - "microlitre"@en . - - -### http://www.ontology-of-units-of-measure.org/resource/om-2/volume-Dimension -om:volume-Dimension rdf:type owl:NamedIndividual . - - - - -### Generated by the OWL API (version 4.5.9.2019-02-01T07:24:44Z) https://github.com/owlcs/owlapi - -# Local Variables: -# mode: ttl -# End: diff --git a/owl/owlery-catalog.xml b/owl/owlery-catalog.xml deleted file mode 100644 index 43cca5a..0000000 --- a/owl/owlery-catalog.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/owl/owlery-conf/.gitignore b/owl/owlery-conf/.gitignore deleted file mode 100644 index 2e8aefc..0000000 --- a/owl/owlery-conf/.gitignore +++ /dev/null @@ -1 +0,0 @@ -owlery.log diff --git a/owl/owlery-conf/application.conf b/owl/owlery-conf/application.conf deleted file mode 100644 index 804f0b0..0000000 --- a/owl/owlery-conf/application.conf +++ /dev/null @@ -1,24 +0,0 @@ -akka { - loglevel = DEBUG - log-config-on-start = on - loggers = ["akka.event.Logging$DefaultLogger"] -} - -akka.http.server { - request-timeout = infinite - idle-timeout = infinite -} - -owlery { - loglevel = DEBUG - port = 8080 - host = localhost - kbs = [ - { - name = sd2e-container-catalogs - location = "/srv/owl/all-catalogs.ttl" - reasoner = hermit - catalog = "/srv/owl/owlery-catalog.xml" - } - ] -} \ No newline at end of file diff --git a/owl/owlery-conf/logback.xml b/owl/owlery-conf/logback.xml deleted file mode 100644 index dceb3dc..0000000 --- a/owl/owlery-conf/logback.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{0} %msg%n - - - - - - /srv/conf/owlery.log - true - - %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{0} %msg%n - - - - - - - - - - - diff --git a/owl/sbolowl3.rdf b/owl/sbolowl3.rdf deleted file mode 100644 index bae413b..0000000 --- a/owl/sbolowl3.rdf +++ /dev/null @@ -1,924 +0,0 @@ - - - - - - - - - hasNamespace - - - - - - hasAttachment - - - - - - encoding - - - - - - - - - - - - - - type - - - - - - - - - - - - - role - - - - - - - - - - - - - hasSequence - - - - - - - - - - - - - hasFeature - - - - - - hasInteraction - - - - - - hasConstraint - - - - - - hasModel - - - - - - - hasInterface - - - - - - - - - - - - - - - - - - - - - orientation - - - - - - roleIntegration - - - - - - - instanceOf - - - - - - sourceLocation - - - - - - - - - - - - - - hasLocation - - - - - - - inChildOf - - - - - - definition - - - - - - restriction - - - - - - - subject - - - - - - - object - - - - - - hasParticipation - - - - - - - participant - - - - - - - higherOrderParticipant - - - - - - input - - - - - - output - - - - - - nondirectional - - - - - - - template - - - - - - participant - - - - - - - variable - - - - - - variantMeasure - - - - - - variantDerivation - - - - - - variantCollection - - - - - - variant - - - - - - - built - - - - - - - - - - - - - source - - - - - - language - - - - - - framework - - - - - - member - - - - - - format - - - - - - - displayId - - - - - - - name - - - - - - - description - - - - - - hasMeasure - - - - - - - elements - - - - - - - - - - - - - 1 - - - - - - - - order - - - - - - - - - - - - - 1 - - - - - - - - start - - - - - - - - - - - - - 1 - - - - - - - - end - - - - - - - - - - - - - 0 - - - - - - - - start - - - - - - - - - - - - - 0 - - - - - - - - size - - - - - - - hash - - - - - - - hashAlgorithm - - - - - Identified - - - - - - - - - - - TopLevel - - - - - Sequence - - - - - - - - - - - Component - - - - - - - - - - - - - - - - - - - - - - - Model - - - - - Implementation - - - - - - - - - - - Attachment - - - - - Collection - - - - - Experiment - - - - - ExperimentalData - - - - - - - - - - - CombinatorialDerivation - - - - - - - - - - - Interaction - - - - - - - - - - - - - - - - - - - - - - - Constraint - - - - - Interface - - - - - Feature - - - - - - - - - - - SubComponent - - - - - - - - - - - - - - - 1 - - - - - - - - - ComponentReference - - - - - - - - - - - - - - - - - ExternallyDefined - - - - - - - - - - - LocalSubComponent - - - - - - - - - - - SequenceFeature - - - - - - - - - - - - - - - 1 - - - Location - - - - - - - - - - - - - - - 1 - - - - - - - - - - - - - - - - - - - - 1 - - - - - - - - - - Range - - - - - - - - - - - - - - - 0 - - - - - - - - - - Cut - - - - - EntireSequence - - - - - - - - - - - Participation - - - - - - - - - - - - - - - - - VariableFeature - - - - - - - - - - - - - - - - - - - - - inline - - - - - reverseComplement - - - - - - - - - - - - - CombinatorialDerivationStrategy - - - - - enumerate - - - - - sample - - - - - - - - - - - - - - - Cardinality - - - - - zeroOrOne - - - - - one - - - - - zeroOrMore - - - - - OneOrMore - - - - - - - - - - - - - - strategy - - - - - - - - - - - - - - - - cardinality - - - - diff --git a/owl/strateos-catalog.ttl b/owl/strateos-catalog.ttl deleted file mode 100644 index 354dc6d..0000000 --- a/owl/strateos-catalog.ttl +++ /dev/null @@ -1,2033 +0,0 @@ -@prefix : . -@prefix om: . -@prefix owl: . -@prefix rdf: . -@prefix xml: . -@prefix xsd: . -@prefix cont: . -@prefix rdfs: . -@base . - - rdf:type owl:Ontology ; - owl:imports , - ; - rdfs:label "Strateos Plate Catalog"@en . - -################################################################# -# Annotation properties -################################################################# - -### https://sift.net/container-ontology/container-ontology#hasVendor -cont:hasVendor rdf:type owl:AnnotationProperty . - - -################################################################# -# Data properties -################################################################# - -### https://sift.net/container-ontology/container-ontology#columnCount -cont:columnCount rdf:type owl:FunctionalProperty . - - -### https://sift.net/container-ontology/container-ontology#rowCount -cont:rowCount rdf:type owl:FunctionalProperty . - - -### https://sift.net/container-ontology/container-ontology#wellCount -cont:wellCount rdf:type owl:FunctionalProperty . - - -################################################################# -# Classes -################################################################# - -### http://www.ontology-of-units-of-measure.org/resource/om-2/Depth -om:Depth rdf:type owl:Class . - - -### http://www.ontology-of-units-of-measure.org/resource/om-2/Volume -om:Volume rdf:type owl:Class . - - -### https://sift.net/container-ontology/strateos-catalog#StrateosEquipment -:StrateosEquipment rdf:type owl:Class ; - owl:equivalentClass [ rdf:type owl:Restriction ; - owl:onProperty cont:availableAt ; - owl:hasValue :Strateos - ] . - - -################################################################# -# Individuals -################################################################# - -### http://www.ontology-of-units-of-measure.org/resource/om-2/microlitre -om:microlitre rdf:type owl:NamedIndividual . - - -### https://sift.net/container-ontology/container-ontology#Axygen -cont:Axygen rdf:type owl:NamedIndividual , - cont:VendorFirm ; - cont:vendorName "Axygen" ; - rdfs:label "Axygen" . - - -### https://sift.net/container-ontology/container-ontology#Chemspeed -cont:Chemspeed rdf:type owl:NamedIndividual , - cont:VendorFirm ; - cont:vendorName "Chemspeed" ; - rdfs:label "Chemspeed" . - - -### https://sift.net/container-ontology/container-ontology#Corning -cont:Corning rdf:type owl:NamedIndividual , - cont:VendorFirm ; - cont:vendorName "Corning" ; - rdfs:label "Corning" . - - -### https://sift.net/container-ontology/container-ontology#Costar -cont:Costar rdf:type owl:NamedIndividual , - cont:VendorFirm ; - cont:vendorName "Costar" ; - rdfs:label "Costar" . - - -### https://sift.net/container-ontology/container-ontology#Eppendorf -cont:Eppendorf rdf:type owl:NamedIndividual , - cont:VendorFirm ; - cont:vendorName "Eppendorf" ; - rdfs:label "Eppendorf" . - - -### https://sift.net/container-ontology/container-ontology#Fisher -cont:Fisher rdf:type owl:NamedIndividual , - cont:VendorFirm ; - cont:vendorName "Fisher" ; - rdfs:label "Fisher" . - - -### https://sift.net/container-ontology/container-ontology#Greiner -cont:Greiner rdf:type owl:NamedIndividual , - cont:VendorFirm ; - cont:vendorName "Greiner" ; - rdfs:label "Greiner" . - - -### https://sift.net/container-ontology/container-ontology#Labcyte -cont:Labcyte rdf:type owl:NamedIndividual , - cont:VendorFirm ; - cont:vendorName "Labcyte" ; - rdfs:label "Labcyte" . - - -### https://sift.net/container-ontology/container-ontology#Mesoscale -cont:Mesoscale rdf:type owl:NamedIndividual , - cont:VendorFirm ; - cont:vendorName "Mesoscale" ; - rdfs:label "Mesoscale" . - - -### https://sift.net/container-ontology/container-ontology#PerkinElmer -cont:PerkinElmer rdf:type owl:NamedIndividual , - cont:VendorFirm ; - cont:vendorName "PerkinElmer" ; - rdfs:label "PerkinElmer" . - - -### https://sift.net/container-ontology/container-ontology#ThermoFisher -cont:ThermoFisher rdf:type cont:VendorFirm ; - cont:vendorName "ThermoFisher" ; - rdfs:label "ThermoFisher" . - - -### https://sift.net/container-ontology/container-ontology#E%26K%20Scientific - rdf:type owl:NamedIndividual , - cont:VendorFirm ; - cont:vendorName "E&K Scientific" ; - rdfs:label "E&K Scientific" . - - -### https://sift.net/container-ontology/container-ontology#Sumitomo%20Bakelite%20Co. - rdf:type owl:NamedIndividual , - cont:VendorFirm ; - cont:vendorName "Sumitomo Bakelite Co." ; - rdfs:label "Sumitomo Bakelite Co." . - - -### https://sift.net/container-ontology/strateos-catalog#E%26K%20Scientific24-deep - rdf:type owl:NamedIndividual , - cont:Plate ; - cont:availableAt :Strateos ; - cont:equipmentVendor ; - cont:hasCatalogEntry ; - cont:hasColor cont:white ; - cont:height :height33 ; - cont:wellDepth :wellDepth33 ; - cont:wellVolume :wellvolume33 ; - cont:columnCount 6 ; - cont:rowCount 4 ; - cont:wellCount 24 ; - rdfs:comment "E&K Scientific 24-Well Pyramid Bottom Plate" ; - rdfs:label "24-deep" . - - -### https://sift.net/container-ontology/strateos-catalog#Sumitomo%20Bakelite%20Co.384-ubottom-white-tc - rdf:type owl:NamedIndividual , - cont:Plate ; - cont:availableAt :Strateos ; - cont:equipmentVendor ; - cont:hasCatalogEntry ; - cont:hasColor cont:white ; - cont:height :height40 ; - cont:wellDepth :wellDepth40 ; - cont:wellVolume :wellvolume40 ; - cont:columnCount 24 ; - cont:rowCount 16 ; - cont:wellCount 384 ; - rdfs:comment "Sumitomo Bakelite Co. Sumitomo Bakelite Co. PrimeSurface384U White Plate 3-D Cell Culture Plate" ; - rdfs:label "384-ubottom-white-tc" . - - -### https://sift.net/container-ontology/strateos-catalog#Axygenres-mw12-hp -:Axygenres-mw12-hp rdf:type owl:NamedIndividual , - cont:Plate ; - cont:availableAt :Strateos ; - cont:equipmentVendor cont:Axygen ; - cont:hasCatalogEntry ; - cont:hasColor cont:white ; - cont:height :height39 ; - cont:wellDepth :wellDepth39 ; - cont:wellVolume :wellvolume39 ; - cont:columnCount 12 ; - cont:rowCount 1 ; - cont:wellCount 12 ; - rdfs:comment "Axygen Multiple Well Reagent Reservoir with 12-Channel Trough, High Profile" ; - rdfs:label "res-mw12-hp" . - - -### https://sift.net/container-ontology/strateos-catalog#Axygenres-mw8-hp -:Axygenres-mw8-hp rdf:type owl:NamedIndividual , - cont:Plate ; - cont:availableAt :Strateos ; - cont:equipmentVendor cont:Axygen ; - cont:hasCatalogEntry ; - cont:hasColor cont:white ; - cont:height :height26 ; - cont:wellDepth :wellDepth26 ; - cont:wellVolume :wellvolume26 ; - cont:columnCount 1 ; - cont:rowCount 8 ; - cont:wellCount 8 ; - rdfs:comment "Axygen Multiple Well Reagent Reservoir with 8-Channel Trough, High Profile" ; - rdfs:label "res-mw8-hp" . - - -### https://sift.net/container-ontology/strateos-catalog#Chemspeedchemspeed-96-sealed-pin-rack -:Chemspeedchemspeed-96-sealed-pin-rack rdf:type owl:NamedIndividual , - cont:Plate ; - cont:availableAt :Strateos ; - cont:equipmentVendor cont:Chemspeed ; - cont:hasCatalogEntry ; - cont:hasColor cont:white ; - cont:height :height5 ; - cont:wellDepth :wellDepth5 ; - cont:wellVolume :wellvolume5 ; - cont:columnCount 12 ; - cont:rowCount 8 ; - cont:wellCount 96 ; - rdfs:comment "Chemspeed Chemspeed 96 Pin Rack" ; - rdfs:label "chemspeed-96-sealed-pin-rack" . - - -### https://sift.net/container-ontology/strateos-catalog#Corning1536-tc-white-corning-3727 -:Corning1536-tc-white-corning-3727 rdf:type owl:NamedIndividual , - cont:Plate ; - cont:availableAt :Strateos ; - cont:equipmentVendor cont:Corning ; - cont:hasCatalogEntry ; - cont:hasColor cont:white ; - cont:height :height36 ; - cont:wellDepth :wellDepth36 ; - cont:wellVolume :wellvolume36 ; - cont:columnCount 48 ; - cont:rowCount 32 ; - cont:wellCount 1536 ; - rdfs:comment "Corning 1536 well Corning white TC treated HiBase" ; - rdfs:label "1536-tc-white-corning-3727" . - - -### https://sift.net/container-ontology/strateos-catalog#Corning384-flat -:Corning384-flat rdf:type owl:NamedIndividual , - cont:Plate ; - cont:availableAt :Strateos ; - cont:equipmentVendor cont:Corning ; - cont:hasCatalogEntry ; - cont:hasColor cont:white ; - cont:hasWellBottomShape cont:flatBottom ; - cont:height :height32 ; - cont:wellDepth :wellDepth32 ; - cont:wellVolume :wellvolume32 ; - cont:columnCount 24 ; - cont:rowCount 16 ; - cont:wellCount 384 ; - rdfs:comment "Corning 384-Well Clear Bottom White Polystyrene Microplate" ; - rdfs:label "384-flat" . - - -### https://sift.net/container-ontology/strateos-catalog#Corning384-flat-clear-clear -:Corning384-flat-clear-clear rdf:type owl:NamedIndividual , - cont:Plate ; - cont:availableAt :Strateos ; - cont:equipmentVendor cont:Corning ; - cont:hasCatalogEntry ; - cont:hasColor cont:clear ; - cont:hasWellBottomShape cont:flatBottom ; - cont:height :height34 ; - cont:wellDepth :wellDepth34 ; - cont:wellVolume :wellvolume34 ; - cont:columnCount 24 ; - cont:rowCount 16 ; - cont:wellCount 384 ; - rdfs:comment "Corning 384-Well Clear Flat Bottom Polystyrene High Bind Microplate" ; - rdfs:label "384-flat-clear-clear" . - - -### https://sift.net/container-ontology/strateos-catalog#Corning384-flat-white-clear -:Corning384-flat-white-clear rdf:type owl:NamedIndividual , - cont:Plate ; - cont:availableAt :Strateos ; - cont:equipmentVendor cont:Corning ; - cont:hasCatalogEntry ; - cont:hasColor cont:clear ; - cont:hasWellBottomShape cont:flatBottom ; - cont:height :height24 ; - cont:wellDepth :wellDepth24 ; - cont:wellVolume :wellvolume24 ; - cont:columnCount 24 ; - cont:rowCount 16 ; - cont:wellCount 384 ; - rdfs:comment "Corning 384-well flat-bottom polystyrene plate" ; - rdfs:label "384-flat-white-clear" . - - -### https://sift.net/container-ontology/strateos-catalog#Corning384-flat-white-white-lv -:Corning384-flat-white-white-lv rdf:type owl:NamedIndividual , - cont:Plate ; - cont:availableAt :Strateos ; - cont:equipmentVendor cont:Corning ; - cont:hasCatalogEntry ; - cont:hasColor cont:white ; - cont:hasWellBottomShape cont:flatBottom ; - cont:height :height11 ; - cont:wellDepth :wellDepth11 ; - cont:wellVolume :wellvolume11 ; - cont:columnCount 24 ; - cont:rowCount 16 ; - cont:wellCount 384 ; - rdfs:comment "Corning 384-Well Low Volume White Flat Bottom Polystyrene NBS Microplate" ; - rdfs:label "384-flat-white-white-lv" . - - -### https://sift.net/container-ontology/strateos-catalog#Corning384-flat-white-white-nbs -:Corning384-flat-white-white-nbs rdf:type owl:NamedIndividual , - cont:Plate ; - cont:availableAt :Strateos ; - cont:equipmentVendor cont:Corning ; - cont:hasCatalogEntry ; - cont:hasColor cont:white ; - cont:hasWellBottomShape cont:flatBottom ; - cont:height :height2 ; - cont:wellDepth :wellDepth2 ; - cont:wellVolume :wellvolume2 ; - cont:columnCount 24 ; - cont:rowCount 16 ; - cont:wellCount 384 ; - rdfs:comment "Corning 384-Well Low Flange White FlatBottom Polystyrene NBS Microplate" ; - rdfs:label "384-flat-white-white-nbs" . - - -### https://sift.net/container-ontology/strateos-catalog#Corning384-flat-white-white-tc -:Corning384-flat-white-white-tc rdf:type owl:NamedIndividual , - cont:Plate ; - cont:availableAt :Strateos ; - cont:equipmentVendor cont:Corning ; - cont:hasCatalogEntry ; - cont:hasColor cont:white ; - cont:hasWellBottomShape cont:flatBottom ; - cont:height :height18 ; - cont:wellDepth :wellDepth18 ; - cont:wellVolume :wellvolume18 ; - cont:columnCount 24 ; - cont:rowCount 16 ; - cont:wellCount 384 ; - rdfs:comment "Corning 384-Well Low Flange White Flat Bottom Polystyrene TC-Treated Microplate" ; - rdfs:label "384-flat-white-white-tc" . - - -### https://sift.net/container-ontology/strateos-catalog#Corning384-round-black-black-lv-nbs -:Corning384-round-black-black-lv-nbs rdf:type owl:NamedIndividual , - cont:Plate ; - cont:availableAt :Strateos ; - cont:equipmentVendor cont:Corning ; - cont:hasCatalogEntry ; - cont:hasColor cont:black ; - cont:hasWellBottomShape cont:roundBottom ; - cont:height :height29 ; - cont:wellDepth :wellDepth29 ; - cont:wellVolume :wellvolume29 ; - cont:columnCount 24 ; - cont:rowCount 16 ; - cont:wellCount 384 ; - rdfs:comment "Corning Corning 4514 384-well Low Volume Black Round Bottom Polystyrene NBS Microplate" ; - rdfs:label "384-round-black-black-lv-nbs" . - - -### https://sift.net/container-ontology/strateos-catalog#Corning384-round-clear-clear -:Corning384-round-clear-clear rdf:type owl:NamedIndividual , - cont:Plate ; - cont:availableAt :Strateos ; - cont:equipmentVendor cont:Corning ; - cont:hasCatalogEntry ; - cont:hasColor cont:clear ; - cont:hasWellBottomShape cont:roundBottom ; - cont:height :height20 ; - cont:wellDepth :wellDepth20 ; - cont:wellVolume :wellvolume20 ; - cont:columnCount 24 ; - cont:rowCount 16 ; - cont:wellCount 384 ; - rdfs:comment "Corning 384-Well Clear Round Bottom Polypropylene Not Treated Microplate" ; - rdfs:label "384-round-clear-clear" . - - -### https://sift.net/container-ontology/strateos-catalog#Corning96-deep -:Corning96-deep rdf:type owl:NamedIndividual , - cont:Plate ; - cont:availableAt :Strateos ; - cont:equipmentVendor cont:Corning ; - cont:hasCatalogEntry ; - cont:hasColor cont:white ; - cont:height :height38 ; - cont:wellDepth :wellDepth38 ; - cont:wellVolume :wellvolume38 ; - cont:columnCount 12 ; - cont:rowCount 8 ; - cont:wellCount 96 ; - rdfs:comment "Corning 96-Well Clear V-Bottom Polypropylene Deep Well Plate" ; - rdfs:label "96-deep" . - - -### https://sift.net/container-ontology/strateos-catalog#Corning96-flat -:Corning96-flat rdf:type owl:NamedIndividual , - cont:Plate ; - cont:availableAt :Strateos ; - cont:equipmentVendor cont:Corning ; - cont:hasCatalogEntry ; - cont:hasColor cont:white ; - cont:hasWellBottomShape cont:flatBottom ; - cont:height :height13 ; - cont:wellDepth :wellDepth13 ; - cont:wellVolume :wellvolume13 ; - cont:columnCount 12 ; - cont:rowCount 8 ; - cont:wellCount 96 ; - rdfs:comment "Corning 96-Well White with Clear Flat Bottom Polystyrene Not Treated Microplate" ; - rdfs:label "96-flat" . - - -### https://sift.net/container-ontology/strateos-catalog#Corning96-flat-uv -:Corning96-flat-uv rdf:type owl:NamedIndividual , - cont:Plate ; - cont:availableAt :Strateos ; - cont:equipmentVendor cont:Corning ; - cont:hasCatalogEntry ; - cont:hasWellBottomShape cont:flatBottom ; - cont:height :height8 ; - cont:wellDepth :wellDepth8 ; - cont:wellVolume :wellvolume8 ; - cont:columnCount 12 ; - cont:rowCount 8 ; - cont:wellCount 96 ; - rdfs:comment "Corning 96-Well Clear Flat Bottom UV-Transparent Microplate" ; - rdfs:label "96-flat-uv" . - - -### https://sift.net/container-ontology/strateos-catalog#Corning96-ubottom-clear-tc -:Corning96-ubottom-clear-tc rdf:type owl:NamedIndividual , - cont:Plate ; - cont:availableAt :Strateos ; - cont:equipmentVendor cont:Corning ; - cont:hasCatalogEntry ; - cont:hasColor cont:clear ; - cont:hasWellBottomShape cont:uBottom ; - cont:height :height16 ; - cont:wellDepth :wellDepth16 ; - cont:wellVolume :wellvolume16 ; - cont:columnCount 12 ; - cont:rowCount 8 ; - cont:wellCount 96 ; - rdfs:comment "Corning Falcon 96-Well, Cell Culture-Treated, U-Shaped-Bottom Microplate" ; - rdfs:label "96-ubottom-clear-tc" . - - -### https://sift.net/container-ontology/strateos-catalog#Corning96-well-v-bottom -:Corning96-well-v-bottom rdf:type owl:NamedIndividual , - cont:Plate ; - cont:availableAt :Strateos ; - cont:equipmentVendor cont:Corning ; - cont:hasCatalogEntry ; - cont:hasColor cont:white ; - cont:hasWellBottomShape cont:veeBottom ; - cont:height :height23 ; - cont:wellDepth :wellDepth23 ; - cont:wellVolume :wellvolume23 ; - cont:columnCount 12 ; - cont:rowCount 8 ; - cont:wellCount 96 ; - rdfs:comment "Corning 96-well cell culture multiple well plate, V bottom" ; - rdfs:label "96-well-v-bottom" . - - -### https://sift.net/container-ontology/strateos-catalog#Costar96-flat-clear-costar-3590 -:Costar96-flat-clear-costar-3590 rdf:type owl:NamedIndividual , - cont:Plate ; - cont:availableAt :Strateos ; - cont:equipmentVendor cont:Costar ; - cont:hasCatalogEntry ; - cont:hasColor cont:clear ; - cont:hasWellBottomShape cont:flatBottom ; - cont:height :height7 ; - cont:wellDepth :wellDepth7 ; - cont:wellVolume :wellvolume7 ; - cont:columnCount 12 ; - cont:rowCount 8 ; - cont:wellCount 96 ; - rdfs:comment "Costar 96-well EIA/RIA Clear Flat Bottom Polystyrene High Bind Microplate" ; - rdfs:label "96-flat-clear-costar-3590" . - - -### https://sift.net/container-ontology/strateos-catalog#Eppendorf384-pcr -:Eppendorf384-pcr rdf:type owl:NamedIndividual , - cont:Plate ; - cont:availableAt :Strateos ; - cont:equipmentVendor cont:Eppendorf ; - cont:hasCatalogEntry ; - cont:hasColor cont:white ; - cont:height :height0 ; - cont:wellDepth :wellDepth0 ; - cont:wellVolume :wellvolume0 ; - cont:columnCount 24 ; - cont:rowCount 16 ; - cont:wellCount 384 ; - rdfs:comment "Eppendorf 384-Well twin.tec PCR Plate" ; - rdfs:label "384-pcr" . - - -### https://sift.net/container-ontology/strateos-catalog#Eppendorf6-flat -:Eppendorf6-flat rdf:type owl:NamedIndividual , - cont:Plate ; - cont:availableAt :Strateos ; - cont:equipmentVendor cont:Eppendorf ; - cont:hasCatalogEntry ; - cont:hasColor cont:white ; - cont:hasWellBottomShape cont:flatBottom ; - cont:height :height21 ; - cont:wellDepth :wellDepth21 ; - cont:wellVolume :wellvolume21 ; - cont:columnCount 3 ; - cont:rowCount 2 ; - cont:wellCount 6 ; - rdfs:comment "Eppendorf 6-Well Non-Treated Sterile Plate" ; - rdfs:label "6-flat" . - - -### https://sift.net/container-ontology/strateos-catalog#Eppendorf6-flat-tc -:Eppendorf6-flat-tc rdf:type owl:NamedIndividual , - cont:Plate ; - cont:availableAt :Strateos ; - cont:equipmentVendor cont:Eppendorf ; - cont:hasCatalogEntry ; - cont:hasColor cont:white ; - cont:hasWellBottomShape cont:flatBottom ; - cont:height :height15 ; - cont:wellDepth :wellDepth15 ; - cont:wellVolume :wellvolume15 ; - cont:columnCount 3 ; - cont:rowCount 2 ; - cont:wellCount 6 ; - rdfs:comment "Eppendorf 6-Well TC Treated Sterile Plate" ; - rdfs:label "6-flat-tc" . - - -### https://sift.net/container-ontology/strateos-catalog#Eppendorf96-flat-clear-clear-tc -:Eppendorf96-flat-clear-clear-tc rdf:type owl:NamedIndividual , - cont:Plate ; - cont:availableAt :Strateos ; - cont:equipmentVendor cont:Eppendorf ; - cont:hasCatalogEntry ; - cont:hasColor cont:clear ; - cont:hasWellBottomShape cont:flatBottom ; - cont:height :height25 ; - cont:wellDepth :wellDepth25 ; - cont:wellVolume :wellvolume25 ; - cont:columnCount 12 ; - cont:rowCount 8 ; - cont:wellCount 96 ; - rdfs:comment "Eppendorf 96-Well Flat TC-Treated Polystyrene Microplate" ; - rdfs:label "96-flat-clear-clear-tc" . - - -### https://sift.net/container-ontology/strateos-catalog#Eppendorf96-pcr -:Eppendorf96-pcr rdf:type owl:NamedIndividual , - cont:Plate ; - cont:availableAt :Strateos ; - cont:equipmentVendor cont:Eppendorf ; - cont:hasCatalogEntry ; - cont:hasColor cont:white ; - cont:height :height19 ; - cont:wellDepth :wellDepth19 ; - cont:wellVolume :wellvolume19 ; - cont:columnCount 12 ; - cont:rowCount 8 ; - cont:wellCount 96 ; - rdfs:comment "Eppendorf 96-Well twin.tec PCR Plate" ; - rdfs:label "96-pcr" . - - -### https://sift.net/container-ontology/strateos-catalog#Fisher96-deep-kf -:Fisher96-deep-kf rdf:type owl:NamedIndividual , - cont:Plate ; - cont:availableAt :Strateos ; - cont:equipmentVendor cont:Fisher ; - cont:hasCatalogEntry ; - cont:hasColor cont:white ; - cont:height :height17 ; - cont:wellDepth :wellDepth17 ; - cont:wellVolume :wellvolume17 ; - cont:columnCount 12 ; - cont:rowCount 8 ; - cont:wellCount 96 ; - rdfs:comment "Fisher 96-Well KingFisher Deepwell Plate V-bottom Polypropylene" ; - rdfs:label "96-deep-kf" . - - -### https://sift.net/container-ontology/strateos-catalog#Fisher96-v-kf -:Fisher96-v-kf rdf:type owl:NamedIndividual , - cont:Plate ; - cont:availableAt :Strateos ; - cont:equipmentVendor cont:Fisher ; - cont:hasCatalogEntry ; - cont:hasColor cont:white ; - cont:hasWellBottomShape cont:veeBottom ; - cont:height :height4 ; - cont:wellDepth :wellDepth4 ; - cont:wellVolume :wellvolume4 ; - cont:columnCount 12 ; - cont:rowCount 8 ; - cont:wellCount 96 ; - rdfs:comment "Fisher 96-well KingFisher PCR microplate" ; - rdfs:label "96-v-kf" . - - -### https://sift.net/container-ontology/strateos-catalog#Fisher96-vbottom-microwell -:Fisher96-vbottom-microwell rdf:type owl:NamedIndividual , - cont:Plate ; - cont:availableAt :Strateos ; - cont:equipmentVendor cont:Fisher ; - cont:hasCatalogEntry ; - cont:hasColor cont:white ; - cont:hasWellBottomShape cont:veeBottom ; - cont:height :height30 ; - cont:wellDepth :wellDepth30 ; - cont:wellVolume :wellvolume30 ; - cont:columnCount 12 ; - cont:rowCount 8 ; - cont:wellCount 96 ; - rdfs:comment "Fisher 96 vbottom microwell lcms plate" ; - rdfs:label "96-vbottom-microwell" . - - -### https://sift.net/container-ontology/strateos-catalog#Greiner1536-white-tc -:Greiner1536-white-tc rdf:type owl:NamedIndividual , - cont:Plate ; - cont:availableAt :Strateos ; - cont:equipmentVendor cont:Greiner ; - cont:hasCatalogEntry ; - cont:hasColor cont:white ; - cont:height :height37 ; - cont:wellDepth :wellDepth37 ; - cont:wellVolume :wellvolume37 ; - cont:columnCount 48 ; - cont:rowCount 32 ; - cont:wellCount 1536 ; - rdfs:comment "Greiner 1536 Greiner White TC-treated HiBase" ; - rdfs:label "1536-white-tc" . - - -### https://sift.net/container-ontology/strateos-catalog#Greiner384-v-clear-clear -:Greiner384-v-clear-clear rdf:type owl:NamedIndividual , - cont:Plate ; - cont:availableAt :Strateos ; - cont:equipmentVendor cont:Greiner ; - cont:hasCatalogEntry ; - cont:hasColor cont:clear ; - cont:hasWellBottomShape cont:veeBottom ; - cont:height :height35 ; - cont:wellDepth :wellDepth35 ; - cont:wellVolume :wellvolume35 ; - cont:columnCount 24 ; - cont:rowCount 16 ; - cont:wellCount 384 ; - rdfs:comment "Greiner 384-Well PP V-Bottom Microplate" ; - rdfs:label "384-v-clear-clear" . - - -### https://sift.net/container-ontology/strateos-catalog#Greiner96-flat-black-black-fluotrac-600 -:Greiner96-flat-black-black-fluotrac-600 rdf:type owl:NamedIndividual , - cont:Plate ; - cont:availableAt :Strateos ; - cont:equipmentVendor cont:Greiner ; - cont:hasCatalogEntry ; - cont:hasColor cont:black ; - cont:hasWellBottomShape cont:flatBottom ; - cont:height :height14 ; - cont:wellDepth :wellDepth14 ; - cont:wellVolume :wellvolume14 ; - cont:columnCount 12 ; - cont:rowCount 8 ; - cont:wellCount 96 ; - rdfs:comment "Greiner 96-Well F-Bottom Black Fluotrac High-Binding Microplate" ; - rdfs:label "96-flat-black-black-fluotrac-600" . - - -### https://sift.net/container-ontology/strateos-catalog#Labcyte384-echo -:Labcyte384-echo rdf:type owl:NamedIndividual , - cont:Plate ; - cont:availableAt :Strateos ; - cont:equipmentVendor cont:Labcyte ; - cont:hasCatalogEntry ; - cont:hasColor cont:white ; - cont:height :height6 ; - cont:wellDepth :wellDepth6 ; - cont:wellVolume :wellvolume6 ; - cont:columnCount 24 ; - cont:rowCount 16 ; - cont:wellCount 384 ; - rdfs:comment "Labcyte 384-Well Echo Qualified Polypropylene Microplate 2.0" ; - rdfs:label "384-echo" . - - -### https://sift.net/container-ontology/strateos-catalog#Labcyte384-echo-ldv -:Labcyte384-echo-ldv rdf:type owl:NamedIndividual , - cont:Plate ; - cont:availableAt :Strateos ; - cont:equipmentVendor cont:Labcyte ; - cont:hasCatalogEntry ; - cont:hasColor cont:white ; - cont:height :height28 ; - cont:wellDepth :wellDepth28 ; - cont:wellVolume :wellvolume28 ; - cont:columnCount 24 ; - cont:rowCount 16 ; - cont:wellCount 384 ; - rdfs:comment "Labcyte 384-well Echo low dead volume plate" ; - rdfs:label "384-echo-ldv" . - - -### https://sift.net/container-ontology/strateos-catalog#Mesoscale96-10-spot-uplex-MSD -:Mesoscale96-10-spot-uplex-MSD rdf:type owl:NamedIndividual , - cont:Plate ; - cont:availableAt :Strateos ; - cont:equipmentVendor cont:Mesoscale ; - cont:hasCatalogEntry ; - cont:hasColor cont:white ; - cont:height :height12 ; - cont:wellDepth :wellDepth12 ; - cont:wellVolume :wellvolume12 ; - cont:columnCount 12 ; - cont:rowCount 8 ; - cont:wellCount 96 ; - rdfs:comment "Mesoscale 96-well 10-spot u-plex MSD plate" ; - rdfs:label "96-10-spot-uplex-MSD" . - - -### https://sift.net/container-ontology/strateos-catalog#Mesoscale96-10-spot-vplex-m-pro-inflamm1-MSD -:Mesoscale96-10-spot-vplex-m-pro-inflamm1-MSD rdf:type owl:NamedIndividual , - cont:Plate ; - cont:availableAt :Strateos ; - cont:equipmentVendor cont:Mesoscale ; - cont:hasCatalogEntry ; - cont:hasColor cont:white ; - cont:height :height1 ; - cont:wellDepth :wellDepth1 ; - cont:wellVolume :wellvolume1 ; - cont:columnCount 12 ; - cont:rowCount 8 ; - cont:wellCount 96 ; - rdfs:comment "Mesoscale 96-well 10-spot v-plex mouse pro-inflammatory panel 1 MSD plate" ; - rdfs:label "96-10-spot-vplex-m-pro-inflamm1-MSD" . - - -### https://sift.net/container-ontology/strateos-catalog#Mesoscale96-4-spot-mMIP3a-MSD -:Mesoscale96-4-spot-mMIP3a-MSD rdf:type owl:NamedIndividual , - cont:Plate ; - cont:availableAt :Strateos ; - cont:equipmentVendor cont:Mesoscale ; - cont:hasCatalogEntry ; - cont:hasColor cont:white ; - cont:height :height10 ; - cont:wellDepth :wellDepth10 ; - cont:wellVolume :wellvolume10 ; - cont:columnCount 12 ; - cont:rowCount 8 ; - cont:wellCount 96 ; - rdfs:comment "Mesoscale 96-well 4-spot mouse MIP3a MSD plate" ; - rdfs:label "96-4-spot-mMIP3a-MSD" . - - -### https://sift.net/container-ontology/strateos-catalog#PerkinElmer384-flat-black-black-proxiplate-plus-f -:PerkinElmer384-flat-black-black-proxiplate-plus-f rdf:type owl:NamedIndividual , - cont:Plate ; - cont:availableAt :Strateos ; - cont:equipmentVendor cont:PerkinElmer ; - cont:hasCatalogEntry ; - cont:hasColor cont:black ; - cont:hasWellBottomShape cont:flatBottom ; - cont:height :height31 ; - cont:wellDepth :wellDepth31 ; - cont:wellVolume :wellvolume31 ; - cont:columnCount 24 ; - cont:rowCount 16 ; - cont:wellCount 384 ; - rdfs:comment "PerkinElmer 384-well black flat-bottom polystyrene proximity plus plate" ; - rdfs:label "384-flat-black-black-proxiplate-plus-f" . - - -### https://sift.net/container-ontology/strateos-catalog#PerkinElmer384-flat-white-white-optiplate -:PerkinElmer384-flat-white-white-optiplate rdf:type owl:NamedIndividual , - cont:Plate ; - cont:availableAt :Strateos ; - cont:equipmentVendor cont:PerkinElmer ; - cont:hasCatalogEntry ; - cont:hasColor cont:white ; - cont:hasWellBottomShape cont:flatBottom ; - cont:height :height3 ; - cont:wellDepth :wellDepth3 ; - cont:wellVolume :wellvolume3 ; - cont:columnCount 24 ; - cont:rowCount 16 ; - cont:wellCount 384 ; - rdfs:comment "PerkinElmer 384-Well White Opaque Microplate" ; - rdfs:label "384-flat-white-white-optiplate" . - - -### https://sift.net/container-ontology/strateos-catalog#PerkinElmer384-flat-white-white-proxiplate-plus -:PerkinElmer384-flat-white-white-proxiplate-plus rdf:type owl:NamedIndividual , - cont:Plate ; - cont:availableAt :Strateos ; - cont:equipmentVendor cont:PerkinElmer ; - cont:hasCatalogEntry ; - cont:hasColor cont:white ; - cont:hasWellBottomShape cont:flatBottom ; - cont:height :height22 ; - cont:wellDepth :wellDepth22 ; - cont:wellVolume :wellvolume22 ; - cont:columnCount 24 ; - cont:rowCount 16 ; - cont:wellCount 384 ; - rdfs:comment "PerkinElmer 384-well flat-bottom polystyrene proximity plus plate" ; - rdfs:label "384-flat-white-white-proxiplate-plus" . - - -### https://sift.net/container-ontology/strateos-catalog#Strateos -:Strateos rdf:type owl:NamedIndividual , - cont:Lab ; - cont:labName "Strateos" . - - -### https://sift.net/container-ontology/strateos-catalog#ThermoFisher384-ubottom-clear-polypropylene-nunc-264573 -:ThermoFisher384-ubottom-clear-polypropylene-nunc-264573 rdf:type owl:NamedIndividual , - cont:Plate ; - cont:availableAt :Strateos ; - cont:equipmentVendor cont:ThermoFisher ; - cont:hasCatalogEntry ; - cont:hasColor cont:clear ; - cont:hasWellBottomShape cont:uBottom ; - cont:height :height27 ; - cont:wellDepth :wellDepth27 ; - cont:wellVolume :wellvolume27 ; - cont:columnCount 24 ; - cont:rowCount 16 ; - cont:wellCount 384 ; - rdfs:comment "ThermoFisher Nunc 384-Well Polypropylene U-Bottom Natural Color Storage Microplate" ; - rdfs:label "384-ubottom-clear-polypropylene-nunc-264573" . - - -### https://sift.net/container-ontology/strateos-catalog#ThermoFisher96-flat-white-dc -:ThermoFisher96-flat-white-dc rdf:type owl:NamedIndividual , - cont:Plate ; - cont:availableAt :Strateos ; - cont:equipmentVendor cont:ThermoFisher ; - cont:hasCatalogEntry ; - cont:hasColor cont:white ; - cont:hasWellBottomShape cont:flatBottom ; - cont:height :height9 ; - cont:wellDepth :wellDepth9 ; - cont:wellVolume :wellvolume9 ; - cont:columnCount 12 ; - cont:rowCount 8 ; - cont:wellCount 96 ; - rdfs:comment "ThermoFisher Nunc MicroWell 96-Well, Nunclon Delta-Treated, Flat-Bottom Microplate" ; - rdfs:label "96-flat-white-dc" . - - -### https://sift.net/container-ontology/strateos-catalog#height0 -:height0 rdf:type owl:NamedIndividual , - om:Height ; - om:hasUnit om:millimetre ; - om:hasNumericalValue "10.6"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#height1 -:height1 rdf:type owl:NamedIndividual , - om:Height ; - om:hasUnit om:millimetre ; - om:hasNumericalValue "14.35"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#height10 -:height10 rdf:type owl:NamedIndividual , - om:Height ; - om:hasUnit om:millimetre ; - om:hasNumericalValue "14.35"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#height11 -:height11 rdf:type owl:NamedIndividual , - om:Height ; - om:hasUnit om:millimetre ; - om:hasNumericalValue "12.19"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#height12 -:height12 rdf:type owl:NamedIndividual , - om:Height ; - om:hasUnit om:millimetre ; - om:hasNumericalValue "14.35"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#height13 -:height13 rdf:type owl:NamedIndividual , - om:Height ; - om:hasUnit om:millimetre ; - om:hasNumericalValue "14.22"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#height14 -:height14 rdf:type owl:NamedIndividual , - om:Height ; - om:hasUnit om:millimetre ; - om:hasNumericalValue "14.22"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#height15 -:height15 rdf:type owl:NamedIndividual , - om:Height ; - om:hasUnit om:millimetre ; - om:hasNumericalValue "19.0"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#height16 -:height16 rdf:type owl:NamedIndividual , - om:Height ; - om:hasUnit om:millimetre ; - om:hasNumericalValue "14.6"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#height17 -:height17 rdf:type owl:NamedIndividual , - om:Height ; - om:hasUnit om:millimetre ; - om:hasNumericalValue "44.0"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#height18 -:height18 rdf:type owl:NamedIndividual , - om:Height ; - om:hasUnit om:millimetre ; - om:hasNumericalValue "14.22"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#height19 -:height19 rdf:type owl:NamedIndividual , - om:Height ; - om:hasUnit om:millimetre ; - om:hasNumericalValue "15.9"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#height2 -:height2 rdf:type owl:NamedIndividual , - om:Height ; - om:hasUnit om:millimetre ; - om:hasNumericalValue "14.35"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#height20 -:height20 rdf:type owl:NamedIndividual , - om:Height ; - om:hasUnit om:millimetre ; - om:hasNumericalValue "14.22"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#height21 -:height21 rdf:type owl:NamedIndividual , - om:Height ; - om:hasUnit om:millimetre ; - om:hasNumericalValue "19.0"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#height22 -:height22 rdf:type owl:NamedIndividual , - om:Height ; - om:hasUnit om:millimetre ; - om:hasNumericalValue "14.35"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#height23 -:height23 rdf:type owl:NamedIndividual , - om:Height ; - om:hasUnit om:millimetre ; - om:hasNumericalValue "3.25"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#height24 -:height24 rdf:type owl:NamedIndividual , - om:Height ; - om:hasUnit om:millimetre ; - om:hasNumericalValue "14.22"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#height25 -:height25 rdf:type owl:NamedIndividual , - om:Height ; - om:hasUnit om:millimetre ; - om:hasNumericalValue "14.4"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#height26 -:height26 rdf:type owl:NamedIndividual , - om:Height ; - om:hasUnit om:millimetre ; - om:hasNumericalValue "43.8"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#height27 -:height27 rdf:type owl:NamedIndividual , - om:Height ; - om:hasUnit om:millimetre ; - om:hasNumericalValue "14.4"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#height28 -:height28 rdf:type owl:NamedIndividual , - om:Height ; - om:hasUnit om:millimetre ; - om:hasNumericalValue "10.48"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#height29 -:height29 rdf:type owl:NamedIndividual , - om:Height ; - om:hasUnit om:millimetre ; - om:hasNumericalValue "14.22"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#height3 -:height3 rdf:type owl:NamedIndividual , - om:Height ; - om:hasUnit om:millimetre ; - om:hasNumericalValue "14.4"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#height30 -:height30 rdf:type owl:NamedIndividual , - om:Height ; - om:hasUnit om:millimetre ; - om:hasNumericalValue "14.7"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#height31 -:height31 rdf:type owl:NamedIndividual , - om:Height ; - om:hasUnit om:millimetre ; - om:hasNumericalValue "14.35"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#height32 -:height32 rdf:type owl:NamedIndividual , - om:Height ; - om:hasUnit om:millimetre ; - om:hasNumericalValue "14.22"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#height33 -:height33 rdf:type owl:NamedIndividual , - om:Height ; - om:hasUnit om:millimetre ; - om:hasNumericalValue "44.04"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#height34 -:height34 rdf:type owl:NamedIndividual , - om:Height ; - om:hasUnit om:millimetre ; - om:hasNumericalValue "14.2"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#height35 -:height35 rdf:type owl:NamedIndividual , - om:Height ; - om:hasUnit om:millimetre ; - om:hasNumericalValue "14.4"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#height36 -:height36 rdf:type owl:NamedIndividual , - om:Height ; - om:hasUnit om:millimetre ; - om:hasNumericalValue "10.4"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#height37 -:height37 rdf:type owl:NamedIndividual , - om:Height ; - om:hasUnit om:millimetre ; - om:hasNumericalValue "10.4"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#height38 -:height38 rdf:type owl:NamedIndividual , - om:Height ; - om:hasUnit om:millimetre ; - om:hasNumericalValue "43.8"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#height39 -:height39 rdf:type owl:NamedIndividual , - om:Height ; - om:hasUnit om:millimetre ; - om:hasNumericalValue "44.04"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#height4 -:height4 rdf:type owl:NamedIndividual , - om:Height ; - om:hasUnit om:millimetre ; - om:hasNumericalValue "14.5"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#height40 -:height40 rdf:type owl:NamedIndividual , - om:Height ; - om:hasUnit om:millimetre ; - om:hasNumericalValue "14.4"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#height5 -:height5 rdf:type owl:NamedIndividual , - om:Height ; - om:hasUnit om:millimetre ; - om:hasNumericalValue "36.0"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#height6 -:height6 rdf:type owl:NamedIndividual , - om:Height ; - om:hasUnit om:millimetre ; - om:hasNumericalValue "14.4"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#height7 -:height7 rdf:type owl:NamedIndividual , - om:Height ; - om:hasUnit om:millimetre ; - om:hasNumericalValue "14.22"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#height8 -:height8 rdf:type owl:NamedIndividual , - om:Height ; - om:hasUnit om:millimetre ; - om:hasNumericalValue "14.22"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#height9 -:height9 rdf:type owl:NamedIndividual , - om:Height ; - om:hasUnit om:millimetre ; - om:hasNumericalValue "14.6"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#wellDepth0 -:wellDepth0 rdf:type owl:NamedIndividual , - om:Depth ; - om:hasUnit om:millimetre ; - om:hasNumericalValue "9.6"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#wellDepth1 -:wellDepth1 rdf:type owl:NamedIndividual , - om:Depth ; - om:hasUnit om:millimetre ; - om:hasNumericalValue "11.68"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#wellDepth10 -:wellDepth10 rdf:type owl:NamedIndividual , - om:Depth ; - om:hasUnit om:millimetre ; - om:hasNumericalValue "11.68"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#wellDepth11 -:wellDepth11 rdf:type owl:NamedIndividual , - om:Depth ; - om:hasUnit om:millimetre ; - om:hasNumericalValue "9.39"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#wellDepth12 -:wellDepth12 rdf:type owl:NamedIndividual , - om:Depth ; - om:hasUnit om:millimetre ; - om:hasNumericalValue "11.68"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#wellDepth13 -:wellDepth13 rdf:type owl:NamedIndividual , - om:Depth ; - om:hasUnit om:millimetre ; - om:hasNumericalValue "10.67"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#wellDepth14 -:wellDepth14 rdf:type owl:NamedIndividual , - om:Depth ; - om:hasUnit om:millimetre ; - om:hasNumericalValue "10.9"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#wellDepth15 -:wellDepth15 rdf:type owl:NamedIndividual , - om:Depth ; - om:hasUnit om:millimetre ; - om:hasNumericalValue "16.5"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#wellDepth16 -:wellDepth16 rdf:type owl:NamedIndividual , - om:Depth ; - om:hasUnit om:millimetre ; - om:hasNumericalValue "10.59"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#wellDepth17 -:wellDepth17 rdf:type owl:NamedIndividual , - om:Depth ; - om:hasUnit om:millimetre ; - om:hasNumericalValue "42.3"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#wellDepth18 -:wellDepth18 rdf:type owl:NamedIndividual , - om:Depth ; - om:hasUnit om:millimetre ; - om:hasNumericalValue "11.43"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#wellDepth19 -:wellDepth19 rdf:type owl:NamedIndividual , - om:Depth ; - om:hasUnit om:millimetre ; - om:hasNumericalValue "14.6"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#wellDepth2 -:wellDepth2 rdf:type owl:NamedIndividual , - om:Depth ; - om:hasUnit om:millimetre ; - om:hasNumericalValue "11.43"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#wellDepth20 -:wellDepth20 rdf:type owl:NamedIndividual , - om:Depth ; - om:hasUnit om:millimetre ; - om:hasNumericalValue "11.57"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#wellDepth21 -:wellDepth21 rdf:type owl:NamedIndividual , - om:Depth ; - om:hasUnit om:millimetre ; - om:hasNumericalValue "16.5"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#wellDepth22 -:wellDepth22 rdf:type owl:NamedIndividual , - om:Depth ; - om:hasUnit om:millimetre ; - om:hasNumericalValue "5.3"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#wellDepth23 -:wellDepth23 rdf:type owl:NamedIndividual , - om:Depth ; - om:hasUnit om:millimetre ; - om:hasNumericalValue "10.668"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#wellDepth24 -:wellDepth24 rdf:type owl:NamedIndividual , - om:Depth ; - om:hasUnit om:millimetre ; - om:hasNumericalValue "11.56"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#wellDepth25 -:wellDepth25 rdf:type owl:NamedIndividual , - om:Depth ; - om:hasUnit om:millimetre ; - om:hasNumericalValue "11.3"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#wellDepth26 -:wellDepth26 rdf:type owl:NamedIndividual , - om:Depth ; - om:hasUnit om:millimetre ; - om:hasNumericalValue "39.1"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#wellDepth27 -:wellDepth27 rdf:type owl:NamedIndividual , - om:Depth ; - om:hasUnit om:millimetre ; - om:hasNumericalValue "11.7"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#wellDepth28 -:wellDepth28 rdf:type owl:NamedIndividual , - om:Depth ; - om:hasUnit om:millimetre ; - om:hasNumericalValue "5.1"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#wellDepth29 -:wellDepth29 rdf:type owl:NamedIndividual , - om:Depth ; - om:hasUnit om:millimetre ; - om:hasNumericalValue "6.58"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#wellDepth3 -:wellDepth3 rdf:type owl:NamedIndividual , - om:Depth ; - om:hasUnit om:millimetre ; - om:hasNumericalValue "10.45"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#wellDepth30 -:wellDepth30 rdf:type owl:NamedIndividual , - om:Depth ; - om:hasUnit om:millimetre ; - om:hasNumericalValue "10.5"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#wellDepth31 -:wellDepth31 rdf:type owl:NamedIndividual , - om:Depth ; - om:hasUnit om:millimetre ; - om:hasNumericalValue "5.3"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#wellDepth32 -:wellDepth32 rdf:type owl:NamedIndividual , - om:Depth ; - om:hasUnit om:millimetre ; - om:hasNumericalValue "11.43"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#wellDepth33 -:wellDepth33 rdf:type owl:NamedIndividual , - om:Depth ; - om:hasUnit om:millimetre ; - om:hasNumericalValue "42.0"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#wellDepth34 -:wellDepth34 rdf:type owl:NamedIndividual , - om:Depth ; - om:hasUnit om:millimetre ; - om:hasNumericalValue "11.43"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#wellDepth35 -:wellDepth35 rdf:type owl:NamedIndividual , - om:Depth ; - om:hasUnit om:millimetre ; - om:hasNumericalValue "11.5"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#wellDepth36 -:wellDepth36 rdf:type owl:NamedIndividual , - om:Depth ; - om:hasUnit om:millimetre ; - om:hasNumericalValue "4.8"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#wellDepth37 -:wellDepth37 rdf:type owl:NamedIndividual , - om:Depth ; - om:hasUnit om:millimetre ; - om:hasNumericalValue "5.0"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#wellDepth38 -:wellDepth38 rdf:type owl:NamedIndividual , - om:Depth ; - om:hasUnit om:millimetre ; - om:hasNumericalValue "42.03"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#wellDepth39 -:wellDepth39 rdf:type owl:NamedIndividual , - om:Depth ; - om:hasUnit om:millimetre ; - om:hasNumericalValue "39.3"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#wellDepth4 -:wellDepth4 rdf:type owl:NamedIndividual , - om:Depth ; - om:hasUnit om:millimetre ; - om:hasNumericalValue "12.9"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#wellDepth40 -:wellDepth40 rdf:type owl:NamedIndividual , - om:Depth ; - om:hasUnit om:millimetre ; - om:hasNumericalValue "12.0"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#wellDepth5 -:wellDepth5 rdf:type owl:NamedIndividual , - om:Depth ; - om:hasUnit om:millimetre ; - om:hasNumericalValue "36.0"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#wellDepth6 -:wellDepth6 rdf:type owl:NamedIndividual , - om:Depth ; - om:hasUnit om:millimetre ; - om:hasNumericalValue "11.5"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#wellDepth7 -:wellDepth7 rdf:type owl:NamedIndividual , - om:Depth ; - om:hasUnit om:millimetre ; - om:hasNumericalValue "10.67"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#wellDepth8 -:wellDepth8 rdf:type owl:NamedIndividual , - om:Depth ; - om:hasUnit om:millimetre ; - om:hasNumericalValue "10.67"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#wellDepth9 -:wellDepth9 rdf:type owl:NamedIndividual , - om:Depth ; - om:hasUnit om:millimetre ; - om:hasNumericalValue "11.2"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#wellvolume0 -:wellvolume0 rdf:type owl:NamedIndividual , - om:Volume ; - om:hasUnit om:microlitre ; - om:hasNumericalValue "40.0"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#wellvolume1 -:wellvolume1 rdf:type owl:NamedIndividual , - om:Volume ; - om:hasUnit om:microlitre ; - om:hasNumericalValue "410.0"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#wellvolume10 -:wellvolume10 rdf:type owl:NamedIndividual , - om:Volume ; - om:hasUnit om:microlitre ; - om:hasNumericalValue "410.0"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#wellvolume11 -:wellvolume11 rdf:type owl:NamedIndividual , - om:Volume ; - om:hasUnit om:microlitre ; - om:hasNumericalValue "40.0"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#wellvolume12 -:wellvolume12 rdf:type owl:NamedIndividual , - om:Volume ; - om:hasUnit om:microlitre ; - om:hasNumericalValue "410.0"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#wellvolume13 -:wellvolume13 rdf:type owl:NamedIndividual , - om:Volume ; - om:hasUnit om:microlitre ; - om:hasNumericalValue "340.0"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#wellvolume14 -:wellvolume14 rdf:type owl:NamedIndividual , - om:Volume ; - om:hasUnit om:microlitre ; - om:hasNumericalValue "340.0"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#wellvolume15 -:wellvolume15 rdf:type owl:NamedIndividual , - om:Volume ; - om:hasUnit om:microlitre ; - om:hasNumericalValue "5000.0"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#wellvolume16 -:wellvolume16 rdf:type owl:NamedIndividual , - om:Volume ; - om:hasUnit om:microlitre ; - om:hasNumericalValue "320.0"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#wellvolume17 -:wellvolume17 rdf:type owl:NamedIndividual , - om:Volume ; - om:hasUnit om:microlitre ; - om:hasNumericalValue "1000.0"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#wellvolume18 -:wellvolume18 rdf:type owl:NamedIndividual , - om:Volume ; - om:hasUnit om:microlitre ; - om:hasNumericalValue "80.0"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#wellvolume19 -:wellvolume19 rdf:type owl:NamedIndividual , - om:Volume ; - om:hasUnit om:microlitre ; - om:hasNumericalValue "160.0"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#wellvolume2 -:wellvolume2 rdf:type owl:NamedIndividual , - om:Volume ; - om:hasUnit om:microlitre ; - om:hasNumericalValue "80.0"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#wellvolume20 -:wellvolume20 rdf:type owl:NamedIndividual , - om:Volume ; - om:hasUnit om:microlitre ; - om:hasNumericalValue "70.0"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#wellvolume21 -:wellvolume21 rdf:type owl:NamedIndividual , - om:Volume ; - om:hasUnit om:microlitre ; - om:hasNumericalValue "5000.0"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#wellvolume22 -:wellvolume22 rdf:type owl:NamedIndividual , - om:Volume ; - om:hasUnit om:microlitre ; - om:hasNumericalValue "28.0"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#wellvolume23 -:wellvolume23 rdf:type owl:NamedIndividual , - om:Volume ; - om:hasUnit om:microlitre ; - om:hasNumericalValue "200.0"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#wellvolume24 -:wellvolume24 rdf:type owl:NamedIndividual , - om:Volume ; - om:hasUnit om:microlitre ; - om:hasNumericalValue "90.0"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#wellvolume25 -:wellvolume25 rdf:type owl:NamedIndividual , - om:Volume ; - om:hasUnit om:microlitre ; - om:hasNumericalValue "340.0"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#wellvolume26 -:wellvolume26 rdf:type owl:NamedIndividual , - om:Volume ; - om:hasUnit om:microlitre ; - om:hasNumericalValue "32000.0"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#wellvolume27 -:wellvolume27 rdf:type owl:NamedIndividual , - om:Volume ; - om:hasUnit om:microlitre ; - om:hasNumericalValue "120.0"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#wellvolume28 -:wellvolume28 rdf:type owl:NamedIndividual , - om:Volume ; - om:hasUnit om:microlitre ; - om:hasNumericalValue "14.0"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#wellvolume29 -:wellvolume29 rdf:type owl:NamedIndividual , - om:Volume ; - om:hasUnit om:microlitre ; - om:hasNumericalValue "35.0"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#wellvolume3 -:wellvolume3 rdf:type owl:NamedIndividual , - om:Volume ; - om:hasUnit om:microlitre ; - om:hasNumericalValue "105.0"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#wellvolume30 -:wellvolume30 rdf:type owl:NamedIndividual , - om:Volume ; - om:hasUnit om:microlitre ; - om:hasNumericalValue "400.0"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#wellvolume31 -:wellvolume31 rdf:type owl:NamedIndividual , - om:Volume ; - om:hasUnit om:microlitre ; - om:hasNumericalValue "28.0"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#wellvolume32 -:wellvolume32 rdf:type owl:NamedIndividual , - om:Volume ; - om:hasUnit om:microlitre ; - om:hasNumericalValue "90.0"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#wellvolume33 -:wellvolume33 rdf:type owl:NamedIndividual , - om:Volume ; - om:hasUnit om:microlitre ; - om:hasNumericalValue "10000.0"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#wellvolume34 -:wellvolume34 rdf:type owl:NamedIndividual , - om:Volume ; - om:hasUnit om:microlitre ; - om:hasNumericalValue "80.0"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#wellvolume35 -:wellvolume35 rdf:type owl:NamedIndividual , - om:Volume ; - om:hasUnit om:microlitre ; - om:hasNumericalValue "120.0"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#wellvolume36 -:wellvolume36 rdf:type owl:NamedIndividual , - om:Volume ; - om:hasUnit om:microlitre ; - om:hasNumericalValue "12.5"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#wellvolume37 -:wellvolume37 rdf:type owl:NamedIndividual , - om:Volume ; - om:hasUnit om:microlitre ; - om:hasNumericalValue "10.0"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#wellvolume38 -:wellvolume38 rdf:type owl:NamedIndividual , - om:Volume ; - om:hasUnit om:microlitre ; - om:hasNumericalValue "2000.0"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#wellvolume39 -:wellvolume39 rdf:type owl:NamedIndividual , - om:Volume ; - om:hasUnit om:microlitre ; - om:hasNumericalValue "21000.0"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#wellvolume4 -:wellvolume4 rdf:type owl:NamedIndividual , - om:Volume ; - om:hasUnit om:microlitre ; - om:hasNumericalValue "200.0"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#wellvolume40 -:wellvolume40 rdf:type owl:NamedIndividual , - om:Volume ; - om:hasUnit om:microlitre ; - om:hasNumericalValue "100.0"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#wellvolume5 -:wellvolume5 rdf:type owl:NamedIndividual , - om:Volume ; - om:hasUnit om:microlitre ; - om:hasNumericalValue "9000.0"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#wellvolume6 -:wellvolume6 rdf:type owl:NamedIndividual , - om:Volume ; - om:hasUnit om:microlitre ; - om:hasNumericalValue "135.0"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#wellvolume7 -:wellvolume7 rdf:type owl:NamedIndividual , - om:Volume ; - om:hasUnit om:microlitre ; - om:hasNumericalValue "360.0"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#wellvolume8 -:wellvolume8 rdf:type owl:NamedIndividual , - om:Volume ; - om:hasUnit om:microlitre ; - om:hasNumericalValue "340.0"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog#wellvolume9 -:wellvolume9 rdf:type owl:NamedIndividual , - om:Volume ; - om:hasUnit om:microlitre ; - om:hasNumericalValue "320.0"^^xsd:decimal . - - -### https://sift.net/container-ontology/strateos-catalog/catalog-entries#Axygenres-mw12-hp - rdf:type owl:NamedIndividual , - cont:CatalogEntry ; - cont:catalogNumber "res-mw12-hp" ; - cont:hasVendor cont:Axygen . - - -### https://sift.net/container-ontology/strateos-catalog/catalog-entries#Axygenres-mw8-hp - rdf:type owl:NamedIndividual , - cont:CatalogEntry ; - cont:catalogNumber "res-mw8-hp" ; - cont:hasVendor cont:Axygen . - - -### https://sift.net/container-ontology/strateos-catalog/catalog-entries#Chemspeedunknown - rdf:type owl:NamedIndividual , - cont:CatalogEntry ; - cont:catalogNumber "unknown" ; - cont:hasVendor cont:Chemspeed . - - -### https://sift.net/container-ontology/strateos-catalog/catalog-entries#Corning353077 - rdf:type owl:NamedIndividual , - cont:CatalogEntry ; - cont:catalogNumber "353077" ; - cont:hasVendor cont:Corning . - - -### https://sift.net/container-ontology/strateos-catalog/catalog-entries#Corning3570 - rdf:type owl:NamedIndividual , - cont:CatalogEntry ; - cont:catalogNumber "3570" ; - cont:hasVendor cont:Corning . - - -### https://sift.net/container-ontology/strateos-catalog/catalog-entries#Corning3574 - rdf:type owl:NamedIndividual , - cont:CatalogEntry ; - cont:catalogNumber "3574" ; - cont:hasVendor cont:Corning . - - -### https://sift.net/container-ontology/strateos-catalog/catalog-entries#Corning3632 - rdf:type owl:NamedIndividual , - cont:CatalogEntry ; - cont:catalogNumber "3632" ; - cont:hasVendor cont:Corning . - - -### https://sift.net/container-ontology/strateos-catalog/catalog-entries#Corning3635 - rdf:type owl:NamedIndividual , - cont:CatalogEntry ; - cont:catalogNumber "3635" ; - cont:hasVendor cont:Corning . - - -### https://sift.net/container-ontology/strateos-catalog/catalog-entries#Corning3657 - rdf:type owl:NamedIndividual , - cont:CatalogEntry ; - cont:catalogNumber "3657" ; - cont:hasVendor cont:Corning . - - -### https://sift.net/container-ontology/strateos-catalog/catalog-entries#Corning3700 - rdf:type owl:NamedIndividual , - cont:CatalogEntry ; - cont:catalogNumber "3700" ; - cont:hasVendor cont:Corning . - - -### https://sift.net/container-ontology/strateos-catalog/catalog-entries#Corning3706 - rdf:type owl:NamedIndividual , - cont:CatalogEntry ; - cont:catalogNumber "3706" ; - cont:hasVendor cont:Corning . - - -### https://sift.net/container-ontology/strateos-catalog/catalog-entries#Corning3727 - rdf:type owl:NamedIndividual , - cont:CatalogEntry ; - cont:catalogNumber "3727" ; - cont:hasVendor cont:Corning . - - -### https://sift.net/container-ontology/strateos-catalog/catalog-entries#Corning3763 - rdf:type owl:NamedIndividual , - cont:CatalogEntry ; - cont:catalogNumber "3763" ; - cont:hasVendor cont:Corning . - - -### https://sift.net/container-ontology/strateos-catalog/catalog-entries#Corning3824 - rdf:type owl:NamedIndividual , - cont:CatalogEntry ; - cont:catalogNumber "3824" ; - cont:hasVendor cont:Corning . - - -### https://sift.net/container-ontology/strateos-catalog/catalog-entries#Corning3894 - rdf:type owl:NamedIndividual , - cont:CatalogEntry ; - cont:catalogNumber "3894" ; - cont:hasVendor cont:Corning . - - -### https://sift.net/container-ontology/strateos-catalog/catalog-entries#Corning3961 - rdf:type owl:NamedIndividual , - cont:CatalogEntry ; - cont:catalogNumber "3961" ; - cont:hasVendor cont:Corning . - - -### https://sift.net/container-ontology/strateos-catalog/catalog-entries#Corning4514 - rdf:type owl:NamedIndividual , - cont:CatalogEntry ; - cont:catalogNumber "4514" ; - cont:hasVendor cont:Corning . - - -### https://sift.net/container-ontology/strateos-catalog/catalog-entries#Costar3590 - rdf:type owl:NamedIndividual , - cont:CatalogEntry ; - cont:catalogNumber "3590" ; - cont:hasVendor cont:Costar . - - -### https://sift.net/container-ontology/strateos-catalog/catalog-entries#Eppendorf30720016 - rdf:type owl:NamedIndividual , - cont:CatalogEntry ; - cont:catalogNumber "30720016" ; - cont:hasVendor cont:Eppendorf . - - -### https://sift.net/container-ontology/strateos-catalog/catalog-entries#Eppendorf30720113 - rdf:type owl:NamedIndividual , - cont:CatalogEntry ; - cont:catalogNumber "30720113" ; - cont:hasVendor cont:Eppendorf . - - -### https://sift.net/container-ontology/strateos-catalog/catalog-entries#Eppendorf30730119 - rdf:type owl:NamedIndividual , - cont:CatalogEntry ; - cont:catalogNumber "30730119" ; - cont:hasVendor cont:Eppendorf . - - -### https://sift.net/container-ontology/strateos-catalog/catalog-entries#Eppendorf951020539 - rdf:type owl:NamedIndividual , - cont:CatalogEntry ; - cont:catalogNumber "951020539" ; - cont:hasVendor cont:Eppendorf . - - -### https://sift.net/container-ontology/strateos-catalog/catalog-entries#Eppendorf951020619 - rdf:type owl:NamedIndividual , - cont:CatalogEntry ; - cont:catalogNumber "951020619" ; - cont:hasVendor cont:Eppendorf . - - -### https://sift.net/container-ontology/strateos-catalog/catalog-entries#Fisher22-387-030 - rdf:type owl:NamedIndividual , - cont:CatalogEntry ; - cont:catalogNumber "22-387-030" ; - cont:hasVendor cont:Fisher . - - -### https://sift.net/container-ontology/strateos-catalog/catalog-entries#Fisher22-387-031 - rdf:type owl:NamedIndividual , - cont:CatalogEntry ; - cont:catalogNumber "22-387-031" ; - cont:hasVendor cont:Fisher . - - -### https://sift.net/container-ontology/strateos-catalog/catalog-entries#Fisher249944 - rdf:type owl:NamedIndividual , - cont:CatalogEntry ; - cont:catalogNumber "249944" ; - cont:hasVendor cont:Fisher . - - -### https://sift.net/container-ontology/strateos-catalog/catalog-entries#Greiner655077 - rdf:type owl:NamedIndividual , - cont:CatalogEntry ; - cont:catalogNumber "655077" ; - cont:hasVendor cont:Greiner . - - -### https://sift.net/container-ontology/strateos-catalog/catalog-entries#Greiner781280 - rdf:type owl:NamedIndividual , - cont:CatalogEntry ; - cont:catalogNumber "781280" ; - cont:hasVendor cont:Greiner . - - -### https://sift.net/container-ontology/strateos-catalog/catalog-entries#Greiner782073 - rdf:type owl:NamedIndividual , - cont:CatalogEntry ; - cont:catalogNumber "782073" ; - cont:hasVendor cont:Greiner . - - -### https://sift.net/container-ontology/strateos-catalog/catalog-entries#LabcyteLP-0200 - rdf:type owl:NamedIndividual , - cont:CatalogEntry ; - cont:catalogNumber "LP-0200" ; - cont:hasVendor cont:Labcyte . - - -### https://sift.net/container-ontology/strateos-catalog/catalog-entries#LabcytePP-0200 - rdf:type owl:NamedIndividual , - cont:CatalogEntry ; - cont:catalogNumber "PP-0200" ; - cont:hasVendor cont:Labcyte . - - -### https://sift.net/container-ontology/strateos-catalog/catalog-entries#MesoscaleK15048G - rdf:type owl:NamedIndividual , - cont:CatalogEntry ; - cont:catalogNumber "K15048G" ; - cont:hasVendor cont:Mesoscale . - - -### https://sift.net/container-ontology/strateos-catalog/catalog-entries#MesoscaleK15069L - rdf:type owl:NamedIndividual , - cont:CatalogEntry ; - cont:catalogNumber "K15069L" ; - cont:hasVendor cont:Mesoscale . - - -### https://sift.net/container-ontology/strateos-catalog/catalog-entries#MesoscaleK152MSD - rdf:type owl:NamedIndividual , - cont:CatalogEntry ; - cont:catalogNumber "K152MSD" ; - cont:hasVendor cont:Mesoscale . - - -### https://sift.net/container-ontology/strateos-catalog/catalog-entries#PerkinElmer6007290 - rdf:type owl:NamedIndividual , - cont:CatalogEntry ; - cont:catalogNumber "6007290" ; - cont:hasVendor cont:PerkinElmer . - - -### https://sift.net/container-ontology/strateos-catalog/catalog-entries#PerkinElmer6008260 - rdf:type owl:NamedIndividual , - cont:CatalogEntry ; - cont:catalogNumber "6008260" ; - cont:hasVendor cont:PerkinElmer . - - -### https://sift.net/container-ontology/strateos-catalog/catalog-entries#PerkinElmer6008280 - rdf:type owl:NamedIndividual , - cont:CatalogEntry ; - cont:catalogNumber "6008280" ; - cont:hasVendor cont:PerkinElmer . - - -### https://sift.net/container-ontology/strateos-catalog/catalog-entries#ThermoFisher136101 - rdf:type owl:NamedIndividual , - cont:CatalogEntry ; - cont:catalogNumber "136101" ; - cont:hasVendor cont:ThermoFisher . - - -### https://sift.net/container-ontology/strateos-catalog/catalog-entries#ThermoFisher264573 - rdf:type owl:NamedIndividual , - cont:CatalogEntry ; - cont:catalogNumber "264573" ; - cont:hasVendor cont:ThermoFisher . - - -### https://sift.net/container-ontology/strateos-catalog/catalog-entries#E%26K%20ScientificEK-2053-S - rdf:type owl:NamedIndividual , - cont:CatalogEntry ; - cont:catalogNumber "EK-2053-S" ; - cont:hasVendor . - - -### https://sift.net/container-ontology/strateos-catalog/catalog-entries#Sumitomo%20Bakelite%20Co.MS-9384WZ - rdf:type owl:NamedIndividual , - cont:CatalogEntry ; - cont:catalogNumber "MS-9384WZ" ; - cont:hasVendor . - - -### Generated by the OWL API (version 4.5.9.2019-02-01T07:24:44Z) https://github.com/owlcs/owlapi diff --git a/owl/strateos_containers_with_ids.csv b/owl/strateos_containers_with_ids.csv deleted file mode 100644 index 7c67aea..0000000 --- a/owl/strateos_containers_with_ids.csv +++ /dev/null @@ -1,35 +0,0 @@ -,strateos_id,name,is_tube,well_count,well_depth_mm,well_volume_ul,well_coating,sterile,cover_types,seal_types,capabilities,shortname,col_count,dead_volume_ul,safe_min_volume_ul,true_max_vol_ul,vendor,cat_no,prioritize_seal_or_cover -0,DEEP24,24-well extended capacity plate,False,24,,10000:microliter,,False,,"['foil', 'breathable']","['liquid_handle', 'incubate', 'gel_separate', 'gel_purify', 'dispense', 'seal']",24-deep,6,15:microliter,60:microliter,10000:microliter,E&K Scientific,EK-2053-S,seal -1,DEEP96,96-well extended capacity plate,False,96,,2000:microliter,,False,"['standard', 'universal']",['breathable'],"['liquid_handle', 'incubate', 'gel_separate', 'gel_purify', 'cover', 'dispense', 'seal']",96-deep,12,5:microliter,30:microliter,2000:microliter,Corning,3961,cover -2,DEEP96KF,96-well extended capacity King Fisher plate,False,96,,1000:microliter,,False,['standard'],,"['liquid_handle', 'incubate', 'gel_separate', 'mag_dry', 'mag_incubate', 'mag_collect', 'mag_release', 'mag_mix', 'cover', 'dispense']",96-deep-kf,12,50:microliter,50:microliter,1000:microliter,Fisher,22-387-031,seal -3,ECHO384,384-well Echo plate,False,384,,65:microliter,,,['universal'],"['foil', 'ultra-clear']","['liquid_handle', 'seal', 'spin', 'incubate', 'dispense', 'cover']",384-echo,24,15:microliter,15:microliter,135:microliter,Labcyte,PP-0200,seal -4,ECHO384LDV,384-well Echo low dead volume plate,False,384,,14:microliter,,,['universal'],"['foil', 'ultra-clear']","['liquid_handle', 'seal', 'spin', 'incubate', 'dispense', 'cover']",384-echo-ldv,24,2.5:microliter,2.5:microliter,14:microliter,Labcyte,LP-0200,seal -5,ECHO384LDVPLUS,384-well Echo low dead volume plus plate,False,384,,14:microliter,PureCoat Amine Surface,,['universal'],"['foil', 'ultra-clear']","['liquid_handle', 'seal', 'spin', 'incubate', 'dispense', 'cover']",384-echo-ldv-plus,24,4.5:microliter,4.5:microliter,14:microliter,Labcyte,LPL-0200,seal -6,FALCON96UBOTTOM,"Falcon 96-Well, Cell Culture-Treated, U-Shaped-Bottom Microplate",False,96,10.5:millimeter,320:microliter,,False,['universal'],"['ultra-clear', 'foil']","['pipette', 'spin', 'incubate', 'cover', 'stamp', 'dispense-destination', 'provision', 'uncover', 'seal', 'unseal']",96-ubottom-clear-tc,12,50:microliter,50:microliter,320:microliter,Corning,353077,seal -7,FLAT1,1-well flat-bottom plate,False,1,,80000:microliter,,False,['universal'],,"['cover', 'incubate']",1-flat,1,36000:microliter,40000:microliter,80000:microliter,Fisher,267060,seal -8,FLAT384,384-well UV flat-bottom plate,False,384,,90:microliter,,False,"['standard', 'universal']","['ultra-clear', 'foil']","['liquid_handle', 'spin', 'absorbance', 'fluorescence', 'luminescence', 'incubate', 'gel_separate', 'gel_purify', 'cover', 'dispense', 'seal']",384-flat,24,7:microliter,15:microliter,90:microliter,Corning,3706,cover -9,FLAT384BLACKTC,384-well Black Clear Flat Bottom Tissue Culture Microplate,False,384,11.55,90:microliter,,True,"['universal', 'standard']","['ultra-clear', 'foil']","['pipette', 'spin', 'incubate', 'cover', 'stamp', 'dispense', 'dispense-destination', 'echo_dest', 'provision', 'uncover', 'seal', 'unseal', 'liquid_handle', 'absorbance', 'fluorescence', 'luminescence', 'bluewash', 'spectophotometry']",384-flatbottom-black-clear-tc,24,20:microliter,20:microliter,90:microliter,Corning,3764,seal -10,FLAT384BLACKUBOTTOM,384-well Black Clear Round Bottom Ultra-low Attachment Microplate,False,384,12.55,90:microliter,,True,['universal'],"['ultra-clear', 'foil']","['pipette', 'spin', 'incubate', 'cover', 'stamp', 'dispense', 'dispense-destination', 'echo_dest', 'provision', 'uncover', 'seal', 'unseal', 'liquid_handle', 'absorbance', 'fluorescence', 'luminescence', 'bluewash', 'spectophotometry']",384-ubottom-black-clear-tc,24,10:microliter,20:microliter,90:microliter,Corning,3830,seal -11,FLAT384CLEAR,384-well fully clear high binding plate,False,384,11.43,80:microliter,high bind,False,"['standard', 'universal', 'low_evaporation']","['ultra-clear', 'foil']","['incubate', 'seal', 'image_plate', 'dispense', 'spin', 'absorbance', 'cover', 'fluorescence', 'luminescence', 'liquid_handle', 'uncover']",384-flat-clear-clear,24,5:microliter,20:microliter,80:microliter,Corning,3700,seal -12,FLAT384WHITECLEAR,384-well flat-bottom polystyrene plate,False,384,,90:microliter,,False,"['standard', 'universal']","['breathable', 'ultra-clear']","['liquid_handle', 'spin', 'absorbance', 'fluorescence', 'luminescence', 'incubate', 'gel_separate', 'gel_purify', 'cover', 'dispense', 'seal']",384-flat-white-clear,24,7:microliter,15:microliter,90:microliter,Corning,3763,seal -13,FLAT384WHITELV,384-well flat-bottom low volume plate,False,384,9.39,40:microliter,,False,"['standard', 'universal']",,"['absorbance', 'cover', 'dispense', 'fluorescence', 'image_plate', 'incubate', 'luminescence', 'liquid_handle', 'spin', 'uncover']",384-flat-white-white-lv,24,5:microliter,15:microliter,40:microliter,Corning,3824,seal -14,FLAT384WHITETC,384-well flat-bottom low flange plate,False,384,11.43,80:microliter,,True,"['standard', 'universal']",,"['absorbance', 'cover', 'dispense', 'fluorescence', 'image_plate', 'incubate', 'luminescence', 'liquid_handle', 'spin', 'uncover']",384-flat-white-white-tc,24,20:microliter,30:microliter,80:microliter,Corning,3570,seal -15,FLAT6,6-well cell culture plate,False,6,,5000:microliter,,False,"['standard', 'universal']",,"['cover', 'incubate', 'image_plate']",6-flat,3,400:microliter,600:microliter,5000:microliter,Eppendorf,30720016,seal -16,FLAT6TC,6-well TC treated plate,False,6,,5000:microliter,,False,"['standard', 'universal']",,"['cover', 'incubate', 'image_plate']",6-flat-tc,3,400:microliter,600:microliter,5000:microliter,Eppendorf,30720113,seal -17,FLAT96,96-well flat-bottom plate,False,96,,340:microliter,,False,"['low_evaporation', 'standard', 'universal']",,"['liquid_handle', 'spin', 'absorbance', 'fluorescence', 'luminescence', 'incubate', 'gel_separate', 'gel_purify', 'cover', 'dispense']",96-flat,12,25:microliter,65:microliter,340:microliter,Corning,3632,seal -18,FLAT96CLEARTC,96-well flat-bottom TC treated plate,False,96,,340:microliter,,False,"['low_evaporation', 'standard', 'universal']",,"['liquid_handle', 'spin', 'absorbance', 'fluorescence', 'luminescence', 'incubate', 'gel_separate', 'gel_purify', 'cover', 'dispense']",96-flat-clear-clear-tc,12,25:microliter,65:microliter,340:microliter,Eppendorf,0030730119,seal -19,FLAT96DELTA,"Nunc MicroWell 96-Well, Nunclon Delta-Treated, Flat-Bottom Microplate",False,96,11.2:millimeter,320:microliter,,True,"['low_evaporation', 'standard', 'universal']","['ultra-clear', 'foil']","['pipette', 'spin', 'incubate', 'cover', 'stamp', 'dispense-destination', 'provision', 'uncover', 'seal', 'unseal', 'liquid_handle', 'absorbance', 'fluorescence', 'luminescence']",96-flat-white-dc,12,50:microliter,50:microliter,320:microliter,ThermoFisher,136101,seal -20,FLAT96UV,96-well flat-bottom UV transparent plate,False,96,,340:microliter,,False,"['low_evaporation', 'standard', 'universal']",,"['liquid_handle', 'spin', 'absorbance', 'fluorescence', 'luminescence', 'incubate', 'gel_separate', 'gel_purify', 'cover', 'dispense']",96-flat-uv,12,25:microliter,65:microliter,340:microliter,Corning,3635,seal -21,MICRO15,1.5mL Microcentrifuge tube,True,1,,1500:microliter,,False,,,"['liquid_handle', 'gel_separate', 'gel_purify', 'incubate', 'spin']",micro-1.5,1,20:microliter,20:microliter,1500:microliter,USA Scientific,1615-5500,seal -22,MICRO2,2mL Microcentrifuge tube,True,1,,2000:microliter,,False,,,"['liquid_handle', 'gel_separate', 'gel_purify', 'incubate', 'spin']",micro-2.0,1,5:microliter,40:microliter,2000:microliter,E&K Scientific,280200,seal -23,PCR384,384-well PCR plate,False,384,,40:microliter,,,,"['ultra-clear', 'foil']","['liquid_handle', 'spin', 'thermocycle', 'incubate', 'gel_separate', 'gel_purify', 'seal', 'dispense']",384-pcr,24,2:microliter,3:microliter,40:microliter,Eppendorf,951020539,seal -24,PCR96,96-well PCR plate,False,96,,160:microliter,,,,"['ultra-clear', 'foil']","['liquid_handle', 'sangerseq', 'spin', 'thermocycle', 'incubate', 'gel_separate', 'gel_purify', 'seal', 'dispense']",96-pcr,12,3:microliter,5:microliter,160:microliter,Eppendorf,951020619,seal -25,PCR96FSC,"96-well Polypropylene PCR Microplate, Full Skirt, Clear, Nonsterile",False,96,14.6,200:microliter,,False,,"['ultra-clear', 'foil']","['liquid_handle', 'sangerseq', 'spin', 'thermocycle', 'incubate', 'gel_separate', 'gel_purify', 'seal', 'dispense']",96-pcr-fs-clear,12,3:microliter,5:microliter,200:microliter,Axygen,PCR-96-FS-C,seal -26,RESMW12HP,12-column multiwell highprofile reservoir,False,12,,15.75:milliliter,,False,['universal'],,"['liquid_handle', 'incubate', 'cover', 'dispense', 'liquid_handle']",res-mw12-hp,12,1.8:milliliter,5:milliliter,21:milliliter,Axygen,res-mw12-hp,seal -27,RESMW8HP,8-row multiwell highprofile reservoir,False,8,,24:milliliter,,False,['universal'],,"['liquid_handle', 'incubate', 'cover', 'dispense', 'liquid_handle']",res-mw8-hp,1,2.5:milliliter,5:milliliter,32:milliliter,Axygen,res-mw8-hp,seal -28,RESSW384LP,384-well singlewell lowprofile reservoir,False,1,,35:milliliter,,False,['universal'],,"['liquid_handle', 'incubate', 'cover', 'dispense', 'liquid_handle', 'sbs384_compatible']",res-sw384-lp,1,10:milliliter,30:milliliter,92:milliliter,Axygen,res-sw384-lp,seal -29,RESSW96HP,96-well singlewell highprofile reservoir,False,1,,170:milliliter,,False,['universal'],,"['liquid_handle', 'incubate', 'cover', 'dispense', 'liquid_handle']",res-sw96-hp,1,25:milliliter,30:milliliter,280:milliliter,Axygen,res-sw96-hp,seal -30,ROUND384CLEAR,384-well round-bottom plate,False,384,,70:microliter,,False,"['universal', 'standard']","['ultra-clear', 'foil']","['incubate', 'seal', 'image_plate', 'liquid_handle', 'dispense', 'spin', 'mag_dry', 'mag_incubate', 'mag_collect', 'mag_release', 'mag_mix', 'absorbance', 'fluorescence', 'luminescence', 'cover', 'thermocycle']",384-round-clear-clear,24,15:microliter,20:microliter,70:microliter,Corning,3657,seal -31,V384CLEAR,384-well v-bottom polypropylene plate,False,384,,120:microliter,,False,"['universal', 'standard']","['ultra-clear', 'foil']","['incubate', 'seal', 'image_plate', 'liquid_handle', 'dispense', 'spin', 'mag_dry', 'mag_incubate', 'mag_collect', 'mag_release', 'mag_mix', 'absorbance', 'fluorescence', 'luminescence', 'cover', 'thermocycle']",384-v-clear-clear,24,13:microliter,18:microliter,120:microliter,Greiner,781280,seal -32,V96CC,"96-well cell culture multiple well plate, V bottom",False,96,10.668,200:microliter,,True,"['standard', 'universal', 'low_evaporation', 'ultra-clear', 'foil']",,"['dispense', 'spin', 'seal', 'unseal', 'liquid_handle', 'cover', 'echo_dest', 'spectrophotometry', 'image_plate', 'incubate', 'uncover', 'dispense-destination', 'envision', 'absorbance', 'fluorescence']",96-well-v-bottom,12,75:microliter,5:microliter,320:microliter,Corning,3894,seal -33,V96KF,96-well v-bottom King Fisher plate,False,96,,200:microliter,,False,['standard'],,"['liquid_handle', 'incubate', 'gel_separate', 'mag_dry', 'mag_incubate', 'mag_collect', 'mag_release', 'mag_mix', 'cover', 'dispense']",96-v-kf,12,20:microliter,20:microliter,200:microliter,Fisher,22-387-030,seal diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..d08a1cc --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,61 @@ +#--------------------------- setuptools ----------------------------- + +[build-system] +requires = ["setuptools>=42"] +build-backend = "setuptools.build_meta" + +[project] +name = "labop_labware" +version = "0.0.1" +readme = "README.md" +license = {text = "MIT"} +classifiers=[ + 'Development Status :: 2 - Pre-Alpha', + 'Intended Audience :: Developers', + 'Intended Audience :: Science/Research', + 'Intended Audience :: Education', + 'License :: OSI Approved :: MIT License', + 'Operating System :: OS Independent', + 'Natural Language :: English', + 'Programming Language :: Python :: 3', + 'Programming Language :: Python :: 3.9', + 'Programming Language :: Python :: 3.10', + 'Topic :: Scientific/Engineering', + 'Topic :: Scientific/Engineering :: Information Analysis', + 'Topic :: Scientific/Engineering :: Visualization', + 'Topic :: Scientific/Engineering :: Bio-Informatics', + 'Topic :: Scientific/Engineering :: Chemistry' +] +#packages = [ +# { include = "labop_labware" }, +#] + +# uncomment to enable commandline access of the module via its name +#[project.scripts] +#labop_labware = "labop_labware.__main__:main" + +[tool.pytest.ini_options] +minversion = "6.0" +filterwarnings = "ignore::DeprecationWarning" +addopts = [ + "-v", + #"-n=auto", +] + +[tool.black] +line-length = 120 + +[tool.isort] +profile = "black" + +[tool.coverage.report] +exclude_lines = ["if __name__ == .__main__.:"] +skip_empty = true + +[tool.bandit] +exclude_dirs = ["tests"] +skips = ["B101"] +# end setuptools + + + diff --git a/requirements.txt b/requirements.txt index d28b538..2309722 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1 +1 @@ -rdflib \ No newline at end of file +wheel diff --git a/requirements_dev.txt b/requirements_dev.txt new file mode 100644 index 0000000..65889fc --- /dev/null +++ b/requirements_dev.txt @@ -0,0 +1,8 @@ +-r requirements.txt +invoke +bumpversion +pytest +tox +sphinx +myst_parser +python_docs_theme \ No newline at end of file diff --git a/scripts/owl2sparql.py b/scripts/owl2sparql.py deleted file mode 100644 index 49a7cac..0000000 --- a/scripts/owl2sparql.py +++ /dev/null @@ -1,76 +0,0 @@ -import argparse -import os - -from rdflib import Graph -from sys import stdout - - -def JSON_prefixes(g: Graph, stream): - """ - Extract prefix definitions from `g` `and write them to `stream` in JSON format. - Parameters - ---------- - g : rdflib.Graph - - Returns - ------- - Nothing - - """ - nsm = g.namespace_manager - is_first_line = True - print("{", file=stream, end=" ") - for pre, URI in nsm.namespaces(): - if is_first_line: - is_first_line = False - else: - print(", ", file=stream, end="") - print(f"\"{pre}\": \"{URI}\"", file=stream, end="") - print(" }", file=stream, end="") - - -def SPARQL_prefixes(g, stream): - """ - Extract prefix definitions from `g` `and write them to `stream` in SPARQL format. - Parameters - ---------- - g : rdflib.Graph - - Returns - ------- - Nothing - - """ - nsm = g.namespace_manager - for pre, URI in nsm.namespaces(): - print(f"PREFIX {pre}: ", file=stream) - - -if __name__ == '__main__': - parser = argparse.ArgumentParser() - parser.add_argument("input", nargs='?', help="RDF file from which to extract the prefix.", type=open) - parser.add_argument("--format", default='sparql', choices=['sparql', 'json'], - help="Output format for the prefix map.") - parser.add_argument("-o", "--output", help="Output file name (defaults to write to standard output).") - - args = parser.parse_args() - filename = args.input.name - _name, ext = os.path.splitext(filename) - g: Graph = Graph() - - # For some reason, the RDFLIB parser has trouble with turtle format files. - if ext == '.ttl': - g.parse(args.input, format='turtle') - else: - g.parse(args.input) - - args.input.close() - - if args.output is None: - output_file = stdout - else: - output_file = open(args.output, 'w') - if args.format == 'sparql': - SPARQL_prefixes(g, output_file) - elif args.format == 'json': - JSON_prefixes(g, output_file) diff --git a/scripts/rdfdiff.py b/scripts/rdfdiff.py deleted file mode 100644 index 5725829..0000000 --- a/scripts/rdfdiff.py +++ /dev/null @@ -1,50 +0,0 @@ -#! /usr/bin/env python3 - -from rdflib import Graph -from rdflib.compare import to_isomorphic, graph_diff -from rdflib.namespace import Namespace -import sys -from typing import Tuple, Any, Optional - -from rdflib.namespace import OWL - -CONT = Namespace("http://www.semanticweb.org/rpg/ontologies/2021/5/container-ontology#") - - -def rdfdiff(old: str, new: str, old_format='turtle', new_format='turtle') -> Optional[Tuple[Any, Any, Any]]: - old_graph: Graph = Graph() - new_graph: Graph = Graph() - old_graph.parse(old, format=old_format) - new_graph.parse(new, format=new_format) - iso1: Graph = to_isomorphic(old_graph) - iso2: Graph = to_isomorphic(new_graph) - if iso1 == iso2: - return None - in_both, in_old, in_new = graph_diff(iso1, iso2) - in_old.namespace_manager.bind('owl', OWL, override=False) - in_new.namespace_manager.bind('owl', OWL, override=False) - in_old.namespace_manager.bind('cont', CONT, override=False) - in_new.namespace_manager.bind('cont', CONT, override=False) - return in_both, in_old, in_new - - -if __name__ == '__main__': - retval = rdfdiff(sys.argv[1], sys.argv[2]) - if retval is None: - print("RDF graph is unchanged") - exit(0) - - in_both: Graph - in_old: Graph - in_new: Graph - _in_both, in_old, in_new = retval - # print("Common triples:") - # print(in_both.serialize(format="turtle")) - # print("------------------------") - print("Only in old graph") - print(in_old.serialize(format="turtle").decode('utf-8')) - print("------------------------") - print("Only in new graph") - print(in_new.serialize(format="turtle").decode('utf-8')) - print("------------------------") - exit(1) diff --git a/setup.cfg b/setup.cfg new file mode 100644 index 0000000..609c6b4 --- /dev/null +++ b/setup.cfg @@ -0,0 +1,2 @@ +[run] +omit = *experiment.py,*process_*.py,*old*.py diff --git a/setup.py b/setup.py index f731e01..aafbbe7 100644 --- a/setup.py +++ b/setup.py @@ -1,41 +1,36 @@ -from setuptools import setup, find_packages # noqa: H301 - -NAME = "container-ontology" -VERSION = "1.0.0" -# To install the library, run the following -# -# python setup.py install -# -# prerequisite: setuptools -# http://pypi.python.org/pypi/setuptools - -REQUIRES = [ - "rdflib", - "urllib3 >= 1.25.3", - "python-dateutil", - "owlery-client @ git+https://github.com/rpgoldman/owlery-client.git@v1.0.0#egg=owlery-client", -] - -packages = find_packages(where="src", exclude=["catalog_translator", "test", "tests"]) - -package_dir = { - '': "src", -} +import os +import re + +from setuptools import setup, find_packages + + +REGEX_COMMENT = re.compile(r"[\s^]#(.*)") + +# allow setup.py to be run from any path +os.chdir(os.path.normpath(os.path.join(os.path.abspath(__file__), os.pardir))) + +dir_path = os.path.dirname(os.path.realpath(__file__)) + +with open(os.path.join(dir_path, "VERSION"), "r") as version_file: + version = str(version_file.readline()).strip() + + +def parse_requirements(filename): + filename = os.path.join(os.path.dirname(os.path.abspath(__file__)), filename) + with open(filename, "rt") as filehandle: + requirements = filehandle.readlines()[2:] + return tuple(filter(None, (REGEX_COMMENT.sub("", line).strip() for line in requirements))) + setup( - name=NAME, - version=VERSION, - description="SD2E Container Ontology for PAML", - author="Robert P. Goldman", - author_email="rpgoldman@sift.net", - url="https://github.com/rpgoldman/container-ontology", - python_requires=">=3.6", - install_requires=REQUIRES, - packages=packages, - package_dir=package_dir, + name="labop_labware", + version=version, + packages=find_packages(), include_package_data=True, - license="Apache", - # long_description="""\ - # Owlery provides a web API for an [OWL API](http://owlapi.sourceforge.net)-based reasoner containing a configurable set of ontologies (a \"knowledgebase\"). # noqa: E501 - # """ + author="mark doerr", + author_email="mark.doerr@uni-greifswald.de", + description="An ontology describing labware for scientific experiments, based on EMMO and EMMOntoPy.", + url="https://gitlab.com/opensourcelab/scientificdata/ontologies/openscienceontology/labware", + install_requires=parse_requirements("requirements.txt"), + extras_require={"tests": parse_requirements("requirements_dev.txt")}, ) diff --git a/src/catalog_translator/Strateos Catalog.py b/src/catalog_translator/Strateos Catalog.py deleted file mode 100644 index 72a8c2e..0000000 --- a/src/catalog_translator/Strateos Catalog.py +++ /dev/null @@ -1,346 +0,0 @@ -#!/usr/bin/env python -# coding: utf-8 - -# # Make Classes for the Microplates in the Strateos catalog -# -# - -# In[1]: - - -import pandas as pd -from typing import List, Union, Optional, Tuple -import rdflib -from rdflib import Graph, Namespace, Literal, URIRef, BNode -from rdflib.namespace import RDF, RDFS, OWL, XSD -from urllib.parse import quote - - -# In[2]: - - -# Type declaration -Triple = Tuple[URIRef, URIRef, URIRef] - - -# In[3]: - - -workbook = pd.ExcelFile('../owl/Strateos containers.xlsx',engine='openpyxl') -strateos_catalog = pd.read_excel(workbook, "Strateos Containers") -strateos_plates = strateos_catalog[strateos_catalog['Well Count'] > 1] -strateos_plates.head() - - -# In[4]: - - -for i, x in strateos_plates.iterrows(): - break -print(x) -print(x.index) -x['Well Depth (mm)'] - - -# In[5]: - - -CATALOG_IRI = URIRef('urn:absolute:strateos-containers') -ENTRY_IRI = URIRef('urn:absolute:strateos_containers_catalog') - - -# In[6]: - - -g = Graph(identifier=CATALOG_IRI) - - -# In[7]: - - -co_ns = Namespace('https://www.dropbox.com/s/s1e2dzw64m01f9n/container-ontology.ttl#') -strateos_ns = Namespace(CATALOG_IRI + '#') -strateos_entries_ns = Namespace(ENTRY_IRI + '#') -om_ns = Namespace('http://www.ontology-of-units-of-measure.org/resource/om-2/') -g.bind('cont', co_ns) -g.bind('cat', strateos_ns) -g.bind('om', om_ns) -g.bind('rdf', RDF) -g.bind('rdfs', RDFS) -g.bind('owl', OWL) -g.bind('cat_ent', strateos_entries_ns) -g.base = CATALOG_IRI - - -# In[8]: - - -list(g.namespace_manager.namespaces()) - - -# In[9]: - - -help(g.namespace_manager) - - -# In[10]: - - -isinstance(co_ns, str) - - -# In[23]: - - -CATALOG_IRI - - -# In[11]: - - -g.add((CATALOG_IRI, RDF.type, OWL.ontology)) -for x in [co_ns, om_ns]: - g.add((CATALOG_IRI, OWL.imports, URIRef(x.rstrip("#")))) -g.add((CATALOG_IRI, RDFS.label, Literal("Strateos Catalog Containers", lang='en'))) - - -# In[12]: - - - -def add_vendor(vendor_string, graph=g) -> URIRef: - vendor_iri = co_ns[quote(vendor_string)] - vendor_name = Literal(vendor_string) - graph.add((vendor_iri, RDF.type, co_ns.VendorFirm)) - graph.add((vendor_iri, RDFS.label, vendor_name)) - graph.add((vendor_iri, co_ns.vendorName, vendor_name)) - return vendor_iri - -def find_vendor(vendor_string, graph=g) -> Optional[URIRef]: - vendor_iri = co_ns[quote(vendor_string)] - if (vendor_iri, RDF.type, co_ns.VendorFirm) in graph: - return vendor_iri - return None - - -# In[13]: - - -def catalog_entry(vendor: str, catalog_number: Union[int, str], graph=g) -> URIRef: - if isinstance(catalog_number, int): - catalog_number = str(catalog_number) - assert isinstance(catalog_number, str) - vendor_iri = find_vendor(vendor, graph) - new_iri = strateos_entries_ns[quote(vendor + catalog_number)] - graph.add((new_iri, RDF.type, co_ns.CatalogEntry)) - graph.add((new_iri, co_ns.hasVendor, vendor_iri)) - graph.add((new_iri, co_ns.catalogNumber, Literal(catalog_number))) - return new_iri - - - -# In[14]: - - -class WellDepth(URIRef): - depth: float - unit: URIRef - count = 0 - def __new__(cls, *args, **kwargs): - ns = kwargs['ns'] - URI = ns[f"wellDepth{cls.count}"] - cls.count += 1 - return super().__new__(cls, URI) - - def __init__(self, depth: float, unit=om_ns.millimetre, ns=strateos_ns): - self.depth = depth - self.unit = unit - super().__init__() - - def triples(self) -> List[Tuple[URIRef, URIRef, URIRef]]: - return [ - (self, RDF.type, om_ns.Depth), - (self, om_ns.hasNumericalValue, Literal(self.depth, datatype=XSD.float)), - (self, om_ns.hasDimension, self.unit), - ] - - -def make_well_depth(depth: float, unit=om_ns.millimetre, ns=strateos_ns, graph=g) -> URIRef: - depth_uri = WellDepth(depth, unit=unit, ns=ns) - for triple in depth_uri.triples(): - graph.add(triple) - return depth_uri - - - - -# In[15]: - - -class Height(URIRef): - height: float - unit: URIRef - count = 0 - def __new__(cls, *args, **kwargs): - ns = kwargs['ns'] - URI = ns[f"height{cls.count}"] - cls.count += 1 - return super().__new__(cls, URI) - - def __init__(self, height: float, unit=om_ns.millimetre, ns=strateos_ns): - self.height = height - self.unit = unit - super().__init__() - - def triples(self) -> List[Tuple[URIRef, URIRef, URIRef]]: - return [ - (self, RDF.type, om_ns.Height), - (self, om_ns.hasNumericalValue, Literal(self.height, datatype=XSD.float)), - (self, om_ns.hasDimension, self.unit), - ] - - -def make_height(height: float, unit=om_ns.millimetre, ns=strateos_ns, graph=g) -> URIRef: - height_uri = Height(height, unit=unit, ns=ns) - for triple in height_uri.triples(): - graph.add(triple) - return height_uri - - - - -# In[16]: - - -class WellVolume(URIRef): - volume: float - unit: URIRef - count = 0 - def __new__(cls, *args, **kwargs): - ns = kwargs['ns'] - URI = ns[f"wellvolume{cls.count}"] - cls.count += 1 - return super().__new__(cls, URI) - - def __init__(self, volume: float, unit=om_ns.microlitre, ns=strateos_ns): - self.volume = volume - self.unit = unit - super().__init__() - - def triples(self) -> List[Tuple[URIRef, URIRef, URIRef]]: - return [ - (self, RDF.type, om_ns.Volume), - (self, om_ns.hasNumericalValue, Literal(self.volume, datatype=XSD.float)), - (self, om_ns.hasDimension, self.unit), - ] - - -def make_well_volume(volume: float, unit=om_ns.microlitre, ns=strateos_ns, graph=g) -> URIRef: - volume_uri = WellVolume(volume, unit=unit, ns=ns) - for triple in volume_uri.triples(): - graph.add(triple) - return volume_uri - - - - -# In[24]: - - -def make_restriction(classURI: URIRef, propertyURI: URIRef, value: URIRef) -> Tuple[BNode, List[Triple]]: - """Return a Blank node and list of tuples for a restriction definition. - The Blank node can be used as a class specifier, and the Triples should be added to - the graph of interest. - """ - bnode: BNode = BNode() - triples: List[Triple] = [] - triples.append((bnode, RDF.type, OWL.Restriction)) - triples.append((bnode, OWL.onProperty, propertyURI)) - triples.append((bnode, OWL.hasValue, value)) - triples.append((classURI, RDFS.subClassOf, bnode)) - - return bnode, triples - - -# In[18]: - - -def add_all(g: Graph, triples: List[Triple]) -> None: - for t in triples: - g.add(t) - - -# In[19]: - - -def prefix(g: Graph) -> None: - g.add((plate_iri, RDFS.subClassOf, r)) - - -# In[20]: - - - -for _, x in strateos_plates.iterrows(): - id = x['Id'] - vendor = x['Vendor'] - vendor_iri = find_vendor(vendor) - if vendor_iri is None: - vendor_iri = add_vendor(vendor) - catalog_number = x['Catalog Number'] - plate_iri = rdflib.term.URIRef(strateos_ns[quote(vendor+id)]) - ce = catalog_entry(vendor, catalog_number) - g.add((plate_iri, RDFS.subClassOf, co_ns.Plate)) - _r, triples = make_restriction(plate_iri, co_ns.hasCatalogEntry, ce) - add_all(g, triples) - - _r, triples = make_restriction(plate_iri, co_ns.wellCount, Literal(int(x['Well Count']))) - add_all(g, triples) - cols = int(x['Column Count']) - rows = int(x['Well Count'] / cols) - - _r, triples = make_restriction(plate_iri, co_ns.columnCount, Literal(cols)) - add_all(g, triples) - - _r, triples = make_restriction(plate_iri, co_ns.rowCount, Literal(rows)) - add_all(g, triples) - - g.add((plate_iri, RDFS.comment, Literal(vendor + " " + x['Name']))) - g.add((plate_iri, RDFS.label, Literal(id))) - - _r, triples = make_restriction(plate_iri, co_ns.equipmentVendor, vendor_iri) - add_all(g, triples) - - well_depth = make_well_depth(float(x['Well Depth (mm)'])) - _r, triples = make_restriction(plate_iri, co_ns.wellDepth, well_depth) - add_all(g, triples) - - well_vol = make_well_volume(float(x['Well Volume (ul)'])) - _r, triples = make_restriction(plate_iri, co_ns.wellVolume, well_vol) - add_all(g, triples) - - height = make_height(float(x['Height (mm)'])) - _r, triples = make_restriction(plate_iri, co_ns.height, height) - add_all(g, triples) - - print(f"Added {vendor} {id} as {plate_iri}") - - -# In[21]: - - -g.serialize(format='turtle') - - -# In[22]: - - -g.serialize('../owl/strateos-catalog.ttl', format='turtle') - - -# In[ ]: - - - - diff --git a/src/catalog_translator/catalog_translator.py b/src/catalog_translator/catalog_translator.py deleted file mode 100644 index 619d5e8..0000000 --- a/src/catalog_translator/catalog_translator.py +++ /dev/null @@ -1,431 +0,0 @@ -from typing import List, Union, Optional, Tuple -import os - -import rdflib -from rdflib import Graph, Namespace, Literal, URIRef, BNode -from rdflib.namespace import RDF, RDFS, OWL, XSD -from urllib.parse import quote -import pandas as pd - - -# Type declaration -Triple = Tuple[URIRef, URIRef, URIRef] - -CATALOG_IRI = URIRef("urn:absolute:strateos-containers") -ENTRY_IRI = URIRef("urn:absolute:strateos_containers_catalog") -CONT_NS = Namespace("https://www.dropbox.com/s/s1e2dzw64m01f9n/container-ontology.ttl#") -# This is the master naemspace for the -STRATEOS_NS = Namespace(CATALOG_IRI + "#") -strateos_entries_ns = Namespace(ENTRY_IRI + "#") -om_ns = Namespace("http://www.ontology-of-units-of-measure.org/resource/om-2/") -OM_SUBSET = Namespace("https://www.dropbox.com/s/ytuxjttj1ba5f0d/om-subset.ttl") - - -def make_catalog_graph( - identifier, - label: str = "Strateos Catalog Containers", - comment: Optional[str] = None, -) -> Graph: - """ - - Parameters - ---------- - identifier : URIRef - The URI for the ontology (*not* the prefix, so no separator character) - label : str - What goes in the `rdfs:label` for the ontology - comment : str, optional - What, if anything, goes in the `rdfs:comment` for the ontology - - Returns - ------- - Graph - Graph will have as its identifier the identifier argument, which will also be the `@base` of the - ontology. It will have defined in it a `"cat:"` prefix for the ontology and a `"cat_ent"` subsidiary - namespace for catalog entry individuals/URIs. This helps avoid name collisions. - - """ - g: Graph = Graph(identifier=identifier) - g.bind("cont", CONT_NS) - g.bind("cat", Namespace(URIRef(identifier + "#"))) - g.bind("om", om_ns) - g.bind("rdf", RDF) - g.bind("rdfs", RDFS) - g.bind("owl", OWL) - g.bind("cat_ent", Namespace(URIRef(identifier + "_catalog#"))) - g.base = identifier - for x in [CONT_NS, OM_SUBSET]: - g.add((identifier, OWL.imports, URIRef(x.rstrip("#")))) - g.add((identifier, RDF.type, OWL.Ontology)) - g.add((identifier, RDFS.label, Literal(label, lang="en"))) - if comment is not None: - g.add((identifier, RDFS.comment, Literal(comment, lang="en"))) - return g - - -def add_vendor(vendor_string, graph) -> URIRef: - """ - Record in graph the existence of vendor with name `vendor_string`. - Parameters - ---------- - vendor_string : str - Name of the vendor - graph : Graph - - Returns - ------- - URIRef : URI assigned to the `Vendor` entity. - - """ - vendor_iri = URIRef(CONT_NS[quote(vendor_string)]) - vendor_name = Literal(vendor_string) - graph.add((vendor_iri, RDF.type, CONT_NS.VendorFirm)) - graph.add((vendor_iri, RDFS.label, vendor_name)) - graph.add((vendor_iri, CONT_NS.vendorName, vendor_name)) - return vendor_iri - - -def find_vendor(vendor_string, graph) -> Optional[URIRef]: - """ - Find and return `cont:Vendor` object for `vendor_string` if one exists. - - Parameters - ---------- - vendor_string : str - graph : Graph - - Returns - ------- - URIRef if one exists, else `None` - - """ - vendor_iri = URIRef(CONT_NS[quote(vendor_string)]) - if (vendor_iri, RDF.type, CONT_NS.VendorFirm) in graph: - return vendor_iri - return None - - -# In[13]: - - -def catalog_entry(vendor: str, catalog_number: Union[int, str], graph) -> URIRef: - """ - Create `catalog_entry` entity, add to `graph` and return the URI - Parameters - ---------- - vendor - catalog_number - graph - - Returns - ------- - - """ - if isinstance(catalog_number, int): - catalog_number = str(catalog_number) - assert isinstance(catalog_number, str) - vendor_iri = find_vendor(vendor, graph) - new_iri = URIRef(strateos_entries_ns[quote(vendor + catalog_number)]) - graph.add((new_iri, RDF.type, CONT_NS.CatalogEntry)) - graph.add((new_iri, CONT_NS.hasVendor, vendor_iri)) - graph.add((new_iri, CONT_NS.catalogNumber, Literal(catalog_number))) - return new_iri - - -class WellDepth(URIRef): - depth: float - unit: URIRef - count = 0 - - def __new__(cls, *args, **kwargs): - ns = kwargs["ns"] - URI = ns[f"wellDepth{cls.count}"] - cls.count += 1 - return super().__new__(cls, URI) - - def __init__(self, depth: float, unit=om_ns.millimetre, ns=STRATEOS_NS): - self.depth = depth - self.unit = unit - super().__init__() - - def triples(self) -> List[Tuple[URIRef, URIRef, URIRef]]: - return [ - (self, RDF.type, om_ns.Depth), - (self, om_ns.hasNumericalValue, Literal(self.depth, datatype=XSD.float)), - (self, om_ns.hasDimension, self.unit), - ] - - -def make_well_depth( - depth: float, graph, unit=om_ns.millimetre, ns=STRATEOS_NS -) -> URIRef: - depth_uri = WellDepth(depth, unit=unit, ns=ns) - for triple in depth_uri.triples(): - graph.add(triple) - return depth_uri - - -class Height(URIRef): - height: float - unit: URIRef - count = 0 - - def __new__(cls, *args, **kwargs): - ns = kwargs["ns"] - URI = ns[f"height{cls.count}"] - cls.count += 1 - return super().__new__(cls, URI) - - def __init__(self, height: float, unit=om_ns.millimetre, ns=STRATEOS_NS): - self.height = height - self.unit = unit - super().__init__() - - def triples(self) -> List[Tuple[URIRef, URIRef, URIRef]]: - return [ - (self, RDF.type, om_ns.Height), - (self, om_ns.hasNumericalValue, Literal(self.height, datatype=XSD.float)), - (self, om_ns.hasDimension, self.unit), - ] - - -def make_height(height: float, graph, unit=om_ns.millimetre, ns=STRATEOS_NS) -> URIRef: - height_uri = Height(height, unit=unit, ns=ns) - for triple in height_uri.triples(): - graph.add(triple) - return height_uri - - -class WellVolume(URIRef): - volume: float - unit: URIRef - count = 0 - - def __new__(cls, *args, **kwargs): - ns = kwargs["ns"] - URI = ns[f"wellvolume{cls.count}"] - cls.count += 1 - return super().__new__(cls, URI) - - def __init__(self, volume: float, unit=om_ns.microlitre, ns=STRATEOS_NS): - self.volume = volume - self.unit = unit - super().__init__() - - def triples(self) -> List[Tuple[URIRef, URIRef, URIRef]]: - return [ - (self, RDF.type, om_ns.Volume), - (self, om_ns.hasNumericalValue, Literal(self.volume, datatype=XSD.float)), - (self, om_ns.hasDimension, self.unit), - ] - - -def make_well_volume( - volume: float, graph, unit=om_ns.microlitre, ns=STRATEOS_NS -) -> URIRef: - volume_uri = WellVolume(volume, unit=unit, ns=ns) - for triple in volume_uri.triples(): - graph.add(triple) - return volume_uri - - -def make_restriction( - classURI: URIRef, propertyURI: URIRef, value: URIRef -) -> Tuple[BNode, List[Triple]]: - """Return a Blank node and list of tuples for a restriction definition. - The Blank node can be used as a class specifier, and the Triples should be added to - the graph of interest. - """ - bnode: BNode = BNode() - triples: List[Triple] = [(bnode, RDF.type, OWL.Restriction), (bnode, OWL.onProperty, propertyURI), - (bnode, OWL.hasValue, value), (classURI, RDFS.subClassOf, bnode)] - - return bnode, triples - - -def add_all(g: Graph, triples: List[Triple]) -> None: - for t in triples: - g.add(t) - - -def translate_spreadsheet_classes(plates: pd.DataFrame, g: Graph) -> None: - """ - Translate the contents of `plates` and add them to `g`. - - The elements of the catalog in `plates` will be translated as OWL *classes* - - Parameters - ---------- - plates - g - - Returns - ------- - Nothing - - """ - for _, x in plates.iterrows(): - id = x["Id"] - vendor = x["Vendor"] - vendor_iri = find_vendor(vendor, g) - if vendor_iri is None: - vendor_iri = add_vendor(vendor, g) - catalog_number = x["Catalog Number"] - plate_iri = rdflib.term.URIRef(STRATEOS_NS[quote(vendor + id)]) - g.add((plate_iri, RDF.type, OWL.Class)) - ce = catalog_entry(vendor, catalog_number, g) - g.add((plate_iri, RDFS.subClassOf, CONT_NS.Plate)) - _r, triples = make_restriction(plate_iri, CONT_NS.hasCatalogEntry, ce) - add_all(g, triples) - - _r, triples = make_restriction( - plate_iri, CONT_NS.wellCount, Literal(int(x["Well Count"])) - ) - add_all(g, triples) - cols = int(x["Column Count"]) - rows = int(x["Well Count"] / cols) - - _r, triples = make_restriction(plate_iri, CONT_NS.columnCount, Literal(cols)) - add_all(g, triples) - - _r, triples = make_restriction(plate_iri, CONT_NS.rowCount, Literal(rows)) - add_all(g, triples) - - g.add((plate_iri, RDFS.comment, Literal(vendor + " " + x["Name"]))) - g.add((plate_iri, RDFS.label, Literal(id))) - - _r, triples = make_restriction(plate_iri, CONT_NS.equipmentVendor, vendor_iri) - add_all(g, triples) - - well_depth = make_well_depth(float(x["Well Depth (mm)"]), g) - _r, triples = make_restriction(plate_iri, CONT_NS.wellDepth, well_depth) - add_all(g, triples) - - well_vol = make_well_volume(float(x["Well Volume (ul)"]), g) - _r, triples = make_restriction(plate_iri, CONT_NS.wellVolume, well_vol) - add_all(g, triples) - - height = make_height(float(x["Height (mm)"]), g) - _r, triples = make_restriction(plate_iri, CONT_NS.height, height) - add_all(g, triples) - - print(f"Added {vendor} {id} as class {plate_iri}") - - -def translate_spreadsheet_individuals( - plates: pd.DataFrame, g: Graph, verbose: bool = True -) -> None: - """ - - Parameters - ---------- - plates - g - verbose : bool - Print a message for each plate translated - - Returns - ------- - - """ - for _, x in plates.iterrows(): - id = x["Id"] - vendor = x["Vendor"] - vendor_iri = find_vendor(vendor, g) - if vendor_iri is None: - vendor_iri = add_vendor(vendor, g) - catalog_number = x["Catalog Number"] - plate_iri = rdflib.term.URIRef(STRATEOS_NS[quote(vendor + id)]) - ce = catalog_entry(vendor, catalog_number, g) - g.add((plate_iri, RDF.type, CONT_NS.Plate)) - g.add((plate_iri, CONT_NS.hasCatalogEntry, ce)) - g.add((plate_iri, CONT_NS.wellCount, Literal(int(x["Well Count"])))) - - cols = int(x["Column Count"]) - rows = int(x["Well Count"] / cols) - g.add((plate_iri, CONT_NS.columnCount, Literal(cols))) - g.add((plate_iri, CONT_NS.rowCount, Literal(rows))) - - g.add((plate_iri, RDFS.comment, Literal(vendor + " " + x["Name"]))) - g.add((plate_iri, RDFS.label, Literal(id))) - - g.add((plate_iri, CONT_NS.equipmentVendor, vendor_iri)) - - well_depth = make_well_depth(float(x["Well Depth (mm)"]), g) - g.add((plate_iri, CONT_NS.wellDepth, well_depth)) - - well_vol = make_well_volume(float(x["Well Volume (ul)"]), g) - g.add((plate_iri, CONT_NS.wellVolume, well_vol)) - - height = make_height(float(x["Height (mm)"]), g) - g.add((plate_iri, CONT_NS.height, height)) - - if verbose: - print(f"Added {vendor} {id} as {plate_iri}") - - -def translate_to_classes( - df: pd.DataFrame, URI: str, label: str, comment: Optional[str] = None -) -> Graph: - if not isinstance(URI, URIRef): - URI = URIRef(URI) - g = make_catalog_graph(URI, label, comment) - translate_spreadsheet_classes(df, g) - return g - - -def translate_to_individuals( - df: pd.DataFrame, URI: str, label: str, comment: Optional[str] = None -) -> Graph: - if not isinstance(URI, URIRef): - URI = URIRef(URI) - g = make_catalog_graph(URI, label, comment) - translate_spreadsheet_individuals(df, g) - return g - - -def main( - filename, - output_filename, - iri: str = CATALOG_IRI, - label="Strateos Plate Catalog", - comment: Optional[str] = None, - to_individuals: bool = True, -) -> str: - df: pd.DataFrame - path_ext: str - g: Graph - if not os.path.exists(filename): - raise FileNotFoundError(f"No such file {filename}") - _, path_ext = os.path.splitext(filename) - if path_ext == ".xlsx": - df = pd.read_excel(filename, engine="openpyxl") - elif path_ext == ".csv": - df = pd.read_csv(filename) - else: - raise ValueError( - f"Cannot open catalog spreadsheet file of type {path_ext}: {filename}" - ) - - df = df[df["Well Count"] > 1] - - if to_individuals: - g = translate_to_individuals(df, iri, label, comment) - else: - g = translate_to_classes(df, iri, label, comment) - - g.serialize(output_filename, format="turtle") - - return output_filename - - -if __name__ == "__main__": - # main(os.path.join(os.path.dirname(__file__), "../../owl/Strateos containers.xlsx"), - # os.path.join(os.path.dirname(__file__), "../../owl/strateos-catalog-individuals.ttl"), - # "urn:absolute:strateos-catalog") - main(os.path.join(os.path.dirname(__file__), "../../owl/Strateos containers.xlsx"), - os.path.join(os.path.dirname(__file__), "../../owl/strateos-catalog-classes.ttl"), - to_individuals=False, - label="Strateos Plate Catalog as OWL classes", - iri="urn:absolute:strateos-catalog") - # main() diff --git a/src/container_api/__init__.py b/src/container_api/__init__.py deleted file mode 100644 index c64ab59..0000000 --- a/src/container_api/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from .client_api import * \ No newline at end of file diff --git a/src/container_api/__main__.py b/src/container_api/__main__.py deleted file mode 100644 index 4c522fa..0000000 --- a/src/container_api/__main__.py +++ /dev/null @@ -1,52 +0,0 @@ -from rdflib import Namespace -import logging -import argparse - -from container_api import matching_containers, ContainerSpec, strateos_id - -parser = argparse.ArgumentParser("Example use of container_api library.") -parser.add_argument( - '--debug', - action='store_true', - help='print debug messages to stderr' -) -args = parser.parse_args() - -logger = logging.getLogger("container_api") -sub_logger = logging.getLogger("owlery_client.api_client") -# the following urllib settings don't seem to do anything at all. -request_logger = logging.getLogger("urllib3") - - -if args.debug: - sub_logger.setLevel(logging.DEBUG) - request_logger.setLevel(logging.DEBUG) - logger.setLevel(logging.DEBUG) - logging.basicConfig(level=logging.DEBUG) -else: - logging.basicConfig(level=logging.WARN) - -CONT_NS = Namespace("https://sift.net/container-ontology/container-ontology#") -OM_NS = Namespace("http://www.ontology-of-units-of-measure.org/resource/om-2/") -# should also have a not flat well bottom condition. -plate_spec = """cont:ClearPlate and - cont:SLAS-4-2004 and - (cont:wellVolume some - ((om:hasUnit value om:microlitre) and - (om:hasNumericalValue only xsd:decimal[>= "200"^^xsd:decimal]))) - and (cont:hasWellBottomShape only cont:NotFlatWellBottom)""" - -# Note that this is actually unnecessary: this is the default previx_map -prefix_map = {"cont": CONT_NS, "om": OM_NS} -insts = matching_containers(ContainerSpec(queryString=plate_spec, prefixMap=prefix_map)) -print("List of matching instances is:") -for inst in insts: - print("\t" + inst) - -print("Checking matching plates that are also available at Strateos.") -insts = matching_containers(ContainerSpec(queryString=plate_spec, - addl_conditions="(cont:availableAt value )")) - -print("List of matching instances AT STRATEOS is:") -for inst in insts: - print(f"\t{inst} short name: {strateos_id(inst)}") diff --git a/src/container_api/client_api.py b/src/container_api/client_api.py deleted file mode 100644 index 61babae..0000000 --- a/src/container_api/client_api.py +++ /dev/null @@ -1,153 +0,0 @@ -""" -This module contains an API that can be used to find containers that match a given -specification -- an OWL (anonymous) class definition in Manchester syntax -- by -consulting a server (implemented using Owlery). -""" - -__all__ = ["matching_containers", "strateos_id", "ContainerSpec"] - -import html -import logging -import re - -from json import dumps, loads -from rdflib import Namespace - -import owlery_client - -from os.path import basename -from typing import List, Optional, Dict - -from owlery_client.api import dl_queries_api - - -URL = str # typing alias - -logger = logging.getLogger("container_ontology.client_api") - -CONT_NS = Namespace("https://sift.net/container-ontology/container-ontology#") -OM_NS = Namespace("http://www.ontology-of-units-of-measure.org/resource/om-2/") - -DEFAULT_PREFIX_MAP = {"cont": CONT_NS, "om": OM_NS} - -class ContainerSpec: - queryString: str - _prefixMap: Dict[str, str] - addl_conditions: Optional[str] - - def __init__(self, queryString: str, prefixMap: Dict[str, str] = DEFAULT_PREFIX_MAP, addl_conditions: Optional[str] = None): - self.queryString = queryString - self._prefixMap = prefixMap - self.addl_conditions = addl_conditions - - @property - def prefixMap(self) -> str: - return dumps(self._prefixMap) - - - - -def matching_containers( - container_spec: ContainerSpec, - base_url="http://localhost:8080", - kb_name="sd2e-container-catalogs", -) -> List[URL]: - return _mc_helper( - container_spec=container_spec.queryString, - prefix_map=container_spec.prefixMap, - addl_conditions=container_spec.addl_conditions, - base_url=base_url, - kb_name=kb_name, - ) - - -PREFIX_SPLITTER = re.compile(".*#(.*)") -VENDOR_STRINGS = [ - html.escape(x).replace(" ", "%20") - for x in [ - "Fisher", - "ThermoFisher", - "Eppendorf", - "Costar", - "USA Scientific", - "Mesoscale", - "Chemspeed", - "E&K Scientific", - "Sumitomo Bakelite Co.", - "PerkinElmer", - "Labcyte", - "Greiner", - "Corning", - "Axygen", - "Tradewinds", - ] -] - -if hasattr(str, 'removeprefix'): - def remove_prefix(string: str, prefix: str) -> str: - return string.removeprefix(prefix) -else: - def remove_prefix(text, prefix): - if text.startswith(prefix): - return text[len(prefix):] - return text # or whatever - - - -def strateos_id(uri: str) -> str: - suffix = basename(uri) - vendor_and_id = re.match(PREFIX_SPLITTER, suffix).group(1) - x: str - for x in VENDOR_STRINGS: - trimmed = remove_prefix(vendor_and_id, x) - if trimmed != vendor_and_id: - return trimmed - raise ValueError(f"Unable to extract a strateos ID from {uri}") - - -def _mc_helper( - *, - container_spec, - prefix_map, - addl_conditions: Optional[str] = None, - base_url="http://localhost:8080", - kb_name="sd2e-container-catalogs", -) -> List[URL]: - configuration = owlery_client.Configuration(host=base_url) - instances: Optional[List[str]] = None - logger.debug("Query string is: %s", container_spec) - logger.debug("Prefix map string is: %s", prefix_map) - logger.debug("Prefix map is: %s", loads(prefix_map)) - if addl_conditions is not None: - logger.debug("Additional conditions are: %s", addl_conditions) - else: - logger.debug("No additional conditions.") - - with owlery_client.ApiClient(configuration) as api_client: - api_instance = dl_queries_api.DLQueriesApi(api_client) - kb = kb_name # str | label for a knowledgebase in this Owlery - object = container_spec - if addl_conditions is not None: - object += ( - " and " + addl_conditions - ) # str | Manchester-syntax OWL class expression - prefixes = prefix_map # str | JSON format prefix map (optional) - direct = False # bool | (optional) if omitted the server will use the default value of True - include_deprecated = True # bool | Include `owl:deprecated` terms in the result (optional) if omitted the server will use the default value of True - - try: - instances = api_instance.kbs_kb_instances_get( - kb, - object, - prefixes=prefixes, - direct=direct, - include_deprecated=include_deprecated, - ) - except owlery_client.ApiException as e: - logger.error( - "Exception when calling DLQueriesApi->kbs_kb_instances_get: %s\n" % e - ) - raise e - logger.debug("Instances are %s", instances) - logger.debug("Returning %s", instances["has_instance"]) - return instances["has_instance"] diff --git a/src/server-swagger.json b/src/server-swagger.json deleted file mode 100644 index 56fe57c..0000000 --- a/src/server-swagger.json +++ /dev/null @@ -1,755 +0,0 @@ -{ - "openapi" : "3.0.0", - "info" : { - "description" : "Owlery provides a web API for an [OWL API](http://owlapi.sourceforge.net)-based reasoner containing a configurable set of ontologies (a \"knowledgebase\"). ", - "version" : "1.0.0", - "title" : "Owlery API", - "contact" : { - "email" : "balhoff@renci.org" - }, - "license" : { - "name" : "MIT", - "url" : "https://opensource.org/licenses/MIT" - } - }, - "tags" : [ { - "name" : "Knowledgebases" - }, { - "name" : "DL queries" - }, { - "name" : "SPARQL" - } ], - "paths" : { - "/kbs" : { - "get" : { - "tags" : [ "Knowledgebases" ], - "summary" : "List available knowledgebases", - "description" : "List names of available knowledgebases in this instance of Owlery", - "responses" : { - "200" : { - "description" : "knowledgebase names", - "content" : { - "application/json" : { - "examples" : { - "response" : { - "value" : [ "phenoscape", "obo-ontologies", "monarch" ] - } - } - } - } - } - } - } - }, - "/kbs/{kb}" : { - "get" : { - "tags" : [ "Knowledgebases" ], - "summary" : "Knowledgebase", - "description" : "Display Knowledgebase information and status", - "parameters" : [ { - "name" : "kb", - "in" : "path", - "description" : "the knowledgebase name", - "required" : true, - "schema" : { - "type" : "string", - "example" : "uberon" - } - } ], - "responses" : { - "200" : { - "description" : "KB info", - "content" : { - "application/json" : { - "examples" : { - "response" : { - "value" : { - "label" : "uberon", - "isConsistent" : true, - "logicalAxiomsCount" : 43938 - } - } - } - } - } - } - } - } - }, - "/kbs/{kb}/subclasses" : { - "get" : { - "tags" : [ "DL queries" ], - "summary" : "Subclasses", - "description" : "Get subclasses of a named class or class expression", - "parameters" : [ { - "name" : "kb", - "in" : "path", - "description" : "label for a knowledgebase in this Owlery", - "required" : true, - "schema" : { - "type" : "string", - "example" : "uberon" - } - }, { - "name" : "object", - "in" : "query", - "description" : "Manchester-syntax OWL class expression", - "required" : true, - "schema" : { - "type" : "string" - }, - "examples" : { - "named" : { - "value" : "", - "summary" : "a named class with absolute IRI" - }, - "prefixed" : { - "value" : "obo:UBERON_02101", - "summary" : "a named class using a prefix definition" - }, - "expression" : { - "value" : "part_of: some obo:UBERON_0002101", - "summary" : "an anonymous expression, using prefix definitions" - } - } - }, { - "name" : "prefixes", - "in" : "query", - "description" : "JSON format prefix map, used to expand prefixes in the 'object' expression", - "required" : false, - "schema" : { - "type" : "string", - "format" : "JSON", - "example" : "{\"obo\": \"http://purl.obolibrary.org/obo/\", \"part_of\": \"http://purl.obolibrary.org/obo/BFO_0000050\"}" - } - }, { - "name" : "direct", - "in" : "query", - "required" : false, - "schema" : { - "type" : "boolean", - "default" : true - } - }, { - "name" : "includeEquivalent", - "in" : "query", - "description" : "Also query for equivalent classes", - "required" : false, - "schema" : { - "type" : "boolean", - "default" : false - } - }, { - "name" : "includeNothing", - "in" : "query", - "description" : "owl:Nothing is filtered by default because it is by definition a subclass of everything.", - "required" : false, - "schema" : { - "type" : "boolean", - "default" : false - } - }, { - "name" : "includeDeprecated", - "in" : "query", - "description" : "Include `owl:deprecated` terms in the result", - "required" : false, - "schema" : { - "type" : "boolean", - "default" : true - } - } ], - "responses" : { - "200" : { - "description" : "subclasses", - "content" : { - "application/json" : { - "examples" : { - "named class" : { - "value" : { - "@id" : "http://purl.obolibrary.org/obo/UBERON_0002101", - "superClassOf" : [ "http://purl.obolibrary.org/obo/UBERON_0002103", "http://purl.obolibrary.org/obo/XAO_0003027", "http://purl.obolibrary.org/obo/UBERON_0002102", "http://purl.obolibrary.org/obo/EMAPA_16405" ] - } - }, - "anonymous expression" : { - "value" : { - "@id" : "_:b0", - "value" : "ObjectSomeValuesFrom( )", - "superClassOf" : [ "http://purl.obolibrary.org/obo/UBERON_0002103", "http://purl.obolibrary.org/obo/XAO_0003027", "http://purl.obolibrary.org/obo/UBERON_0002102", "http://purl.obolibrary.org/obo/EMAPA_16405" ] - } - } - } - } - } - } - } - } - }, - "/kbs/{kb}/superclasses" : { - "get" : { - "tags" : [ "DL queries" ], - "summary" : "Superclasses", - "description" : "Get superclasses of a named class or class expression", - "parameters" : [ { - "name" : "kb", - "in" : "path", - "description" : "label for a knowledgebase in this Owlery", - "required" : true, - "schema" : { - "type" : "string", - "example" : "uberon" - } - }, { - "name" : "object", - "in" : "query", - "description" : "Manchester-syntax OWL class expression", - "required" : true, - "schema" : { - "type" : "string" - }, - "examples" : { - "named" : { - "value" : "", - "summary" : "a named class with absolute IRI" - }, - "prefixed" : { - "value" : "obo:UBERON_02101", - "summary" : "a named class using a prefix definition" - }, - "expression" : { - "value" : "part_of: some obo:UBERON_0002101", - "summary" : "an anonymous expression, using prefix definitions" - } - } - }, { - "name" : "prefixes", - "in" : "query", - "description" : "JSON format prefix map, used to expand prefixes in the 'object' expression", - "required" : false, - "schema" : { - "type" : "string", - "format" : "JSON", - "example" : "{\"obo\": \"http://purl.obolibrary.org/obo/\", \"part_of\": \"http://purl.obolibrary.org/obo/BFO_0000050\"}" - } - }, { - "name" : "direct", - "in" : "query", - "required" : false, - "schema" : { - "type" : "boolean", - "default" : true - } - }, { - "name" : "includeEquivalent", - "in" : "query", - "description" : "Also query for equivalent classes", - "required" : false, - "schema" : { - "type" : "boolean", - "default" : false - } - }, { - "name" : "includeThing", - "in" : "query", - "description" : "owl:Thing is filtered by default because it is by definition a superclass of everything.", - "required" : false, - "schema" : { - "type" : "boolean", - "default" : false - } - }, { - "name" : "includeDeprecated", - "in" : "query", - "description" : "Include `owl:deprecated` terms in the result", - "required" : false, - "schema" : { - "type" : "boolean", - "default" : true - } - } ], - "responses" : { - "200" : { - "description" : "superclasses", - "content" : { - "application/json" : { - "examples" : { - "named class" : { - "value" : { - "@id" : "http://purl.obolibrary.org/obo/UBERON_0002101", - "subClassOf" : [ "http://purl.obolibrary.org/obo/UBERON_0002103", "http://purl.obolibrary.org/obo/XAO_0003027", "http://purl.obolibrary.org/obo/UBERON_0002102", "http://purl.obolibrary.org/obo/EMAPA_16405" ] - } - }, - "anonymous expression" : { - "value" : { - "@id" : "_:b0", - "value" : "ObjectSomeValuesFrom( )", - "subClassOf" : [ "http://purl.obolibrary.org/obo/UBERON_0002103", "http://purl.obolibrary.org/obo/XAO_0003027", "http://purl.obolibrary.org/obo/UBERON_0002102", "http://purl.obolibrary.org/obo/EMAPA_16405" ] - } - } - } - } - } - } - } - } - }, - "/kbs/{kb}/equivalent" : { - "get" : { - "tags" : [ "DL queries" ], - "summary" : "Equivalent classes", - "description" : "Get equivalent classes of a named class or class expression", - "parameters" : [ { - "name" : "kb", - "in" : "path", - "description" : "label for a knowledgebase in this Owlery", - "required" : true, - "schema" : { - "type" : "string", - "example" : "uberon" - } - }, { - "name" : "object", - "in" : "query", - "description" : "Manchester-syntax OWL class expression", - "required" : true, - "schema" : { - "type" : "string" - }, - "examples" : { - "named" : { - "value" : "", - "summary" : "a named class with absolute IRI" - }, - "prefixed" : { - "value" : "obo:UBERON_02101", - "summary" : "a named class using a prefix definition" - }, - "expression" : { - "value" : "part_of: some obo:UBERON_0002101", - "summary" : "an anonymous expression, using prefix definitions" - } - } - }, { - "name" : "prefixes", - "in" : "query", - "description" : "JSON format prefix map, used to expand prefixes in the 'object' expression", - "required" : false, - "schema" : { - "type" : "string", - "format" : "JSON", - "example" : "{\"obo\": \"http://purl.obolibrary.org/obo/\", \"part_of\": \"http://purl.obolibrary.org/obo/BFO_0000050\"}" - } - }, { - "name" : "direct", - "in" : "query", - "required" : false, - "schema" : { - "type" : "boolean", - "default" : true - } - }, { - "name" : "includeDeprecated", - "in" : "query", - "description" : "Include `owl:deprecated` terms in the result", - "required" : false, - "schema" : { - "type" : "boolean", - "default" : true - } - } ], - "responses" : { - "200" : { - "description" : "equivalent classes", - "content" : { - "application/json" : { - "examples" : { - "named class" : { - "value" : { - "@id" : "http://purl.obolibrary.org/obo/UBERON_0002101", - "equivalentClass" : [ "http://purl.obolibrary.org/obo/UBERON_0002103", "http://purl.obolibrary.org/obo/XAO_0003027", "http://purl.obolibrary.org/obo/UBERON_0002102", "http://purl.obolibrary.org/obo/EMAPA_16405" ] - } - }, - "anonymous expression" : { - "value" : { - "@id" : "_:b0", - "value" : "ObjectSomeValuesFrom( )", - "equivalentClass" : [ "http://purl.obolibrary.org/obo/UBERON_0002103", "http://purl.obolibrary.org/obo/XAO_0003027", "http://purl.obolibrary.org/obo/UBERON_0002102", "http://purl.obolibrary.org/obo/EMAPA_16405" ] - } - } - } - } - } - } - } - } - }, - "/kbs/{kb}/satisfiable" : { - "get" : { - "tags" : [ "DL queries" ], - "summary" : "Satisfiability", - "description" : "Returns whether the given named class or expression is satisfiable", - "parameters" : [ { - "name" : "kb", - "in" : "path", - "description" : "label for a knowledgebase in this Owlery", - "required" : true, - "schema" : { - "type" : "string", - "example" : "uberon" - } - }, { - "name" : "object", - "in" : "query", - "description" : "Manchester-syntax OWL class expression", - "required" : true, - "schema" : { - "type" : "string" - }, - "examples" : { - "named" : { - "value" : "", - "summary" : "a named class with absolute IRI" - }, - "prefixed" : { - "value" : "obo:UBERON_02101", - "summary" : "a named class using a prefix definition" - }, - "expression" : { - "value" : "part_of: some obo:UBERON_0002101", - "summary" : "an anonymous expression, using prefix definitions" - } - } - }, { - "name" : "prefixes", - "in" : "query", - "description" : "JSON format prefix map, used to expand prefixes in the 'object' expression", - "required" : false, - "schema" : { - "type" : "string", - "format" : "JSON", - "example" : "{\"obo\": \"http://purl.obolibrary.org/obo/\", \"part_of\": \"http://purl.obolibrary.org/obo/BFO_0000050\"}" - } - } ], - "responses" : { - "200" : { - "description" : "satisfiability", - "content" : { - "application/json" : { - "examples" : { - "named class" : { - "value" : { - "@id" : "http://purl.obolibrary.org/obo/UBERON_0002101", - "isSatisfiable" : true - } - }, - "anonymous expression" : { - "value" : { - "@id" : "_:b0", - "value" : "ObjectSomeValuesFrom( )", - "isSatisfiable" : true - } - } - } - } - } - } - } - } - }, - "/kbs/{kb}/instances" : { - "get" : { - "tags" : [ "DL queries" ], - "summary" : "Instances", - "description" : "Get instances of a named class or class expression", - "parameters" : [ { - "name" : "kb", - "in" : "path", - "description" : "label for a knowledgebase in this Owlery", - "required" : true, - "schema" : { - "type" : "string", - "example" : "uberon" - } - }, { - "name" : "object", - "in" : "query", - "description" : "Manchester-syntax OWL class expression", - "required" : true, - "schema" : { - "type" : "string" - } - }, { - "name" : "prefixes", - "in" : "query", - "description" : "JSON format prefix map", - "required" : false, - "schema" : { - "type" : "string", - "format" : "JSON" - } - }, { - "name" : "direct", - "in" : "query", - "required" : false, - "schema" : { - "type" : "boolean", - "default" : true - } - }, { - "name" : "includeDeprecated", - "in" : "query", - "description" : "Include `owl:deprecated` terms in the result", - "required" : false, - "schema" : { - "type" : "boolean", - "default" : true - } - } ], - "responses" : { - "200" : { - "description" : "instances", - "content" : { - "application/json" : { - "examples" : { - "named class" : { - "value" : { - "@id" : "http://purl.obolibrary.org/obo/UBERON_0002101", - "hasInstance" : [ "http://example.org/obo/UBERON_0002101#1", "http://example.org/obo/UBERON_0002101#2" ] - } - } - } - } - } - } - } - } - }, - "/kbs/{kb}/types" : { - "get" : { - "tags" : [ "DL queries" ], - "summary" : "Types", - "description" : "Get types of a named individual", - "parameters" : [ { - "name" : "kb", - "in" : "path", - "description" : "label for a knowledgebase in this Owlery", - "required" : true, - "schema" : { - "type" : "string" - } - }, { - "name" : "object", - "in" : "query", - "description" : "Individual IRI", - "required" : true, - "schema" : { - "type" : "string", - "example" : "" - } - }, { - "name" : "prefixes", - "in" : "query", - "description" : "JSON format prefix map", - "required" : false, - "schema" : { - "type" : "string", - "format" : "JSON" - } - }, { - "name" : "direct", - "in" : "query", - "required" : false, - "schema" : { - "type" : "boolean", - "default" : true - } - }, { - "name" : "includeThing", - "in" : "query", - "description" : "owl:Thing is filtered by default because it is by definition a type of everything.", - "required" : false, - "schema" : { - "type" : "boolean", - "default" : false - } - }, { - "name" : "includeDeprecated", - "in" : "query", - "description" : "Include `owl:deprecated` terms in the result", - "required" : false, - "schema" : { - "type" : "boolean", - "default" : true - } - } ], - "responses" : { - "200" : { - "description" : "types", - "content" : { - "application/json" : { - "schema" : { - "example" : { - "@id" : "http://example.org/person/1234", - "@type" : [ "http://www.w3.org/2002/07/owl#Thing" ] - } - } - } - } - } - } - } - }, - "/kbs/{kb}/sparql" : { - "get" : { - "tags" : [ "SPARQL" ], - "summary" : "Perform SPARQL query encoded in URL parameter", - "description" : "Perform SPARQL query using Owlet-style embedded class expression. This is not a complete SPARQL endpoint. It is for using Owlery as a federated query endpoint for a single Owlet triple pattern.", - "parameters" : [ { - "name" : "kb", - "in" : "path", - "description" : "label for a knowledgebase in this Owlery", - "required" : true, - "schema" : { - "type" : "string" - } - }, { - "name" : "query", - "in" : "query", - "description" : "SPARQL query", - "required" : true, - "schema" : { - "type" : "string" - } - } ], - "responses" : { - "200" : { - "description" : "SPARQL results", - "content" : { - "application/sparql-results+xml" : { } - } - } - } - }, - "post" : { - "tags" : [ "SPARQL" ], - "summary" : "Perform SPARQL query contained in request body", - "description" : "Perform SPARQL query using Owlet-style embedded class expression. This is not a complete SPARQL endpoint. It is for using Owlery as a federated query endpoint for a single Owlet triple pattern.", - "parameters" : [ { - "name" : "kb", - "in" : "path", - "description" : "label for a knowledgebase in this Owlery", - "required" : true, - "schema" : { - "type" : "string" - } - } ], - "requestBody" : { - "required" : true, - "content" : { - "application/sparql-query" : { - "schema" : { - "type" : "string", - "format" : "SPARQL query", - "example" : "SELECT ?x WHERE { ?x a \"blah\"}" - } - }, - "application/x-www-form-urlencoded" : { - "schema" : { - "type" : "object", - "properties" : { - "query" : { - "type" : "string", - "format" : "SPARQL query" - } - }, - "required" : [ "query" ] - } - } - } - }, - "responses" : { - "200" : { - "description" : "SPARQL results" - } - } - } - }, - "/kbs/{kb}/expand" : { - "get" : { - "tags" : [ "SPARQL" ], - "summary" : "Expand SPARQL query encoded in URL parameter", - "description" : "Expand a SPARQL query, transforming Owlet-style embedded class expressions into `FILTER`s", - "parameters" : [ { - "name" : "kb", - "in" : "path", - "description" : "label for a knowledgebase in this Owlery", - "required" : true, - "schema" : { - "type" : "string" - } - }, { - "name" : "query", - "in" : "query", - "description" : "SPARQL query", - "required" : true, - "schema" : { - "type" : "string" - } - } ], - "responses" : { - "200" : { - "description" : "Expanded SPARQL query", - "content" : { - "application/sparql-query" : { } - } - } - } - }, - "post" : { - "tags" : [ "SPARQL" ], - "summary" : "Expand SPARQL query contained in request body", - "description" : "Expand a SPARQL query, transforming Owlet-style embedded class expressions into `FILTER`s", - "parameters" : [ { - "name" : "kb", - "in" : "path", - "description" : "label for a knowledgebase in this Owlery", - "required" : true, - "schema" : { - "type" : "string" - } - } ], - "requestBody" : { - "required" : true, - "content" : { - "application/sparql-query" : { - "schema" : { - "type" : "string", - "format" : "SPARQL query", - "example" : "SELECT ?x WHERE { ?x a \"blah\"}" - } - }, - "application/x-www-form-urlencoded" : { - "schema" : { - "type" : "object", - "properties" : { - "query" : { - "type" : "string", - "format" : "SPARQL query" - } - }, - "required" : [ "query" ] - } - } - } - }, - "responses" : { - "200" : { - "description" : "SPARQL results" - } - } - } - } - }, - "components" : { - "schemas" : { } - } -} \ No newline at end of file diff --git a/src/server-swagger.yaml b/src/server-swagger.yaml deleted file mode 100644 index 625be30..0000000 --- a/src/server-swagger.yaml +++ /dev/null @@ -1,619 +0,0 @@ -openapi: 3.0.0 -info: - description: 'Owlery provides a web API for an [OWL API](http://owlapi.sourceforge.net)-based - reasoner containing a configurable set of ontologies (a "knowledgebase"). ' - version: 1.0.0 - title: Owlery API - contact: - email: balhoff@renci.org - license: - name: MIT - url: https://opensource.org/licenses/MIT -tags: - - name: Knowledgebases - - name: DL queries - - name: SPARQL -paths: - /kbs: - get: - tags: - - Knowledgebases - summary: List available knowledgebases - description: List names of available knowledgebases in this instance of Owlery - responses: - '200': - description: knowledgebase names - content: - application/json: - examples: - response: - value: - - phenoscape - - obo-ontologies - - monarch - /kbs/{kb}: - get: - tags: - - Knowledgebases - summary: Knowledgebase - description: Display Knowledgebase information and status - parameters: - - name: kb - in: path - description: the knowledgebase name - required: true - schema: - type: string - example: uberon - responses: - '200': - description: KB info - content: - application/json: - examples: - response: - value: - label: uberon - isConsistent: true - logicalAxiomsCount: 43938 - /kbs/{kb}/subclasses: - get: - tags: - - DL queries - summary: Subclasses - description: Get subclasses of a named class or class expression - parameters: - - name: kb - in: path - description: label for a knowledgebase in this Owlery - required: true - schema: - type: string - example: uberon - - name: object - in: query - description: Manchester-syntax OWL class expression - required: true - schema: - type: string - examples: - named: - value: - summary: a named class with absolute IRI - prefixed: - value: obo:UBERON_02101 - summary: a named class using a prefix definition - expression: - value: 'part_of: some obo:UBERON_0002101' - summary: an anonymous expression, using prefix definitions - - name: prefixes - in: query - description: JSON format prefix map, used to expand prefixes in the 'object' - expression - required: false - schema: - type: string - format: JSON - example: '{"obo": "http://purl.obolibrary.org/obo/", "part_of": "http://purl.obolibrary.org/obo/BFO_0000050"}' - - name: direct - in: query - required: false - schema: - type: boolean - default: true - - name: includeEquivalent - in: query - description: Also query for equivalent classes - required: false - schema: - type: boolean - default: false - - name: includeNothing - in: query - description: owl:Nothing is filtered by default because it is by definition - a subclass of everything. - required: false - schema: - type: boolean - default: false - - name: includeDeprecated - in: query - description: Include `owl:deprecated` terms in the result - required: false - schema: - type: boolean - default: true - responses: - '200': - description: subclasses - content: - application/json: - examples: - named class: - value: - '@id': http://purl.obolibrary.org/obo/UBERON_0002101 - superClassOf: - - http://purl.obolibrary.org/obo/UBERON_0002103 - - http://purl.obolibrary.org/obo/XAO_0003027 - - http://purl.obolibrary.org/obo/UBERON_0002102 - - http://purl.obolibrary.org/obo/EMAPA_16405 - anonymous expression: - value: - '@id': _:b0 - value: ObjectSomeValuesFrom( - ) - superClassOf: - - http://purl.obolibrary.org/obo/UBERON_0002103 - - http://purl.obolibrary.org/obo/XAO_0003027 - - http://purl.obolibrary.org/obo/UBERON_0002102 - - http://purl.obolibrary.org/obo/EMAPA_16405 - /kbs/{kb}/superclasses: - get: - tags: - - DL queries - summary: Superclasses - description: Get superclasses of a named class or class expression - parameters: - - name: kb - in: path - description: label for a knowledgebase in this Owlery - required: true - schema: - type: string - example: uberon - - name: object - in: query - description: Manchester-syntax OWL class expression - required: true - schema: - type: string - examples: - named: - value: - summary: a named class with absolute IRI - prefixed: - value: obo:UBERON_02101 - summary: a named class using a prefix definition - expression: - value: 'part_of: some obo:UBERON_0002101' - summary: an anonymous expression, using prefix definitions - - name: prefixes - in: query - description: JSON format prefix map, used to expand prefixes in the 'object' - expression - required: false - schema: - type: string - format: JSON - example: '{"obo": "http://purl.obolibrary.org/obo/", "part_of": "http://purl.obolibrary.org/obo/BFO_0000050"}' - - name: direct - in: query - required: false - schema: - type: boolean - default: true - - name: includeEquivalent - in: query - description: Also query for equivalent classes - required: false - schema: - type: boolean - default: false - - name: includeThing - in: query - description: owl:Thing is filtered by default because it is by definition - a superclass of everything. - required: false - schema: - type: boolean - default: false - - name: includeDeprecated - in: query - description: Include `owl:deprecated` terms in the result - required: false - schema: - type: boolean - default: true - responses: - '200': - description: superclasses - content: - application/json: - examples: - named class: - value: - '@id': http://purl.obolibrary.org/obo/UBERON_0002101 - subClassOf: - - http://purl.obolibrary.org/obo/UBERON_0002103 - - http://purl.obolibrary.org/obo/XAO_0003027 - - http://purl.obolibrary.org/obo/UBERON_0002102 - - http://purl.obolibrary.org/obo/EMAPA_16405 - anonymous expression: - value: - '@id': _:b0 - value: ObjectSomeValuesFrom( - ) - subClassOf: - - http://purl.obolibrary.org/obo/UBERON_0002103 - - http://purl.obolibrary.org/obo/XAO_0003027 - - http://purl.obolibrary.org/obo/UBERON_0002102 - - http://purl.obolibrary.org/obo/EMAPA_16405 - /kbs/{kb}/equivalent: - get: - tags: - - DL queries - summary: Equivalent classes - description: Get equivalent classes of a named class or class expression - parameters: - - name: kb - in: path - description: label for a knowledgebase in this Owlery - required: true - schema: - type: string - example: uberon - - name: object - in: query - description: Manchester-syntax OWL class expression - required: true - schema: - type: string - examples: - named: - value: - summary: a named class with absolute IRI - prefixed: - value: obo:UBERON_02101 - summary: a named class using a prefix definition - expression: - value: 'part_of: some obo:UBERON_0002101' - summary: an anonymous expression, using prefix definitions - - name: prefixes - in: query - description: JSON format prefix map, used to expand prefixes in the 'object' - expression - required: false - schema: - type: string - format: JSON - example: '{"obo": "http://purl.obolibrary.org/obo/", "part_of": "http://purl.obolibrary.org/obo/BFO_0000050"}' - - name: direct - in: query - required: false - schema: - type: boolean - default: true - - name: includeDeprecated - in: query - description: Include `owl:deprecated` terms in the result - required: false - schema: - type: boolean - default: true - responses: - '200': - description: equivalent classes - content: - application/json: - examples: - named class: - value: - '@id': http://purl.obolibrary.org/obo/UBERON_0002101 - equivalentClass: - - http://purl.obolibrary.org/obo/UBERON_0002103 - - http://purl.obolibrary.org/obo/XAO_0003027 - - http://purl.obolibrary.org/obo/UBERON_0002102 - - http://purl.obolibrary.org/obo/EMAPA_16405 - anonymous expression: - value: - '@id': _:b0 - value: ObjectSomeValuesFrom( - ) - equivalentClass: - - http://purl.obolibrary.org/obo/UBERON_0002103 - - http://purl.obolibrary.org/obo/XAO_0003027 - - http://purl.obolibrary.org/obo/UBERON_0002102 - - http://purl.obolibrary.org/obo/EMAPA_16405 - /kbs/{kb}/satisfiable: - get: - tags: - - DL queries - summary: Satisfiability - description: Returns whether the given named class or expression is satisfiable - parameters: - - name: kb - in: path - description: label for a knowledgebase in this Owlery - required: true - schema: - type: string - example: uberon - - name: object - in: query - description: Manchester-syntax OWL class expression - required: true - schema: - type: string - examples: - named: - value: - summary: a named class with absolute IRI - prefixed: - value: obo:UBERON_02101 - summary: a named class using a prefix definition - expression: - value: 'part_of: some obo:UBERON_0002101' - summary: an anonymous expression, using prefix definitions - - name: prefixes - in: query - description: JSON format prefix map, used to expand prefixes in the 'object' - expression - required: false - schema: - type: string - format: JSON - example: '{"obo": "http://purl.obolibrary.org/obo/", "part_of": "http://purl.obolibrary.org/obo/BFO_0000050"}' - responses: - '200': - description: satisfiability - content: - application/json: - examples: - named class: - value: - '@id': http://purl.obolibrary.org/obo/UBERON_0002101 - isSatisfiable: true - anonymous expression: - value: - '@id': _:b0 - value: ObjectSomeValuesFrom( - ) - isSatisfiable: true - /kbs/{kb}/instances: - get: - tags: - - DL queries - summary: Instances - description: Get instances of a named class or class expression - parameters: - - name: kb - in: path - description: label for a knowledgebase in this Owlery - required: true - schema: - type: string - example: uberon - - name: object - in: query - description: Manchester-syntax OWL class expression - required: true - schema: - type: string - - name: prefixes - in: query - description: JSON format prefix map - required: false - schema: - type: string - format: JSON - - name: direct - in: query - required: false - schema: - type: boolean - default: true - - name: includeDeprecated - in: query - description: Include `owl:deprecated` terms in the result - required: false - schema: - type: boolean - default: true - responses: - '200': - description: instances - content: - application/json: - schema: - type: object - required: - - hasInstance - - "@id" - properties: - "@id": - type: string - description: ID of class whose Individuals are returned. May be anonymous. - value: - type: string - description: "The query string, translated to functional syntax. Not present if ID is sufficient." - hasInstance: - description: list of instance IRIs. - type: array - items: - type: string - format: uri-template - examples: - named class: - value: - '@id': http://purl.obolibrary.org/obo/UBERON_0002101 - hasInstance: - - http://example.org/obo/UBERON_0002101#1 - - http://example.org/obo/UBERON_0002101#2 - /kbs/{kb}/types: - get: - tags: - - DL queries - summary: Types - description: Get types of a named individual - parameters: - - name: kb - in: path - description: label for a knowledgebase in this Owlery - required: true - schema: - type: string - - name: object - in: query - description: Individual IRI - required: true - schema: - type: string - example: - - name: prefixes - in: query - description: JSON format prefix map - required: false - schema: - type: string - format: JSON - - name: direct - in: query - required: false - schema: - type: boolean - default: true - - name: includeThing - in: query - description: owl:Thing is filtered by default because it is by definition - a type of everything. - required: false - schema: - type: boolean - default: false - - name: includeDeprecated - in: query - description: Include `owl:deprecated` terms in the result - required: false - schema: - type: boolean - default: true - responses: - '200': - description: types - content: - application/json: - schema: - example: - '@id': http://example.org/person/1234 - '@type': - - http://www.w3.org/2002/07/owl#Thing - /kbs/{kb}/sparql: - get: - tags: - - SPARQL - summary: Perform SPARQL query encoded in URL parameter - description: Perform SPARQL query using Owlet-style embedded class expression. - This is not a complete SPARQL endpoint. It is for using Owlery as a federated - query endpoint for a single Owlet triple pattern. - parameters: - - name: kb - in: path - description: label for a knowledgebase in this Owlery - required: true - schema: - type: string - - name: query - in: query - description: SPARQL query - required: true - schema: - type: string - responses: - '200': - description: SPARQL results - content: - application/sparql-results+xml: {} - post: - tags: - - SPARQL - summary: Perform SPARQL query contained in request body - description: Perform SPARQL query using Owlet-style embedded class expression. - This is not a complete SPARQL endpoint. It is for using Owlery as a federated - query endpoint for a single Owlet triple pattern. - parameters: - - name: kb - in: path - description: label for a knowledgebase in this Owlery - required: true - schema: - type: string - requestBody: - required: true - content: - application/sparql-query: - schema: - type: string - format: SPARQL query - example: SELECT ?x WHERE { ?x a "blah"} - application/x-www-form-urlencoded: - schema: - type: object - properties: - query: - type: string - format: SPARQL query - required: - - query - responses: - '200': - description: SPARQL results - /kbs/{kb}/expand: - get: - tags: - - SPARQL - summary: Expand SPARQL query encoded in URL parameter - description: Expand a SPARQL query, transforming Owlet-style embedded class - expressions into `FILTER`s - parameters: - - name: kb - in: path - description: label for a knowledgebase in this Owlery - required: true - schema: - type: string - - name: query - in: query - description: SPARQL query - required: true - schema: - type: string - responses: - '200': - description: Expanded SPARQL query - content: - application/sparql-query: {} - post: - tags: - - SPARQL - summary: Expand SPARQL query contained in request body - description: Expand a SPARQL query, transforming Owlet-style embedded class - expressions into `FILTER`s - parameters: - - name: kb - in: path - description: label for a knowledgebase in this Owlery - required: true - schema: - type: string - requestBody: - required: true - content: - application/sparql-query: - schema: - type: string - format: SPARQL query - example: SELECT ?x WHERE { ?x a "blah"} - application/x-www-form-urlencoded: - schema: - type: object - properties: - query: - type: string - format: SPARQL query - required: - - query - responses: - '200': - description: SPARQL results -components: - schemas: {} diff --git a/tasks.py b/tasks.py new file mode 100644 index 0000000..2000a92 --- /dev/null +++ b/tasks.py @@ -0,0 +1,472 @@ +""" +Tasks for maintaining the project. + +Execute 'invoke --list' for guidance on using Invoke +""" +import os +import sys +import platform +import shutil +import webbrowser +from pathlib import Path +from distutils.util import strtobool +import venv + +import pytest +from invoke import task, exceptions # type: ignore + +OS_PLATFORM = platform.system() +HOME_DIR = str(Path.home()) +ROOT_DIR = Path(__file__).parent +BIN_DIR = ROOT_DIR.joinpath("bin") +SETUP_FILE = ROOT_DIR.joinpath("setup.py") +TEST_DIR = ROOT_DIR.joinpath("tests") +SOURCE_DIR = ROOT_DIR.joinpath("labop_labware") +TOX_DIR = ROOT_DIR.joinpath(".tox") +JUNIT_XML_FILE = BIN_DIR.joinpath("report.xml") +COVERAGE_XML_FILE = BIN_DIR.joinpath("coverage.xml") +COVERAGE_HTML_DIR = BIN_DIR.joinpath("coverage_html") +COVERAGE_HTML_FILE = COVERAGE_HTML_DIR.joinpath("index.html") +DOCS_DIR = ROOT_DIR.joinpath("docs") +DOCS_SOURCE_DIR = DOCS_DIR.joinpath("source") +DOCS_BUILD_DIR = DOCS_DIR.joinpath("_build") +DOCS_INDEX = DOCS_BUILD_DIR.joinpath("index.html") +PYTHON_DIRS = [str(d) for d in [SOURCE_DIR, TEST_DIR]] +SAFETY_REQUIREMENTS_FILE = BIN_DIR.joinpath("safety_requirements.txt") +PYPI_URL = "https://pypi.python.org/api/pypi/pypi/simple" +PYTHON_VERSION = 3.9 +CI_PROJECT_NAME = "oso-labware" +CI_REGISTRY_IMAGE = "registry.gitlab.com/https://gitlab.com/opensourcelab/scientificdata/ontologies/openscienceontology/labware" +DOCKERFILE = "Dockerfile" +DOCKER_BUILD_PLATFORM = "--platform linux/amd64" +VENV_MODULE_NAME = "venv" + + + +def _delete_file(file): + """ + If the file exists, delete it + + :param file: The file to delete + """ + try: + file.unlink(missing_ok=True) + except TypeError: + # missing_ok argument added in 3.8 + try: + file.unlink() + except FileNotFoundError: + pass + + +def _run(_c, command): + """ + It runs a command + + :param _c: The context object that is passed to invoke tasks + :param command: The command to run + """ + return _c.run(command, pty=platform.system() != 'Windows') + + +def _get_registry_path_str(python_version): + """ + It takes a build tag and a Python version, and returns a string that is the path to the image in the registry + + :param python_version: The version of Python to use + :return: The registry path for the image. + """ + ci_commit_ref_name = os.popen("git symbolic-ref --short -q HEAD").read().strip() + build_tag = ci_commit_ref_name if ci_commit_ref_name else "latest" + image_name = f"{CI_PROJECT_NAME}:py{python_version}-{build_tag}" + registry_path = f"{CI_REGISTRY_IMAGE}/{image_name}" + return registry_path + + +@task(help={'check': "Checks if source is formatted without applying changes"}) +def format(_c, check=False): + """ + It runs the `black` and `isort` tools on the Python code in the `PYTHON_DIRS` directories + + :param _c: The context object that is passed to invoke tasks + :param check: If True, the code will be checked for formatting, but not changed, defaults to False (optional) + """ + python_dirs_string = " ".join(PYTHON_DIRS) + # Run black + black_options = "--check" if check else "" + _run(_c, f"black {black_options} {python_dirs_string}") + # Run isort + isort_options = "--check-only --diff" if check else "" + _run(_c, f"isort {isort_options} {python_dirs_string}") + + +@task +def lint_flake8(_c): + """ + It runs the flake8 linter on all Python files in the project + + :param _c: The context object that is passed to invoke tasks + """ + _run(_c, f"flake8 {' '.join(PYTHON_DIRS)}") + + +@task +def lint_mypy(_c): + """ + It runs mypy on all Python files in the project + + :param _c: The context object that is passed to invoke tasks + """ + _run(_c, "mypy {}".format(" ".join(PYTHON_DIRS))) + + +@task(lint_flake8, lint_mypy) +def lint(_): + """ + It runs all linting tools on all Python files in the project + """ + + +@task +def security_bandit(_c): + """ + It runs bandit security checks on the source directory + + :param _c: The command to run + """ + _run(_c, f"bandit -c pyproject.toml -r {SOURCE_DIR}") + + +@task +def security_safety(_c): + """ + It runs security checks on package dependencies + + :param _c: The context object that is passed to the task + """ + Path(BIN_DIR).mkdir(parents=True, exist_ok=True) + _run(_c, f"poetry export --dev --format=requirements.txt --without-hashes --output={SAFETY_REQUIREMENTS_FILE}") + _run(_c, f"safety check --file={SAFETY_REQUIREMENTS_FILE} --full-report") + + +@task(security_bandit, security_safety) +def security(_): + """ + It runs all security checks + """ + + +@task( + optional=["coverage"], + help={ + "coverage": 'Add coverage, ="html" for html output or ="xml" for xml output', + "junit": "Output a junit xml report", + }, +) +def test(_, coverage=None, junit=False): + """ + It runs the tests in the current directory + + :param _: The context object that is passed to invoke tasks + :param coverage: Generates coverage report, "html" for html output or "xml" for xml output (optional) + :param junit: If True, the test results will be written to a JUnit XML file, defaults to False (optional) + """ + pytest_args = ["-v"] + + if junit: + pytest_args.append(f"--junitxml={JUNIT_XML_FILE}") + + if coverage is not None: + pytest_args.append(f"--cov={SOURCE_DIR}") + + if coverage == "html": + pytest_args.append(f"--cov-report=html:{COVERAGE_HTML_DIR}") + elif coverage == "xml": + pytest_args.append(f"--cov-report=xml:{COVERAGE_XML_FILE}") + + pytest_args.append(str(TEST_DIR)) + return_code = pytest.main(pytest_args) + + if coverage == "html": + webbrowser.open(COVERAGE_HTML_FILE.as_uri()) + + if return_code: + raise exceptions.Exit("Tests failed", code=return_code) + + +@task +def clean_docs(_c): + """ + It takes a list of strings and returns a list of strings + + :param _c: The context object that is passed to invoke tasks + """ + _run(_c, f"rm -fr {DOCS_BUILD_DIR}") + _run(_c, f"rm -fr {DOCS_SOURCE_DIR}") + + +@task(pre=[clean_docs], help={"launch": "Launch documentation in the web browser"}) +def docs(_c, launch=True): + """ + It generates and opens the documentation for the project + + :param _c: The context object that is passed to invoke tasks + :param launch: If True, the docs will be opened in a browser. defaults to True (optional) + """ + # Generate autodoc stub files + _run(_c, f"sphinx-apidoc -e -P -o {DOCS_SOURCE_DIR} {SOURCE_DIR}") + # Generate docs + _run(_c, f"sphinx-build -b html {DOCS_DIR} {DOCS_BUILD_DIR}") + if launch: + webbrowser.open(DOCS_INDEX.as_uri()) + + +@task +def clean_build(_c): + """ + It cleans all the Python build and distribution artifacts + + :param _c: The context object that is passed to invoke tasks + """ + _run(_c, "rm -fr build/") + _run(_c, "rm -fr dist/") + _run(_c, "rm -fr .eggs/") + _run(_c, "find . -name '*.egg-info' -exec rm -fr {} +") + _run(_c, "find . -name '*.egg' -exec rm -f {} +") + + +@task +def clean_python(_c): + """ + It removes all the Python artifacts + + :param _c: The context object that is passed to invoke tasks + """ + _run(_c, "find . -name '*.pyc' -exec rm -f {} +") + _run(_c, "find . -name '*.pyo' -exec rm -f {} +") + _run(_c, "find . -name '*~' -exec rm -f {} +") + _run(_c, "find . -name '__pycache__' -exec rm -fr {} +") + + +@task +def clean_tests(_): + """ + It deletes all the test artifacts + + :param _: The context object that is passed to invoke tasks + """ + _delete_file(JUNIT_XML_FILE) + _delete_file(COVERAGE_XML_FILE) + shutil.rmtree(COVERAGE_HTML_DIR, ignore_errors=True) + shutil.rmtree(BIN_DIR, ignore_errors=True) + shutil.rmtree(TOX_DIR, ignore_errors=True) + + +@task(pre=[clean_build, clean_python, clean_tests, clean_docs]) +def clean(_): + """ + It runs all clean sub-tasks + + :param _: The context object that is passed to invoke tasks + """ + pass + + +@task( + pre=[clean_python], + optional=["python_version"], + help={ + "python_version": 'Python version to use, e.g. "3.9"', + }, +) +def docker_build(_c, python_version=PYTHON_VERSION, target="test"): + """ + It builds a Docker image with the given tag using the given Python version + + :param _c: The context object that is passed to invoke tasks + :param python_version: The base python version to use + :param target: The target to build ("test", "regression"), defaults to "test" (optional) + """ + build_args = f"--build-arg PYTHON_BASE={python_version} --build-arg PYPI_URL={PYPI_URL}" + registry_path = _get_registry_path_str(python_version) + cache = f"--cache-from {registry_path}" + target_tag = f"--target {target}" + _run( + _c, + f"docker build {build_args} {DOCKER_BUILD_PLATFORM} {cache} -f {DOCKERFILE} -t {registry_path} {target_tag} .", + ) + + +@task +def docker_pull(_c, python_version=PYTHON_VERSION): + """ + It pulls the image from the local registry, or if it doesn't exist, it prints a message + + :param _c: The context object that is passed to invoke tasks + :param python_version: The base python version to use + """ + registry_path = _get_registry_path_str(python_version) + _run(_c, f'docker pull {registry_path} || echo "No pre-made image available"') + + +@task +def docker_push(_c, python_version=PYTHON_VERSION): + """ + It pushes the image to the registry + + :param _c: The context object that is passed to invoke tasks + :param python_version: The base python version to use + """ + registry_path = _get_registry_path_str(python_version) + _run(_c, f"docker push {registry_path}") + + +@task +def docker_test(_c, python_version=PYTHON_VERSION): + """ + It runs the tests in a docker container + + :param _c: The context object that is passed to invoke tasks + :param python_version: The base python version to use + :param target: The target to test ("test", "regression"), defaults to "test" (optional) + """ + volume_mount = ( + f"--volume {BIN_DIR}:/labop_labware/bin/ --volume {ROOT_DIR}:/labop_labware:rw" + ) + registry_path = _get_registry_path_str(python_version) + pytest_arg = f"pytest -v --cov-report xml:/labop_labware/bin/coverage.xml {TEST_DIR}" + Path(BIN_DIR).mkdir(parents=True, exist_ok=True) + _run(_c, f"docker run {DOCKER_BUILD_PLATFORM} {volume_mount} {registry_path} {pytest_arg}") + + +@task +def docker_shell(_c, python_version=PYTHON_VERSION): + """ + It opens shell in the docker container + + :param _c: The context object that is passed to invoke tasks + :param python_version: The base python version to use + """ + volume_mount = ( + f"--volume {BIN_DIR}:/labop_labware/bin/ --volume {ROOT_DIR}:/labop_labware:rw" + ) + registry_path = _get_registry_path_str(python_version) + bash_path = "/bin/bash" + _run(_c, f"docker run -it {DOCKER_BUILD_PLATFORM} {volume_mount} {registry_path} {bash_path}") + + +@task +def init_repo(_c): + """Initialise the repository with git-LFS and git flow + + :param _c: The context object that is passed to invoke tasks + :type _c: context object + """ + # check, if it is already a git repo + # otherwise run git init + _run(_c, "git-lfs install") + _run(_c, "git flow init") + +@task(pre=[clean]) +def release_twine( + _c, + tag_name, + pypi_user, + pypi_pass, + pypi_publish_repository="https://artifactory.aws.gel.ac/artifactory/api/pypi/pypi_genomics_dev", + pip_repository_index="https://artifactory.aws.gel.ac/artifactory/api/pypi/pypi/simple", +): + """ + It makes a release of the Python package and publishes to the GEL PyPI Artifactory using setup.py and twine + + :param _c: The context object that is passed to invoke tasks + :param tag_name: The name of the tag that triggered the workflow + :param pypi_user: The username of the account that has access to the repository + :param pypi_pass: The password for the pypi user + :param pypi_publish_repository: The URL of the repository to publish to (optional) + :param pip_repository_index: The URL of the pip repository to use for installing twine (optional) + """ + version_str = tag_name.replace("v", "") + _run(_c, f'echo "Build tag - {version_str}."') + _run(_c, f"echo {version_str} > VERSION") + pypirc_str = ( + "[distutils]\n" + "index-servers = gel_pypi\n" + "\n" + "[gel_pypi]\n" + f"repository: {pypi_publish_repository}\n" + f"username: {pypi_user}\n" + f"password: {pypi_pass}\n)" + ) + _run(_c, f'printf "{pypirc_str}" > ~/.pypirc') + _run(_c, f"pip install -i {pip_repository_index} twine") + _run(_c, 'mkdir -p dist && rm -rf dist/* || echo "Nothing found in dist/"; python setup.py sdist;') + _run(_c, f'twine upload --repository-url {pypi_publish_repository} -u "{pypi_user}" -p "{pypi_pass}" dist/*') + + +@task +def generate_reqs(_c): + """ + It generates requirements.txt and requirements_dev.txt using poetry (dependencies from pyproject.toml). + + :param _c: The context object that is passed to invoke tasks + """ + _run(_c, f"poetry export --without dev --without-hashes -f requirements.txt -o {ROOT_DIR}/requirements.txt") + _run(_c, f"poetry export --only dev --without-hashes -f requirements.txt -o {ROOT_DIR}/requirements_dev.txt") +# --------------- installation helper functions, please do not modify ----------------------------- + +def query_yes_no(question, default_answer="yes", help=""): + """Ask user at stdin a yes or no question + + :param question: question text to user + :param default_answer: should be "yes" or "no" + :param help: help text string + :return: :type: bool + """ + if default_answer == "yes": + prompt_txt = "{question} [Y/n] ".format(question=question) + elif default_answer == "no": # explicit no + prompt_txt = "{question} [y/N] ".format(question=question) + else: + raise ValueError("default_answer must be 'yes' or 'no'!") + + while True: + try: + answer = input(prompt_txt) + if answer: + if answer == "?": + print(help) + continue + else: + return strtobool(answer) + else: + return strtobool(default_answer) + except ValueError: + sys.stderr.write("Please respond with 'yes' or 'no' " + "(or 'y' or 'n').\n") + except KeyboardInterrupt: + sys.stderr.write("Query interrupted by user, exiting now ...") + exit(0) + + +def query(question, default_answer="", help=""): + """Ask user a question + + :param question: question text to user + :param default_answer: any default answering text string + :param help: help text string + :return: stripped answer string + """ + prompt_txt = "{question} [{default_answer}] ".format(question=question, default_answer=default_answer) + + while True: + answer = input(prompt_txt).strip() + + if answer: + if answer == "?": + print(help) + continue + else: + return answer + else: + return default_answer \ No newline at end of file diff --git a/test/test_server.py b/test/test_server.py deleted file mode 100644 index 98d7050..0000000 --- a/test/test_server.py +++ /dev/null @@ -1,141 +0,0 @@ -import docker -import os -import glob -import requests -from requests import HTTPError -import json -import time -import sys -import pytest -import tempfile -import subprocess -from typing import Dict - -OWL_DIR = os.path.abspath(os.path.join(os.path.dirname(__file__), '../owl')) - - -def test_server_start(reg=None, tag='latest', log_file="/logs/composition.log"): - - print("REG: " + str(reg)) - print("TAG: " + str(tag)) - - client = docker.from_env() - if reg is not None: - container_string = f"{reg}/rpgoldman/owlery:{tag}" - else: - container_string = f"rpgoldman/owlery:{tag}" - print(f"Trying to start {container_string}") - - try: - image = client.images.get(container_string) - except docker.errors.ImageNotFound: - image = client.images.pull(container_string) - assert isinstance(image, docker.models.images.Image) - - docker_env: Dict[str, str] = { - "JAVA_OPTS": '-Dorg.slf4j.simpleLogger.defaultLogLevel=DEBUG -Dlogback.configurationFile=/srv/conf/logback.xml', - } - - #logdir = '/tmp/owlery-logs' - #os.makedirs(logdir, exist_ok=True) - # $(makeFileDir)/server-files:/srv/owl -v $(makeFileDir)owlery-conf:/srv/conf rpgoldman/owlery:latest - server_volumes = {os.path.join(OWL_DIR, 'server-files'): {'bind': '/srv/owl', 'mode': 'rw'}, - os.path.join(OWL_DIR, 'owlery-conf'): {'bind': '/srv/conf', 'mode': 'rw'}, - } - - print(f"Docker environment is: {docker_env}; mounting map is {server_volumes}") - - container = client.containers.run( - container_string, - detach=True, - remove=True, - # privileged=True, - ports={8080: 8080}, - environment=docker_env, - volumes=server_volumes - ) - assert isinstance(container, docker.models.containers.Container) - print(f"Started container {container}") - - try: - success = False - for i in range(30): - try: - kb_list = requests.get( - "http://localhost:8080/kbs" - ) - # version_response = requests.get( - # "http://localhost:8080/api/v3/version" - # ) - assert kb_list.status_code == 200, "Unexpected response from server: status = %d"%kb_list.status_code - success = True - break - except requests.exceptions.ConnectionError: - print("Request timed out...trying again") - time.sleep(5) - - assert success, "Timed out after 30 attempts to test the status and version endpoints against our container." - assert kb_list.json() == ['sd2e-container-catalogs'] - print("Successful test!!!") - #assert status_response.status_code == 200, f"Testing status endpoint, got HTTP status code {status_response.status_code} with message {status_response.text}" - #assert version_response.status_code == 200, f"Testing version endpoint, got HTTP status code {version_response.status_code} with message {version_response.text}" - #assert s.validate_schema(status_response.json(), "Status") - #assert s.validate_schema(version_response.json(), "Version") - - #assert len(examples) == 1, f"Expected one example input. Got {len(examples)}" - # for example in examples: - # with open(example, "r") as file: - # TEST_INPUT = json.load(file) - # - # query_string = {"max_responses": 56} - # - # success = False - # - # for i in range(30): - # try: - # orch_response = requests.post( - # "http://localhost:8080/api/v3/compositions", - # data=json.dumps(TEST_INPUT), - # params=query_string, - # headers={"Content-Type": "application/json"}, - # ) - # success = True - # break - # except requests.exceptions.ConnectionError: - # if i <= 23: - # print("Request timed out...trying again") - # else: - # print("Giving up") - # time.sleep(5) - # - # assert success, "Timed out after 30 attempts to run the test against our container." - # - # assert orch_response.status_code == 200, f"Processing {os.path.basename(example)}, got status code {orch_response.status_code} with message {orch_response.text}" - # - # assert s.validate_schema(orch_response.json(), "Plan") - # print("COMPOSITION\n") - # print (orch_response.json()['workflow']) - - # if (test_exec): - # # [mpelican:20201022.1548CDT] DEPRECATED: detects syntax errors, but not much more. - # # Try to exec first composition. - # #print(f"attempting exec of {orch_response.json()[0]['python']}") - # #exec(orch_response.json()[0]['python']) - - # # write to file - # plan_file = tempfile.NamedTemporaryFile(prefix='logxplan', suffix='.py') - # plan_file.write(orch_response.json()[0]['python'].encode()) - # plan_file.flush() - # subprocess.run(['python', plan_file.name], check=True) - - finally: - try: - container.stop() - except HTTPError: - pass - except docker.errors.APIError: - pass - - -if __name__ == '__main__': - test_server_start() \ No newline at end of file diff --git a/tests/__init__.py b/tests/__init__.py new file mode 100644 index 0000000..3fee328 --- /dev/null +++ b/tests/__init__.py @@ -0,0 +1 @@ +"""Unit test package for labop_labware.""" diff --git a/tests/test_oso_labware.py b/tests/test_oso_labware.py new file mode 100644 index 0000000..bd03e60 --- /dev/null +++ b/tests/test_oso_labware.py @@ -0,0 +1,23 @@ +#!/usr/bin/env python +"""Tests for `labop_labware` package.""" +# pylint: disable=redefined-outer-name +from labop_labware import __version__ + +from labop_labware.labware import labop_Labware + +def test_version(): + """Sample pytest test function.""" + assert __version__ == "0.0.1" + +def test_labop_labware(): + """ testing OSOMeasurement + """ + + olw = labop_Labware() + + olw.define_ontology() + + assert olw.osolw.NumWells.iri == 'http://www.oso.org/oso/labware#NumWells' + + + From 7e01b86033ca61c3ea36b7eed2602940b9836095 Mon Sep 17 00:00:00 2001 From: mark doerr Date: Thu, 12 Jan 2023 20:29:47 +0100 Subject: [PATCH 02/11] feat: ontology extended; variable names fixed --- .gitignore | 3 + labop_labware/{labware.py => labware_tbox.py} | 0 notebooks/labop_labware-v0.0.1.ttl | 945 +++++++++++++++++ notebooks/labop_labware_base-v0.0.1.ttl | 973 ++++++++++++++++++ notebooks/labop_labware_dev.ipynb | 157 +-- notebooks/{ => old}/Add Labels.ipynb | 0 notebooks/{ => old}/Strateos Catalog.ipynb | 0 ...t_oso_labware.py => test_labop_labware.py} | 8 +- 8 files changed, 2012 insertions(+), 74 deletions(-) rename labop_labware/{labware.py => labware_tbox.py} (100%) create mode 100644 notebooks/labop_labware-v0.0.1.ttl create mode 100644 notebooks/labop_labware_base-v0.0.1.ttl rename notebooks/{ => old}/Add Labels.ipynb (100%) rename notebooks/{ => old}/Strateos Catalog.ipynb (100%) rename tests/{test_oso_labware.py => test_labop_labware.py} (62%) diff --git a/.gitignore b/.gitignore index 1af71fa..ca52816 100644 --- a/.gitignore +++ b/.gitignore @@ -124,3 +124,6 @@ ENV/ # Generated files bin/ .build_* + +# owlready +catalog-*.xml \ No newline at end of file diff --git a/labop_labware/labware.py b/labop_labware/labware_tbox.py similarity index 100% rename from labop_labware/labware.py rename to labop_labware/labware_tbox.py diff --git a/notebooks/labop_labware-v0.0.1.ttl b/notebooks/labop_labware-v0.0.1.ttl new file mode 100644 index 0000000..be635f4 --- /dev/null +++ b/notebooks/labop_labware-v0.0.1.ttl @@ -0,0 +1,945 @@ +@prefix : . +@prefix core: . +@prefix emmo: . +@prefix owl: . +@prefix rdfs: . +@prefix term: . +@prefix xsd: . + + a owl:Ontology ; + emmo:EMMO_5525a055_dda5_4556_8b91_f0d22fa676cc "https://creativecommons.org/licenses/by/4.0/legalcode"@en ; + term:abstract "An EMMO-based domain ontology for scientific labware.olw-measurement is released under the Creative Commons Attribution 4.0 International license (CC BY 4.0)."@en ; + term:contributor "university greifswald"@en ; + term:creator "mark doerr"@en ; + term:publisher ""@en ; + term:title "LabOP-Labware"@en ; + rdfs:comment """Contacts: +mark doerr +University Greifswald +email: mark.doerr@suni-greifswald.de + +"""@en, + "The EMMO requires FaCT++ reasoner plugin in order to visualize allinferences and class hierarchy (ctrl+R hotkey in Protege)."@en, + "This ontology is generated with data from the ASE Python package."@en ; + owl:imports ; + owl:versionIRI ; + owl:versionInfo "0.0.1"@en . + +:labop_00f39163-c56a-5be3-bbed-0c097a32db19 a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 8.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 12 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "Corning"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "14.22"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 340.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 96 ; + core:prefLabel "96-flat-uv"@en . + +:labop_09d28426-e773-545d-b6e1-24bd583adffb a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 16.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 24 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "Eppendorf"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "10.6"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 40.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 384 ; + core:prefLabel "384-pcr"@en . + +:labop_0a01364b-3379-5120-8c42-2944c8d8c04c a owl:DatatypeProperty, + owl:FunctionalProperty ; + emmo:EMMO_967080e5_2f42_4eb2_a3a9_c58143e835f9 "3D model of Well shape"@en ; + rdfs:domain :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019 ; + rdfs:range xsd:string ; + core:prefLabel "hasShapeModel3D"@en . + +:labop_0ff72e72-b1d3-5873-921e-0fa3fe9bcdbb a owl:DatatypeProperty, + owl:FunctionalProperty ; + emmo:EMMO_967080e5_2f42_4eb2_a3a9_c58143e835f9 "Labware radius of a round shape in XY direction "@en ; + rdfs:domain :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019 ; + rdfs:range xsd:decimal ; + core:prefLabel "hasRadiusZ"@en . + +:labop_11cfc4b9-39e2-5f4d-a7b2-041afdbec557 a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 16.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 24 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "Corning"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "14.2"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 80.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 384 ; + core:prefLabel "384-flat-clear-clear"@en . + +:labop_1518b48e-991c-50bb-8acb-77325d4b5816 a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 16.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 24 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "Corning"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "14.22"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 90.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 384 ; + core:prefLabel "384-flat"@en . + +:labop_1a433174-abf9-5631-bb75-f14fceb01589 a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 1.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 1 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "USA Scientific"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "-"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 1650.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 1 ; + core:prefLabel "micro-1.5"@en . + +:labop_1adffef1-a592-521f-a885-76cf01b90784 a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 8.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 12 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "Eppendorf"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "14.4"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 340.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 96 ; + core:prefLabel "96-flat-clear-clear-tc"@en . + +:labop_24e3aff3-ddf9-5d3f-954e-0a6b63a82795 a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 1.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 1 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "unknown"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "33.73"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 2000.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 1 ; + core:prefLabel "hplc-vial"@en . + +:labop_28c451e5-6a8e-5f58-a51c-b6e956057f20 a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 1.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 1 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "not_applicable"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "-"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 500000.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 1 ; + core:prefLabel "bottle-500"@en . + +:labop_29816674-967e-5c23-8092-d79768a82bbc a owl:DatatypeProperty, + owl:FunctionalProperty ; + emmo:EMMO_967080e5_2f42_4eb2_a3a9_c58143e835f9 "Labware color in RGB hex encoding"@en ; + rdfs:domain :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019 ; + rdfs:range xsd:string ; + core:prefLabel "hasColor"@en . + +:labop_2a3bd32d-0305-5d54-9d57-5116daf80fe1 a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 8.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 12 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "ThermoFisher"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "14.6"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 320.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 96 ; + core:prefLabel "96-flat-white-dc"@en . + +:labop_2c7d4900-6f1a-52c8-9d84-c00c7d05473f a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 1.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 1 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "E&K Scientific"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "-"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 2200.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 1 ; + core:prefLabel "micro-2.0"@en . + +:labop_2d7bae90-2718-5b84-b148-8d934ce83ed2 a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 1.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 1 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "Chemspeed"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "32"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 9000.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 1 ; + core:prefLabel "chemspeed-sealed-pin"@en . + +:labop_2e31d9b7-b1b4-5069-8645-a79ca2349a5a a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 1.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 1 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "Greiner"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "-"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 15000.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 1 ; + core:prefLabel "conical-15"@en . + +:labop_2e527ee2-3f34-5eb4-8320-952b69fdbc71 a owl:DatatypeProperty, + owl:FunctionalProperty ; + emmo:EMMO_967080e5_2f42_4eb2_a3a9_c58143e835f9 "\"Well-to-well distance in column direction"@en ; + rdfs:domain :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019 ; + rdfs:range xsd:decimal ; + core:prefLabel "hasWellDistCol"@en . + +:labop_2eb7b549-48c8-515a-925e-f3edbc8db960 a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 8.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 12 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "Fisher"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "14.5"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 200.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 96 ; + core:prefLabel "96-v-kf"@en . + +:labop_2f57b082-2346-56b0-93f3-5c0c00deea14 a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 16.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 24 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "Corning"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "14.22"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 80.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 384 ; + core:prefLabel "384-flat-white-white-tc"@en . + +:labop_304b569e-f9b7-596d-ae46-c19221f92328 a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 16.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 24 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "Corning"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "12.19"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 40.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 384 ; + core:prefLabel "384-flat-white-white-lv"@en . + +:labop_3298b5c8-a934-5349-ab1f-e54ec86b73b2 a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 16.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 24 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "Sumitomo Bakelite Co."^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "14.4"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 100.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 384 ; + core:prefLabel "384-ubottom-white-tc"@en . + +:labop_34ef6b32-1ae5-5219-bc6a-f4bd4bd2aedc a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 1.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 1 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "Tradewinds"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "63"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 25900.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 1 ; + core:prefLabel "d1-vial"@en . + +:labop_360645fc-419c-54b2-ad91-3488723c86d9 a owl:DatatypeProperty, + owl:FunctionalProperty ; + emmo:EMMO_967080e5_2f42_4eb2_a3a9_c58143e835f9 "Number of Rows of Labware"@en ; + rdfs:domain :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019 ; + rdfs:range xsd:integer ; + core:prefLabel "hasNumRows"@en . + +:labop_36c27902-e7c5-5f95-ba87-ccfd79716d4a a owl:DatatypeProperty, + owl:FunctionalProperty ; + emmo:EMMO_967080e5_2f42_4eb2_a3a9_c58143e835f9 "Radius of a round bottom in xy plane / direction."@en ; + rdfs:domain :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019 ; + rdfs:range xsd:decimal ; + core:prefLabel "hasBottomRadiusXY"@en . + +:labop_382fb7b0-64ee-5015-907f-aea0914cef09 a owl:DatatypeProperty, + owl:FunctionalProperty ; + emmo:EMMO_967080e5_2f42_4eb2_a3a9_c58143e835f9 "container is sealable"@en ; + rdfs:domain :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019 ; + rdfs:range xsd:boolean ; + core:prefLabel "isSealable"@en . + +:labop_39f56071-bd5f-5b53-b47c-fedfac21b9a8 a owl:DatatypeProperty, + owl:FunctionalProperty ; + emmo:EMMO_967080e5_2f42_4eb2_a3a9_c58143e835f9 "Labware product Type"@en ; + rdfs:domain :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019 ; + rdfs:range xsd:string ; + core:prefLabel "isProductType"@en . + +:labop_3a3dec58-9669-5c5e-b74e-be29637b2943 a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 1.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 1 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "unknown"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "83.5"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 5000.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 1 ; + core:prefLabel "mrv-medium"@en . + +:labop_3d0faaa4-36a6-5246-9c5b-ee56e10c5ba8 a owl:DatatypeProperty, + owl:FunctionalProperty ; + emmo:EMMO_967080e5_2f42_4eb2_a3a9_c58143e835f9 "Manufacturer Product Number of the Labware"@en ; + rdfs:domain :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019 ; + rdfs:range xsd:string ; + core:prefLabel "hasProductNumber"@en . + +:labop_44329015-214d-545c-b99d-cb66173b623d a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 1.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 1 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "Axygen"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "43.92"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 280000.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 1 ; + core:prefLabel "res-sw96-hp"@en . + +:labop_45a65e84-0cd1-5d59-9f17-b86024348dda a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 8.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 12 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "Mesoscale"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "14.35"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 410.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 96 ; + core:prefLabel "96-10-spot-vplex-m-pro-inflamm1-MSD"@en . + +:labop_4606e99e-76aa-5cbc-bbe7-2f1222be31d7 a owl:DatatypeProperty, + owl:FunctionalProperty ; + emmo:EMMO_967080e5_2f42_4eb2_a3a9_c58143e835f9 "Labware stacking height without any additions, like lids."@en ; + rdfs:domain :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019 ; + rdfs:range xsd:decimal ; + core:prefLabel "hasHightStacked"@en . + +:labop_49c9af30-5a5e-5c0a-b5e4-586b9dcb9131 a owl:DatatypeProperty, + owl:FunctionalProperty ; + emmo:EMMO_967080e5_2f42_4eb2_a3a9_c58143e835f9 "Opening angle of cone in deg."@en ; + rdfs:domain :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019 ; + rdfs:range xsd:decimal ; + core:prefLabel "hasConeAngle"@en . + +:labop_4adfeae2-33c8-5050-9634-a9b1e767a0b2 a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 8.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 12 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "Corning"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "14.6"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 320.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 96 ; + core:prefLabel "96-ubottom-clear-tc"@en . + +:labop_4b24eaf1-ccaf-5aaa-a347-ebab531e7e79 a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 16.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 24 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "PerkinElmer"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "14.35"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 28.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 384 ; + core:prefLabel "384-flat-white-white-proxiplate-plus"@en . + +:labop_4d2cf79a-18a2-5a15-bdda-7789d84f7292 a owl:DatatypeProperty, + owl:FunctionalProperty ; + emmo:EMMO_967080e5_2f42_4eb2_a3a9_c58143e835f9 "Labware stacking height with additions, like lids."@en ; + rdfs:domain :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019 ; + rdfs:range xsd:decimal ; + core:prefLabel "hasHightStackedLidded"@en . + +:labop_4e018a96-9b39-5c78-8a86-5da8d6d5417a a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 8.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 12 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "Costar"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "14.22"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 360.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 96 ; + core:prefLabel "96-flat-clear-costar-3590"@en . + +:labop_50185da6-ef4e-52ed-8cc0-b507b505e467 a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 8.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 1 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "Axygen"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "43.8"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 32000.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 8 ; + core:prefLabel "res-mw8-hp"@en . + +:labop_51e9c6ee-065c-5edc-8f7e-f0adabdbfb28 a owl:DatatypeProperty, + owl:FunctionalProperty ; + emmo:EMMO_967080e5_2f42_4eb2_a3a9_c58143e835f9 "Well radius of a round well at the top opening in x-y plane."@en ; + rdfs:domain :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019 ; + rdfs:range xsd:decimal ; + core:prefLabel "hasTopRadiusXY"@en . + +:labop_545b98a5-1a84-5b75-9e0c-f75f7a11f04e a owl:DatatypeProperty, + owl:FunctionalProperty ; + emmo:EMMO_967080e5_2f42_4eb2_a3a9_c58143e835f9 "Well total well depth=hight"@en ; + rdfs:domain :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019 ; + rdfs:range xsd:decimal ; + core:prefLabel "hasDepthWell"@en . + +:labop_5888cd5c-7ba4-531e-a919-a149e499071b a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 1.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 12 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "Axygen"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "44.04"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 21000.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 12 ; + core:prefLabel "res-mw12-hp"@en . + +:labop_58dcb413-f46e-56f5-be1b-3617cc6ffe30 a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 16.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 24 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "Corning"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "14.35"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 80.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 384 ; + core:prefLabel "384-flat-white-white-nbs"@en . + +:labop_63cb2947-6e8c-5aff-abc4-380f474ea3ca a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 1.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 1 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "Greiner"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "-"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 2200.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 1 ; + core:prefLabel "tube-15"@en . + +:labop_650b9839-f274-5e87-8aaf-4c809233f3df a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 16.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 24 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "Labcyte"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "14.4"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 135.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 384 ; + core:prefLabel "384-echo"@en . + +:labop_6566af27-0790-5221-adcd-96cf059d1416 a owl:DatatypeProperty, + owl:FunctionalProperty ; + emmo:EMMO_967080e5_2f42_4eb2_a3a9_c58143e835f9 "Number of Columns of muti-well labware"@en ; + rdfs:domain :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019 ; + rdfs:range xsd:integer ; + core:prefLabel "hasNumCols"@en . + +:labop_6b22776a-3224-5812-bf71-83d9ce23ae38 a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 16.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 24 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "PerkinElmer"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "14.4"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 105.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 384 ; + core:prefLabel "384-flat-white-white-optiplate"@en . + +:labop_6ceaee21-25b7-57b4-8eb5-8b9edfb4749d a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 8.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 12 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "Corning"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "3.25"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 200.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 96 ; + core:prefLabel "96-well-v-bottom"@en . + +:labop_702945ce-3530-51e0-95b9-eed9503d5790 a owl:DatatypeProperty, + owl:FunctionalProperty ; + emmo:EMMO_967080e5_2f42_4eb2_a3a9_c58143e835f9 "Labware model number"@en ; + rdfs:domain :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019 ; + rdfs:range xsd:string ; + core:prefLabel "hasModelNumber"@en . + +:labop_70543c1d-a01f-52c1-aac7-d0b38091f6e1 a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 16.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 24 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "Corning"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "14.22"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 70.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 384 ; + core:prefLabel "384-round-clear-clear"@en . + +:labop_71b68d12-f079-5318-bbc9-5c1282825a54 a owl:DatatypeProperty, + owl:FunctionalProperty ; + emmo:EMMO_967080e5_2f42_4eb2_a3a9_c58143e835f9 "wWll-to-well distance in row direction"@en ; + rdfs:domain :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019 ; + rdfs:range xsd:decimal ; + core:prefLabel "hasWellDistRow"@en . + +:labop_71c0a9dc-d2b7-5245-8821-009fcd7a4778 a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 1.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 1 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "not_applicable"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "-"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 25000.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 1 ; + core:prefLabel "flask-25"@en . + +:labop_77fde989-da83-5225-b780-be36f3944fd9 a owl:DatatypeProperty, + owl:FunctionalProperty ; + emmo:EMMO_967080e5_2f42_4eb2_a3a9_c58143e835f9 "Radius of a round bottom in z (hight) direction."@en ; + rdfs:domain :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019 ; + rdfs:range xsd:decimal ; + core:prefLabel "hasBottomRadiusZ"@en . + +:labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 a owl:DatatypeProperty, + owl:FunctionalProperty ; + emmo:EMMO_967080e5_2f42_4eb2_a3a9_c58143e835f9 "Name of the Manufacturer "@en ; + rdfs:domain :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019 ; + rdfs:range xsd:string ; + core:prefLabel "hasManifacturer"@en . + +:labop_7f399301-aeb4-5273-abdb-d0a4334ac141 a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 32.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 48 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "Greiner"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "10.4"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 10.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 1536 ; + core:prefLabel "1536-white-tc"@en . + +:labop_7fa8aea2-613f-5c20-9320-07f43f7ec7b2 a owl:DatatypeProperty, + owl:FunctionalProperty ; + emmo:EMMO_967080e5_2f42_4eb2_a3a9_c58143e835f9 "Generalized shape polygon for more complex well shapes, in z direction = rotation axis."@en ; + rdfs:domain :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019 ; + rdfs:range xsd:string ; + core:prefLabel "hasShapePolygonZ"@en . + +:labop_82608f92-af4a-5917-8969-3d9c30958440 a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 8.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 12 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "Fisher"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "44"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 1000.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 96 ; + core:prefLabel "96-deep-kf"@en . + +:labop_845af61e-12ab-5432-8de0-dec754b6dec2 a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 1.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 1 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "not_applicable"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "-"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 250000.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 1 ; + core:prefLabel "bottle-250"@en . + +:labop_8904e3dc-de7a-54ea-a607-8a554ccb044d a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 1.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 1 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "unknown"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "14.7"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 400.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 1 ; + core:prefLabel "single-vbottom-microwell"@en . + +:labop_898678fe-fd38-5e62-9da0-df970662ee06 a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 1.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 1 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "Fisher"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "17.3"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 90000.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 1 ; + core:prefLabel "1-flat"@en . + +:labop_8b3c1ae0-7735-5dc0-ab3b-28145ab29c19 a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 8.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 12 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "Chemspeed"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "36"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 9000.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 96 ; + core:prefLabel "chemspeed-96-sealed-pin-rack"@en . + +:labop_8c26202c-ad47-5791-b734-addbf9ffa924 a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 4.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 6 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "E&K Scientific"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "44.04"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 10000.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 24 ; + core:prefLabel "24-deep"@en . + +:labop_90e743d1-69e7-5230-a9a3-31502bdde25f a owl:DatatypeProperty, + owl:FunctionalProperty ; + emmo:EMMO_967080e5_2f42_4eb2_a3a9_c58143e835f9 "Labware total hight, without any additions, like lids etc. "@en ; + rdfs:domain :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019 ; + rdfs:range xsd:decimal ; + core:prefLabel "hasHeight"@en . + +:labop_914371a5-137f-5fea-868a-cd8e217c9b66 a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 1.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 1 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "not_applicable"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "-"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 999999999.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 1 ; + core:prefLabel "vendor-tube"@en . + +:labop_92b00d80-39b5-596c-844e-1bf02461a9ce a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 16.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 24 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "Greiner"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "14.4"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 120.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 384 ; + core:prefLabel "384-v-clear-clear"@en . + +:labop_99819c07-7dd6-54e8-9618-9d69f5599afe a owl:DatatypeProperty, + owl:FunctionalProperty ; + emmo:EMMO_967080e5_2f42_4eb2_a3a9_c58143e835f9 "Labware total width, "@en ; + rdfs:domain :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019 ; + rdfs:range xsd:decimal ; + core:prefLabel "hasWidth"@en . + +:labop_9b0659c3-0cb6-5c08-99ee-e0155eab2539 a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 8.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 12 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "Corning"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "43.8"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 2000.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 96 ; + core:prefLabel "96-deep"@en . + +:labop_9da87440-6661-5e35-b235-4a88eecdd071 a owl:DatatypeProperty, + owl:FunctionalProperty ; + emmo:EMMO_967080e5_2f42_4eb2_a3a9_c58143e835f9 "Total Labware volume "@en ; + rdfs:domain :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019 ; + rdfs:range xsd:decimal ; + core:prefLabel "hasVolume"@en . + +:labop_9e93f04c-527b-5415-b284-61ba4f0a9f8c a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 8.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 12 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "Corning"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "14.22"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 340.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 96 ; + core:prefLabel "96-flat"@en . + +:labop_a62c3197-4c2a-5cb3-89d7-46590914bbc2 a owl:DatatypeProperty, + owl:FunctionalProperty ; + emmo:EMMO_967080e5_2f42_4eb2_a3a9_c58143e835f9 "Well, bottom shape, flat, round, conical-"@en ; + rdfs:domain :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019 ; + rdfs:range xsd:string ; + core:prefLabel "hasShapeWellBottom"@en . + +:labop_abcdfdfc-83a9-56cc-9b73-2a6cfa0e09be a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 1.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 1 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "USA Scientific"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "-"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 500.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 1 ; + core:prefLabel "pcr-0.5"@en . + +:labop_b3693b79-61fe-51a9-a1f3-ac3382abd5a9 a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 1.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 1 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "unknown"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "83"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 20000.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 1 ; + core:prefLabel "mrv-large"@en . + +:labop_b441bf24-6f7f-5295-83bf-33338e579fce a owl:DatatypeProperty ; + emmo:EMMO_967080e5_2f42_4eb2_a3a9_c58143e835f9 "Polymer, properties, like solvent tolerance, transparency, ...."@en ; + rdfs:domain :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019 ; + rdfs:range xsd:string ; + core:prefLabel "hasMaterial"@en . + +:labop_b552f1b1-cae6-5075-aa2e-084e9dacf91f a owl:DatatypeProperty, + owl:FunctionalProperty ; + emmo:EMMO_967080e5_2f42_4eb2_a3a9_c58143e835f9 "container is liddable"@en ; + rdfs:domain :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019 ; + rdfs:range xsd:boolean ; + core:prefLabel "isLiddable"@en . + +:labop_b98e8a2a-37c2-5754-82c1-7752fd8c2d19 a owl:DatatypeProperty, + owl:FunctionalProperty ; + emmo:EMMO_967080e5_2f42_4eb2_a3a9_c58143e835f9 "Labware radius of a round shape in XY direction "@en ; + rdfs:domain :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019 ; + rdfs:range xsd:decimal ; + core:prefLabel "hasRadiusXY"@en . + +:labop_b9e52c8a-8030-5d79-941e-6bbf8baee86e a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 16.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 24 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "PerkinElmer"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "14.35"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 28.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 384 ; + core:prefLabel "384-flat-black-black-proxiplate-plus-f"@en . + +:labop_c29c7399-f254-5730-90a9-17fb19e8aee6 a owl:DatatypeProperty, + owl:FunctionalProperty ; + emmo:EMMO_967080e5_2f42_4eb2_a3a9_c58143e835f9 "Total Labware volume "@en ; + rdfs:domain :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019 ; + rdfs:range xsd:decimal ; + core:prefLabel "hasWellVolume"@en . + +:labop_c4151f73-e6f3-57fd-a738-8532f995d693 a owl:DatatypeProperty, + owl:FunctionalProperty ; + emmo:EMMO_967080e5_2f42_4eb2_a3a9_c58143e835f9 "Well overall / top well shape,e.g. round, square, buffeled,..."@en ; + rdfs:domain :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019 ; + rdfs:range xsd:string ; + core:prefLabel "hasShapeWell"@en . + +:labop_cfb6b47e-215a-5fad-b1cc-6ab314812564 a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 2.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 3 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "Eppendorf"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "19"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 5000.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 6 ; + core:prefLabel "6-flat-tc"@en . + +:labop_d002400e-1ded-5748-8ecf-18483d1fc572 a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 16.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 24 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "Corning"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "14.22"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 90.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 384 ; + core:prefLabel "384-flat-white-clear"@en . + +:labop_d25c7d4b-e740-509d-b09e-de9b8f400876 a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 16.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 24 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "Corning"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "14.22"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 35.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 384 ; + core:prefLabel "384-round-black-black-lv-nbs"@en . + +:labop_d399020b-5067-5c72-bf40-e8ad160d49b6 a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 2.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 3 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "Eppendorf"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "19"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 5000.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 6 ; + core:prefLabel "6-flat"@en . + +:labop_d6391933-31c9-5bdd-b995-d8faae9a7059 a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 1.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 1 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "Tradewinds"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "42"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 3500.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 1 ; + core:prefLabel "a1-vial"@en . + +:labop_dc7d3c33-0983-56d6-bac0-505baa4e9b8d a owl:DatatypeProperty, + owl:FunctionalProperty ; + emmo:EMMO_967080e5_2f42_4eb2_a3a9_c58143e835f9 "Generalized shape polygon for more complex well shapes, in xy plane / direction."@en ; + rdfs:domain :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019 ; + rdfs:range xsd:decimal ; + core:prefLabel "hasShapePolygonXY"@en . + +:labop_dd5fe552-568f-57bd-b228-4aa74cce58b3 a owl:DatatypeProperty, + owl:FunctionalProperty ; + emmo:EMMO_967080e5_2f42_4eb2_a3a9_c58143e835f9 "Depth of cone from beginning of conical shape."@en ; + rdfs:domain :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019 ; + rdfs:range xsd:decimal ; + core:prefLabel "hasConeDepth"@en . + +:labop_de813e60-4405-5749-9e27-d237789d9ce2 a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 1.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 1 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "unknown"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "95.3"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 40000.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 1 ; + core:prefLabel "d2-vial"@en . + +:labop_df850393-1724-55f6-a0a6-7241eb8011c6 a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 192 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 16 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 384 ; + core:prefLabel "Greiner_384_V"@en . + +:labop_df936d31-b5f6-5fbc-a9f5-3d8a2a8bd057 a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 16.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 24 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "ThermoFisher"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "14.4"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 120.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 384 ; + core:prefLabel "384-ubottom-clear-polypropylene-nunc-264573"@en . + +:labop_e4685444-e906-5e3b-81eb-4ce078367a95 a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 1.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 1 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "Greiner"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "-"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 50000.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 1 ; + core:prefLabel "conical-50"@en . + +:labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 a owl:DatatypeProperty, + owl:FunctionalProperty ; + emmo:EMMO_967080e5_2f42_4eb2_a3a9_c58143e835f9 "Number of Wells of muti-well labware"@en ; + rdfs:domain :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019 ; + rdfs:range xsd:integer ; + core:prefLabel "hasNumWells"@en . + +:labop_e7a25cc5-6ae8-5bbc-a723-27a426ffb38c a owl:DatatypeProperty, + owl:FunctionalProperty ; + emmo:EMMO_967080e5_2f42_4eb2_a3a9_c58143e835f9 "Labware total hight, with additions, like lids etc."@en ; + rdfs:domain :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019 ; + rdfs:range xsd:decimal ; + core:prefLabel "hasHigthLidded"@en . + +:labop_e889a659-217c-5df9-8a5a-70debd34bc10 a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 1.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 1 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "not_applicable"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "-"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 250000.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 1 ; + core:prefLabel "flask-250"@en . + +:labop_eb11a326-7155-52ac-8cd0-ccef5e57a36c a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 8.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 12 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "Fisher"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "14.7"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 400.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 96 ; + core:prefLabel "96-vbottom-microwell"@en . + +:labop_ec1118d9-fdfd-5f05-9cc0-0f63b9055052 a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 16.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 24 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "Labcyte"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "10.48"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 14.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 384 ; + core:prefLabel "384-echo-ldv"@en . + +:labop_ee4213b2-cd8b-50c1-8732-88504c4bd47a a owl:DatatypeProperty, + owl:FunctionalProperty ; + emmo:EMMO_967080e5_2f42_4eb2_a3a9_c58143e835f9 "2D model of Well shape"@en ; + rdfs:domain :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019 ; + rdfs:range xsd:string ; + core:prefLabel "hasShapeModel2D"@en . + +:labop_eecd6011-cedb-585d-aaba-ff59a0c283c8 a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 8.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 12 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "Greiner"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "14.22"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 340.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 96 ; + core:prefLabel "96-flat-black-black-fluotrac-600"@en . + +:labop_f4ac6699-90bc-5ba0-b681-d9fc94a8dd51 a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 32.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 48 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "Corning"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "10.4"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 12.5 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 1536 ; + core:prefLabel "1536-tc-white-corning-3727"@en . + +:labop_f62753e9-65fc-5e4e-978c-012af5393189 a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 1.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 1 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "unknown"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "117.2"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 600.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 1 ; + core:prefLabel "nmr-tube-5mm"@en . + +:labop_f85a8b2a-df61-54c9-a9f2-39207fcd1df4 a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 8.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 12 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "Mesoscale"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "14.35"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 410.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 96 ; + core:prefLabel "96-10-spot-uplex-MSD"@en . + +:labop_f9b62170-e705-5576-97a3-3864710e5bdc a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 1.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 1 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "Axygen"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "19.05"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 92000.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 1 ; + core:prefLabel "res-sw384-lp"@en . + +:labop_f9c37ff6-a248-50c1-aeda-81ce43ca1edd a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 8.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 12 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "Eppendorf"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "15.9"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 160.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 96 ; + core:prefLabel "96-pcr"@en . + +:labop_fc5afaee-dc3c-50c3-a325-248a2e5cda8e a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 8.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 12 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "Mesoscale"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "14.35"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 410.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 96 ; + core:prefLabel "96-4-spot-mMIP3a-MSD"@en . + +:labop_fc87b9df-96da-5084-bdf2-99fe2cf61083 a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 1.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 1 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "unknown"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "83.35"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 2000.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 1 ; + core:prefLabel "mrv-small"@en . + +:labop_fe483b78-bc24-5d98-8f04-13a62a56ae99 a owl:DatatypeProperty, + owl:FunctionalProperty ; + emmo:EMMO_967080e5_2f42_4eb2_a3a9_c58143e835f9 "Mass of the Labware "@en ; + rdfs:domain :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019 ; + rdfs:range xsd:decimal ; + core:prefLabel "hasMass"@en . + +:labop_70ca96fb-1da5-580f-aa9c-73499f6f0228 a owl:ObjectProperty ; + emmo:EMMO_967080e5_2f42_4eb2_a3a9_c58143e835f9 "Associates a property to a type (string, number...)."@en ; + rdfs:subPropertyOf emmo:EMMO_eb3518bf_f799_4f9e_8c3e_ce59af11453b ; + owl:inverseOf :labop_fa27cacb-a570-5c40-be2c-ac7bd2087feb ; + core:prefLabel "isTypeOf"@en . + +:labop_fa27cacb-a570-5c40-be2c-ac7bd2087feb a owl:ObjectProperty ; + emmo:EMMO_967080e5_2f42_4eb2_a3a9_c58143e835f9 "Associates a type (string, number...) to a property."@en ; + rdfs:subPropertyOf emmo:EMMO_eb3518bf_f799_4f9e_8c3e_ce59af11453b ; + owl:inverseOf :labop_70ca96fb-1da5-580f-aa9c-73499f6f0228 ; + core:prefLabel "hasType"@en . + +:labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019 a owl:Class ; + emmo:EMMO_967080e5_2f42_4eb2_a3a9_c58143e835f9 "Labware is a utility device that all experiments are done with and which is not actively measuring. Examples: a container, a pipette tip, a reactor, ... "@en ; + rdfs:subClassOf emmo:EMMO_494b372c_cfdf_47d3_a4de_5e037c540de8 ; + core:prefLabel "Labware"@en . + diff --git a/notebooks/labop_labware_base-v0.0.1.ttl b/notebooks/labop_labware_base-v0.0.1.ttl new file mode 100644 index 0000000..cf4a3c7 --- /dev/null +++ b/notebooks/labop_labware_base-v0.0.1.ttl @@ -0,0 +1,973 @@ +@prefix : . +@prefix core: . +@prefix emmo: . +@prefix owl: . +@prefix rdfs: . +@prefix term: . +@prefix xsd: . + + a owl:Ontology ; + emmo:EMMO_5525a055_dda5_4556_8b91_f0d22fa676cc "https://creativecommons.org/licenses/by/4.0/legalcode"@en ; + term:abstract "An EMMO-based domain ontology forscientific labware.olw-measurement is released under the Creative Commons Attribution 4.0 International license (CC BY 4.0)."@en ; + term:contributor "university greifswald"@en ; + term:creator "mark doerr"@en ; + term:publisher ""@en ; + term:title "LabOP-Labware"@en ; + rdfs:comment """Contacts: +mark doerr +University Greifswald +email: mark.doerr@suni-greifswald.de + +"""@en, + "The EMMO requires FaCT++ reasoner plugin in order to visualize allinferences and class hierarchy (ctrl+R hotkey in Protege)."@en, + "This ontology is generated with data from the ASE Python package."@en ; + owl:imports ; + owl:versionIRI ; + owl:versionInfo "0.0.1"@en . + +:labop_00f39163-c56a-5be3-bbed-0c097a32db19 a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 8.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 12 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "Corning"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "14.22"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 340.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 96 ; + core:prefLabel "96-flat-uv"@en . + +:labop_09d28426-e773-545d-b6e1-24bd583adffb a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 16.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 24 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "Eppendorf"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "10.6"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 40.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 384 ; + core:prefLabel "384-pcr"@en . + +:labop_0a01364b-3379-5120-8c42-2944c8d8c04c a owl:DatatypeProperty, + owl:FunctionalProperty ; + emmo:EMMO_967080e5_2f42_4eb2_a3a9_c58143e835f9 "3D model of Well shape"@en ; + rdfs:domain :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019 ; + rdfs:range xsd:string ; + core:prefLabel "hasShapeModel3D"@en . + +:labop_0ff72e72-b1d3-5873-921e-0fa3fe9bcdbb a owl:DatatypeProperty, + owl:FunctionalProperty ; + emmo:EMMO_967080e5_2f42_4eb2_a3a9_c58143e835f9 "Labware radius of a round shape in XY direction "@en ; + rdfs:domain :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019 ; + rdfs:range xsd:decimal ; + core:prefLabel "hasRadiusZ"@en . + +:labop_11cfc4b9-39e2-5f4d-a7b2-041afdbec557 a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 16.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 24 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "Corning"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "14.2"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 80.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 384 ; + core:prefLabel "384-flat-clear-clear"@en . + +:labop_1518b48e-991c-50bb-8acb-77325d4b5816 a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 16.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 24 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "Corning"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "14.22"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 90.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 384 ; + core:prefLabel "384-flat"@en . + +:labop_1a433174-abf9-5631-bb75-f14fceb01589 a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 1.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 1 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "USA Scientific"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "-"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 1650.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 1 ; + core:prefLabel "micro-1.5"@en . + +:labop_1adffef1-a592-521f-a885-76cf01b90784 a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 8.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 12 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "Eppendorf"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "14.4"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 340.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 96 ; + core:prefLabel "96-flat-clear-clear-tc"@en . + +:labop_24908c61-0564-5961-a09c-a01feb0a6639 a owl:DatatypeProperty, + owl:FunctionalProperty ; + emmo:EMMO_967080e5_2f42_4eb2_a3a9_c58143e835f9 "Labware coating material"@en ; + rdfs:domain :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019 ; + rdfs:range xsd:string ; + core:prefLabel "hasCoatingMaterial"@en . + +:labop_24e3aff3-ddf9-5d3f-954e-0a6b63a82795 a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 1.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 1 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "unknown"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "33.73"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 2000.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 1 ; + core:prefLabel "hplc-vial"@en . + +:labop_28c451e5-6a8e-5f58-a51c-b6e956057f20 a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 1.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 1 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "not_applicable"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "-"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 500000.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 1 ; + core:prefLabel "bottle-500"@en . + +:labop_29816674-967e-5c23-8092-d79768a82bbc a owl:DatatypeProperty, + owl:FunctionalProperty ; + emmo:EMMO_967080e5_2f42_4eb2_a3a9_c58143e835f9 "Labware color in RGB hex encoding"@en ; + rdfs:domain :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019 ; + rdfs:range xsd:string ; + core:prefLabel "hasColor"@en . + +:labop_2a3bd32d-0305-5d54-9d57-5116daf80fe1 a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 8.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 12 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "ThermoFisher"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "14.6"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 320.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 96 ; + core:prefLabel "96-flat-white-dc"@en . + +:labop_2c7d4900-6f1a-52c8-9d84-c00c7d05473f a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 1.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 1 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "E&K Scientific"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "-"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 2200.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 1 ; + core:prefLabel "micro-2.0"@en . + +:labop_2d7bae90-2718-5b84-b148-8d934ce83ed2 a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 1.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 1 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "Chemspeed"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "32"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 9000.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 1 ; + core:prefLabel "chemspeed-sealed-pin"@en . + +:labop_2e31d9b7-b1b4-5069-8645-a79ca2349a5a a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 1.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 1 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "Greiner"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "-"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 15000.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 1 ; + core:prefLabel "conical-15"@en . + +:labop_2e527ee2-3f34-5eb4-8320-952b69fdbc71 a owl:DatatypeProperty, + owl:FunctionalProperty ; + emmo:EMMO_967080e5_2f42_4eb2_a3a9_c58143e835f9 "\"Well-to-well distance in column direction"@en ; + rdfs:domain :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019 ; + rdfs:range xsd:decimal ; + core:prefLabel "hasWellDistCol"@en . + +:labop_2eb7b549-48c8-515a-925e-f3edbc8db960 a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 8.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 12 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "Fisher"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "14.5"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 200.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 96 ; + core:prefLabel "96-v-kf"@en . + +:labop_2f57b082-2346-56b0-93f3-5c0c00deea14 a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 16.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 24 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "Corning"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "14.22"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 80.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 384 ; + core:prefLabel "384-flat-white-white-tc"@en . + +:labop_304b569e-f9b7-596d-ae46-c19221f92328 a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 16.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 24 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "Corning"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "12.19"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 40.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 384 ; + core:prefLabel "384-flat-white-white-lv"@en . + +:labop_3298b5c8-a934-5349-ab1f-e54ec86b73b2 a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 16.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 24 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "Sumitomo Bakelite Co."^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "14.4"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 100.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 384 ; + core:prefLabel "384-ubottom-white-tc"@en . + +:labop_34ef6b32-1ae5-5219-bc6a-f4bd4bd2aedc a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 1.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 1 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "Tradewinds"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "63"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 25900.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 1 ; + core:prefLabel "d1-vial"@en . + +:labop_360645fc-419c-54b2-ad91-3488723c86d9 a owl:DatatypeProperty, + owl:FunctionalProperty ; + emmo:EMMO_967080e5_2f42_4eb2_a3a9_c58143e835f9 "Number of Rows of Labware"@en ; + rdfs:domain :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019 ; + rdfs:range xsd:integer ; + core:prefLabel "hasNumRows"@en . + +:labop_36c27902-e7c5-5f95-ba87-ccfd79716d4a a owl:DatatypeProperty, + owl:FunctionalProperty ; + emmo:EMMO_967080e5_2f42_4eb2_a3a9_c58143e835f9 "Radius of a round bottom in xy plane / direction."@en ; + rdfs:domain :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019 ; + rdfs:range xsd:decimal ; + core:prefLabel "hasBottomRadiusXY"@en . + +:labop_382fb7b0-64ee-5015-907f-aea0914cef09 a owl:DatatypeProperty, + owl:FunctionalProperty ; + emmo:EMMO_967080e5_2f42_4eb2_a3a9_c58143e835f9 "container is sealable"@en ; + rdfs:domain :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019 ; + rdfs:range xsd:boolean ; + core:prefLabel "isSealable"@en . + +:labop_39f56071-bd5f-5b53-b47c-fedfac21b9a8 a owl:DatatypeProperty, + owl:FunctionalProperty ; + emmo:EMMO_967080e5_2f42_4eb2_a3a9_c58143e835f9 "Labware product Type"@en ; + rdfs:domain :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019 ; + rdfs:range xsd:string ; + core:prefLabel "isProductType"@en . + +:labop_3a3dec58-9669-5c5e-b74e-be29637b2943 a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 1.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 1 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "unknown"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "83.5"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 5000.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 1 ; + core:prefLabel "mrv-medium"@en . + +:labop_3d0faaa4-36a6-5246-9c5b-ee56e10c5ba8 a owl:DatatypeProperty, + owl:FunctionalProperty ; + emmo:EMMO_967080e5_2f42_4eb2_a3a9_c58143e835f9 "Manufacturer Product Number of the Labware"@en ; + rdfs:domain :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019 ; + rdfs:range xsd:string ; + core:prefLabel "hasProductNumber"@en . + +:labop_3dbbe6b5-19c0-5ef2-8f5f-320a1044074b a owl:DatatypeProperty, + owl:FunctionalProperty ; + emmo:EMMO_967080e5_2f42_4eb2_a3a9_c58143e835f9 "labware is stackable"@en ; + rdfs:domain :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019 ; + rdfs:range xsd:boolean ; + core:prefLabel "isStackable"@en . + +:labop_44329015-214d-545c-b99d-cb66173b623d a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 1.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 1 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "Axygen"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "43.92"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 280000.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 1 ; + core:prefLabel "res-sw96-hp"@en . + +:labop_45a65e84-0cd1-5d59-9f17-b86024348dda a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 8.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 12 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "Mesoscale"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "14.35"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 410.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 96 ; + core:prefLabel "96-10-spot-vplex-m-pro-inflamm1-MSD"@en . + +:labop_4606e99e-76aa-5cbc-bbe7-2f1222be31d7 a owl:DatatypeProperty, + owl:FunctionalProperty ; + emmo:EMMO_967080e5_2f42_4eb2_a3a9_c58143e835f9 "Labware stacking height without any additions, like lids."@en ; + rdfs:domain :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019 ; + rdfs:range xsd:decimal ; + core:prefLabel "hasHightStacked"@en . + +:labop_49c9af30-5a5e-5c0a-b5e4-586b9dcb9131 a owl:DatatypeProperty, + owl:FunctionalProperty ; + emmo:EMMO_967080e5_2f42_4eb2_a3a9_c58143e835f9 "Opening angle of cone in deg."@en ; + rdfs:domain :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019 ; + rdfs:range xsd:decimal ; + core:prefLabel "hasConeAngle"@en . + +:labop_4adfeae2-33c8-5050-9634-a9b1e767a0b2 a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 8.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 12 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "Corning"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "14.6"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 320.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 96 ; + core:prefLabel "96-ubottom-clear-tc"@en . + +:labop_4b24eaf1-ccaf-5aaa-a347-ebab531e7e79 a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 16.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 24 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "PerkinElmer"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "14.35"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 28.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 384 ; + core:prefLabel "384-flat-white-white-proxiplate-plus"@en . + +:labop_4c9e9e75-bab4-5498-853a-57ff4db941c4 a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 32 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 48 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 1536 ; + core:prefLabel "Plate1536Well"@en . + +:labop_4d2cf79a-18a2-5a15-bdda-7789d84f7292 a owl:DatatypeProperty, + owl:FunctionalProperty ; + emmo:EMMO_967080e5_2f42_4eb2_a3a9_c58143e835f9 "Labware stacking height with additions, like lids."@en ; + rdfs:domain :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019 ; + rdfs:range xsd:decimal ; + core:prefLabel "hasHightStackedLidded"@en . + +:labop_4e018a96-9b39-5c78-8a86-5da8d6d5417a a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 8.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 12 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "Costar"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "14.22"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 360.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 96 ; + core:prefLabel "96-flat-clear-costar-3590"@en . + +:labop_50185da6-ef4e-52ed-8cc0-b507b505e467 a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 8.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 1 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "Axygen"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "43.8"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 32000.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 8 ; + core:prefLabel "res-mw8-hp"@en . + +:labop_51e9c6ee-065c-5edc-8f7e-f0adabdbfb28 a owl:DatatypeProperty, + owl:FunctionalProperty ; + emmo:EMMO_967080e5_2f42_4eb2_a3a9_c58143e835f9 "Well radius of a round well at the top opening in x-y plane."@en ; + rdfs:domain :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019 ; + rdfs:range xsd:decimal ; + core:prefLabel "hasTopRadiusXY"@en . + +:labop_545b98a5-1a84-5b75-9e0c-f75f7a11f04e a owl:DatatypeProperty, + owl:FunctionalProperty ; + emmo:EMMO_967080e5_2f42_4eb2_a3a9_c58143e835f9 "Well total well depth=hight"@en ; + rdfs:domain :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019 ; + rdfs:range xsd:decimal ; + core:prefLabel "hasDepthWell"@en . + +:labop_5888cd5c-7ba4-531e-a919-a149e499071b a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 1.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 12 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "Axygen"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "44.04"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 21000.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 12 ; + core:prefLabel "res-mw12-hp"@en . + +:labop_58dcb413-f46e-56f5-be1b-3617cc6ffe30 a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 16.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 24 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "Corning"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "14.35"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 80.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 384 ; + core:prefLabel "384-flat-white-white-nbs"@en . + +:labop_63cb2947-6e8c-5aff-abc4-380f474ea3ca a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 1.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 1 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "Greiner"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "-"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 2200.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 1 ; + core:prefLabel "tube-15"@en . + +:labop_650b9839-f274-5e87-8aaf-4c809233f3df a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 16.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 24 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "Labcyte"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "14.4"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 135.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 384 ; + core:prefLabel "384-echo"@en . + +:labop_6566af27-0790-5221-adcd-96cf059d1416 a owl:DatatypeProperty, + owl:FunctionalProperty ; + emmo:EMMO_967080e5_2f42_4eb2_a3a9_c58143e835f9 "Number of Columns of muti-well labware"@en ; + rdfs:domain :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019 ; + rdfs:range xsd:integer ; + core:prefLabel "hasNumCols"@en . + +:labop_6b22776a-3224-5812-bf71-83d9ce23ae38 a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 16.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 24 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "PerkinElmer"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "14.4"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 105.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 384 ; + core:prefLabel "384-flat-white-white-optiplate"@en . + +:labop_6ceaee21-25b7-57b4-8eb5-8b9edfb4749d a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 8.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 12 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "Corning"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "3.25"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 200.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 96 ; + core:prefLabel "96-well-v-bottom"@en . + +:labop_702945ce-3530-51e0-95b9-eed9503d5790 a owl:DatatypeProperty, + owl:FunctionalProperty ; + emmo:EMMO_967080e5_2f42_4eb2_a3a9_c58143e835f9 "Labware model number"@en ; + rdfs:domain :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019 ; + rdfs:range xsd:string ; + core:prefLabel "hasModelNumber"@en . + +:labop_70543c1d-a01f-52c1-aac7-d0b38091f6e1 a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 16.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 24 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "Corning"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "14.22"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 70.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 384 ; + core:prefLabel "384-round-clear-clear"@en . + +:labop_71b68d12-f079-5318-bbc9-5c1282825a54 a owl:DatatypeProperty, + owl:FunctionalProperty ; + emmo:EMMO_967080e5_2f42_4eb2_a3a9_c58143e835f9 "wWll-to-well distance in row direction"@en ; + rdfs:domain :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019 ; + rdfs:range xsd:decimal ; + core:prefLabel "hasWellDistRow"@en . + +:labop_71c0a9dc-d2b7-5245-8821-009fcd7a4778 a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 1.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 1 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "not_applicable"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "-"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 25000.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 1 ; + core:prefLabel "flask-25"@en . + +:labop_77fde989-da83-5225-b780-be36f3944fd9 a owl:DatatypeProperty, + owl:FunctionalProperty ; + emmo:EMMO_967080e5_2f42_4eb2_a3a9_c58143e835f9 "Radius of a round bottom in z (hight) direction."@en ; + rdfs:domain :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019 ; + rdfs:range xsd:decimal ; + core:prefLabel "hasBottomRadiusZ"@en . + +:labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 a owl:DatatypeProperty, + owl:FunctionalProperty ; + emmo:EMMO_967080e5_2f42_4eb2_a3a9_c58143e835f9 "Name of the Manufacturer "@en ; + rdfs:domain :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019 ; + rdfs:range xsd:string ; + core:prefLabel "hasManifacturer"@en . + +:labop_7f399301-aeb4-5273-abdb-d0a4334ac141 a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 32.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 48 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "Greiner"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "10.4"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 10.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 1536 ; + core:prefLabel "1536-white-tc"@en . + +:labop_7fa8aea2-613f-5c20-9320-07f43f7ec7b2 a owl:DatatypeProperty, + owl:FunctionalProperty ; + emmo:EMMO_967080e5_2f42_4eb2_a3a9_c58143e835f9 "Generalized shape polygon for more complex well shapes, in z direction = rotation axis."@en ; + rdfs:domain :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019 ; + rdfs:range xsd:string ; + core:prefLabel "hasShapePolygonZ"@en . + +:labop_82608f92-af4a-5917-8969-3d9c30958440 a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 8.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 12 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "Fisher"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "44"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 1000.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 96 ; + core:prefLabel "96-deep-kf"@en . + +:labop_845af61e-12ab-5432-8de0-dec754b6dec2 a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 1.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 1 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "not_applicable"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "-"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 250000.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 1 ; + core:prefLabel "bottle-250"@en . + +:labop_8904e3dc-de7a-54ea-a607-8a554ccb044d a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 1.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 1 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "unknown"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "14.7"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 400.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 1 ; + core:prefLabel "single-vbottom-microwell"@en . + +:labop_898678fe-fd38-5e62-9da0-df970662ee06 a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 1.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 1 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "Fisher"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "17.3"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 90000.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 1 ; + core:prefLabel "1-flat"@en . + +:labop_8b3c1ae0-7735-5dc0-ab3b-28145ab29c19 a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 8.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 12 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "Chemspeed"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "36"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 9000.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 96 ; + core:prefLabel "chemspeed-96-sealed-pin-rack"@en . + +:labop_8c26202c-ad47-5791-b734-addbf9ffa924 a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 4.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 6 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "E&K Scientific"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "44.04"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 10000.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 24 ; + core:prefLabel "24-deep"@en . + +:labop_90e743d1-69e7-5230-a9a3-31502bdde25f a owl:DatatypeProperty, + owl:FunctionalProperty ; + emmo:EMMO_967080e5_2f42_4eb2_a3a9_c58143e835f9 "Labware total hight, without any additions, like lids etc. "@en ; + rdfs:domain :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019 ; + rdfs:range xsd:decimal ; + core:prefLabel "hasHeight"@en . + +:labop_914371a5-137f-5fea-868a-cd8e217c9b66 a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 1.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 1 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "not_applicable"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "-"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 999999999.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 1 ; + core:prefLabel "vendor-tube"@en . + +:labop_92b00d80-39b5-596c-844e-1bf02461a9ce a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 16.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 24 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "Greiner"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "14.4"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 120.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 384 ; + core:prefLabel "384-v-clear-clear"@en . + +:labop_99819c07-7dd6-54e8-9618-9d69f5599afe a owl:DatatypeProperty, + owl:FunctionalProperty ; + emmo:EMMO_967080e5_2f42_4eb2_a3a9_c58143e835f9 "Labware total width, "@en ; + rdfs:domain :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019 ; + rdfs:range xsd:decimal ; + core:prefLabel "hasWidth"@en . + +:labop_9b0659c3-0cb6-5c08-99ee-e0155eab2539 a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 8.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 12 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "Corning"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "43.8"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 2000.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 96 ; + core:prefLabel "96-deep"@en . + +:labop_9da87440-6661-5e35-b235-4a88eecdd071 a owl:DatatypeProperty, + owl:FunctionalProperty ; + emmo:EMMO_967080e5_2f42_4eb2_a3a9_c58143e835f9 "Total Labware volume "@en ; + rdfs:domain :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019 ; + rdfs:range xsd:decimal ; + core:prefLabel "hasVolume"@en . + +:labop_9e93f04c-527b-5415-b284-61ba4f0a9f8c a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 8.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 12 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "Corning"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "14.22"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 340.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 96 ; + core:prefLabel "96-flat"@en . + +:labop_a251f45c-87c9-5477-85cb-211643a3d5b5 a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 8 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 12 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 96 ; + core:prefLabel "SLAS-1-2004"@en . + +:labop_a62c3197-4c2a-5cb3-89d7-46590914bbc2 a owl:DatatypeProperty, + owl:FunctionalProperty ; + emmo:EMMO_967080e5_2f42_4eb2_a3a9_c58143e835f9 "Well, bottom shape, flat, round, conical-"@en ; + rdfs:domain :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019 ; + rdfs:range xsd:string ; + core:prefLabel "hasShapeWellBottom"@en . + +:labop_abcdfdfc-83a9-56cc-9b73-2a6cfa0e09be a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 1.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 1 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "USA Scientific"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "-"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 500.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 1 ; + core:prefLabel "pcr-0.5"@en . + +:labop_b3693b79-61fe-51a9-a1f3-ac3382abd5a9 a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 1.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 1 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "unknown"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "83"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 20000.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 1 ; + core:prefLabel "mrv-large"@en . + +:labop_b441bf24-6f7f-5295-83bf-33338e579fce a owl:DatatypeProperty ; + emmo:EMMO_967080e5_2f42_4eb2_a3a9_c58143e835f9 "Polymer, properties, like solvent tolerance, transparency, ...."@en ; + rdfs:domain :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019 ; + rdfs:range xsd:string ; + core:prefLabel "hasMaterial"@en . + +:labop_b552f1b1-cae6-5075-aa2e-084e9dacf91f a owl:DatatypeProperty, + owl:FunctionalProperty ; + emmo:EMMO_967080e5_2f42_4eb2_a3a9_c58143e835f9 "labware is liddable"@en ; + rdfs:domain :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019 ; + rdfs:range xsd:boolean ; + core:prefLabel "isLiddable"@en . + +:labop_b8565913-53b0-55b3-8d1f-3d4b0a82c7f7 a owl:DatatypeProperty, + owl:FunctionalProperty ; + emmo:EMMO_967080e5_2f42_4eb2_a3a9_c58143e835f9 "Labware total hight, with additions, like lids etc."@en ; + rdfs:domain :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019 ; + rdfs:range xsd:decimal ; + core:prefLabel "hasHightLidded"@en . + +:labop_b98e8a2a-37c2-5754-82c1-7752fd8c2d19 a owl:DatatypeProperty, + owl:FunctionalProperty ; + emmo:EMMO_967080e5_2f42_4eb2_a3a9_c58143e835f9 "Labware radius of a round shape in XY direction "@en ; + rdfs:domain :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019 ; + rdfs:range xsd:decimal ; + core:prefLabel "hasRadiusXY"@en . + +:labop_b9e52c8a-8030-5d79-941e-6bbf8baee86e a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 16.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 24 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "PerkinElmer"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "14.35"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 28.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 384 ; + core:prefLabel "384-flat-black-black-proxiplate-plus-f"@en . + +:labop_c29c7399-f254-5730-90a9-17fb19e8aee6 a owl:DatatypeProperty, + owl:FunctionalProperty ; + emmo:EMMO_967080e5_2f42_4eb2_a3a9_c58143e835f9 "Total Labware volume "@en ; + rdfs:domain :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019 ; + rdfs:range xsd:decimal ; + core:prefLabel "hasWellVolume"@en . + +:labop_c4151f73-e6f3-57fd-a738-8532f995d693 a owl:DatatypeProperty, + owl:FunctionalProperty ; + emmo:EMMO_967080e5_2f42_4eb2_a3a9_c58143e835f9 "Well overall / top well shape,e.g. round, square, buffeled,..."@en ; + rdfs:domain :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019 ; + rdfs:range xsd:string ; + core:prefLabel "hasShapeWell"@en . + +:labop_cfb6b47e-215a-5fad-b1cc-6ab314812564 a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 2.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 3 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "Eppendorf"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "19"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 5000.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 6 ; + core:prefLabel "6-flat-tc"@en . + +:labop_d002400e-1ded-5748-8ecf-18483d1fc572 a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 16.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 24 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "Corning"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "14.22"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 90.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 384 ; + core:prefLabel "384-flat-white-clear"@en . + +:labop_d25c7d4b-e740-509d-b09e-de9b8f400876 a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 16.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 24 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "Corning"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "14.22"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 35.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 384 ; + core:prefLabel "384-round-black-black-lv-nbs"@en . + +:labop_d399020b-5067-5c72-bf40-e8ad160d49b6 a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 2.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 3 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "Eppendorf"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "19"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 5000.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 6 ; + core:prefLabel "6-flat"@en . + +:labop_d6391933-31c9-5bdd-b995-d8faae9a7059 a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 1.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 1 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "Tradewinds"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "42"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 3500.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 1 ; + core:prefLabel "a1-vial"@en . + +:labop_dc7d3c33-0983-56d6-bac0-505baa4e9b8d a owl:DatatypeProperty, + owl:FunctionalProperty ; + emmo:EMMO_967080e5_2f42_4eb2_a3a9_c58143e835f9 "Generalized shape polygon for more complex well shapes, in xy plane / direction."@en ; + rdfs:domain :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019 ; + rdfs:range xsd:decimal ; + core:prefLabel "hasShapePolygonXY"@en . + +:labop_dd5fe552-568f-57bd-b228-4aa74cce58b3 a owl:DatatypeProperty, + owl:FunctionalProperty ; + emmo:EMMO_967080e5_2f42_4eb2_a3a9_c58143e835f9 "Depth of cone from beginning of conical shape."@en ; + rdfs:domain :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019 ; + rdfs:range xsd:decimal ; + core:prefLabel "hasConeDepth"@en . + +:labop_de813e60-4405-5749-9e27-d237789d9ce2 a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 1.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 1 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "unknown"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "95.3"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 40000.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 1 ; + core:prefLabel "d2-vial"@en . + +:labop_df850393-1724-55f6-a0a6-7241eb8011c6 a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 16 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 24 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 384 ; + core:prefLabel "Greiner_384_V"@en . + +:labop_df936d31-b5f6-5fbc-a9f5-3d8a2a8bd057 a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 16.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 24 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "ThermoFisher"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "14.4"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 120.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 384 ; + core:prefLabel "384-ubottom-clear-polypropylene-nunc-264573"@en . + +:labop_e4685444-e906-5e3b-81eb-4ce078367a95 a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 1.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 1 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "Greiner"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "-"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 50000.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 1 ; + core:prefLabel "conical-50"@en . + +:labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 a owl:DatatypeProperty, + owl:FunctionalProperty ; + emmo:EMMO_967080e5_2f42_4eb2_a3a9_c58143e835f9 "Number of Wells of muti-well labware"@en ; + rdfs:domain :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019 ; + rdfs:range xsd:integer ; + core:prefLabel "hasNumWells"@en . + +:labop_e889a659-217c-5df9-8a5a-70debd34bc10 a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 1.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 1 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "not_applicable"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "-"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 250000.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 1 ; + core:prefLabel "flask-250"@en . + +:labop_eb11a326-7155-52ac-8cd0-ccef5e57a36c a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 8.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 12 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "Fisher"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "14.7"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 400.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 96 ; + core:prefLabel "96-vbottom-microwell"@en . + +:labop_ec1118d9-fdfd-5f05-9cc0-0f63b9055052 a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 16.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 24 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "Labcyte"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "10.48"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 14.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 384 ; + core:prefLabel "384-echo-ldv"@en . + +:labop_ee4213b2-cd8b-50c1-8732-88504c4bd47a a owl:DatatypeProperty, + owl:FunctionalProperty ; + emmo:EMMO_967080e5_2f42_4eb2_a3a9_c58143e835f9 "2D model of Well shape"@en ; + rdfs:domain :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019 ; + rdfs:range xsd:string ; + core:prefLabel "hasShapeModel2D"@en . + +:labop_eecd6011-cedb-585d-aaba-ff59a0c283c8 a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 8.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 12 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "Greiner"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "14.22"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 340.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 96 ; + core:prefLabel "96-flat-black-black-fluotrac-600"@en . + +:labop_f4ac6699-90bc-5ba0-b681-d9fc94a8dd51 a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 32.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 48 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "Corning"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "10.4"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 12.5 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 1536 ; + core:prefLabel "1536-tc-white-corning-3727"@en . + +:labop_f62753e9-65fc-5e4e-978c-012af5393189 a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 1.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 1 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "unknown"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "117.2"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 600.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 1 ; + core:prefLabel "nmr-tube-5mm"@en . + +:labop_f85a8b2a-df61-54c9-a9f2-39207fcd1df4 a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 8.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 12 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "Mesoscale"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "14.35"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 410.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 96 ; + core:prefLabel "96-10-spot-uplex-MSD"@en . + +:labop_f9b62170-e705-5576-97a3-3864710e5bdc a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 1.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 1 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "Axygen"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "19.05"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 92000.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 1 ; + core:prefLabel "res-sw384-lp"@en . + +:labop_f9c37ff6-a248-50c1-aeda-81ce43ca1edd a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 8.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 12 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "Eppendorf"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "15.9"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 160.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 96 ; + core:prefLabel "96-pcr"@en . + +:labop_fc5afaee-dc3c-50c3-a325-248a2e5cda8e a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 8.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 12 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "Mesoscale"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "14.35"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 410.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 96 ; + core:prefLabel "96-4-spot-mMIP3a-MSD"@en . + +:labop_fc87b9df-96da-5084-bdf2-99fe2cf61083 a :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019, + owl:NamedIndividual ; + :labop_360645fc-419c-54b2-ad91-3488723c86d9 1.0 ; + :labop_6566af27-0790-5221-adcd-96cf059d1416 1 ; + :labop_795abf15-9bbd-5ca5-8df9-103f6e9d86b3 "unknown"^^xsd:string ; + :labop_90e743d1-69e7-5230-a9a3-31502bdde25f "83.35"^^xsd:string ; + :labop_c29c7399-f254-5730-90a9-17fb19e8aee6 2000.0 ; + :labop_e777604a-bf8b-5bd9-bba6-3afadc690f19 1 ; + core:prefLabel "mrv-small"@en . + +:labop_fe483b78-bc24-5d98-8f04-13a62a56ae99 a owl:DatatypeProperty, + owl:FunctionalProperty ; + emmo:EMMO_967080e5_2f42_4eb2_a3a9_c58143e835f9 "Mass of the Labware "@en ; + rdfs:domain :labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019 ; + rdfs:range xsd:decimal ; + core:prefLabel "hasMass"@en . + +:labop_70ca96fb-1da5-580f-aa9c-73499f6f0228 a owl:ObjectProperty ; + emmo:EMMO_967080e5_2f42_4eb2_a3a9_c58143e835f9 "Associates a property to a type (string, number...)."@en ; + rdfs:subPropertyOf emmo:EMMO_eb3518bf_f799_4f9e_8c3e_ce59af11453b ; + owl:inverseOf :labop_fa27cacb-a570-5c40-be2c-ac7bd2087feb ; + core:prefLabel "isTypeOf"@en . + +:labop_fa27cacb-a570-5c40-be2c-ac7bd2087feb a owl:ObjectProperty ; + emmo:EMMO_967080e5_2f42_4eb2_a3a9_c58143e835f9 "Associates a type (string, number...) to a property."@en ; + rdfs:subPropertyOf emmo:EMMO_eb3518bf_f799_4f9e_8c3e_ce59af11453b ; + owl:inverseOf :labop_70ca96fb-1da5-580f-aa9c-73499f6f0228 ; + core:prefLabel "hasType"@en . + +:labop_1d4c2a98-e5bd-5154-8fc8-3c33118e9019 a owl:Class ; + emmo:EMMO_967080e5_2f42_4eb2_a3a9_c58143e835f9 "Labware is a utility device that all experiments are done with and which is not actively measuring. Examples: a container, a pipette tip, a reactor, ... "@en ; + rdfs:subClassOf emmo:EMMO_494b372c_cfdf_47d3_a4de_5e037c540de8 ; + core:prefLabel "Labware"@en . + diff --git a/notebooks/labop_labware_dev.ipynb b/notebooks/labop_labware_dev.ipynb index 6729d8a..babe742 100644 --- a/notebooks/labop_labware_dev.ipynb +++ b/notebooks/labop_labware_dev.ipynb @@ -19,15 +19,14 @@ "- basic query is directly supported\n", "- integrated SPRAQL engine for advance queries\n", "\n", - " - everything is encapsulated in python classes, that can directly be used in applications (!!)\n", + " - everything is encapsulated in python \"classes\", that can directly be used in applications (!!)\n", "\n", "\n", "## Design guidelines for the labware ontology\n", "\n", "- as general as possible -> wide applicability\n", "- capturing the most important/common labware features\n", - "- separation of abstract class definitions and individuals\n", - "- no hard coded features\n", + "- clear separation of Terminology part (T-Box, abstract class definitions) and Assertion Part (A-Box, individuals)\n", "\n", " ## outlook\n", "\n", @@ -68,6 +67,14 @@ " return owlready2.locstr(s, lang='')" ] }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Labware Ontology Terminology Component (TBox) " + ] + }, { "cell_type": "code", "execution_count": null, @@ -85,59 +92,63 @@ " self.labop_labware_base_iri = 'http://www.oso.org/oso/labware#'\n", " self.labop_labware_version_iri = f'http://www.oso.org/{__version__}/oso/labware'\n", "\n", - " output_filename_base = os.path.join('labop_labware')\n", + " output_filename_base = os.path.join('labop_labware_base')\n", " self.labop_labware_owl_filename = f'{output_filename_base}-v{__version__}.owl'\n", " self.labop_labware_ttl_filename = f'{output_filename_base}-v{__version__}.ttl'\n", "\n", - " # Load crystallography, which imports emmo\n", - " # alternative url \"https://raw.githubusercontent.com/emmo-repo/EMMO/master/self.emmo.ttl\"\n", + " # EMMO top-level ontology \n", "\n", " self.emmo_url = (\n", " 'https://raw.githubusercontent.com/emmo-repo/emmo-repo.github.io/'\n", " 'master/versions/1.0.0-beta/emmo-inferred-chemistry2.ttl')\n", "\n", + " # assign a local path fo the ontology, in case one wants to work offline\n", + "\n", " self.emmo_url_local = os.path.join(pathlib.Path(\n", " __file__).parent.resolve(), \"emmo\", \"emmo-inferred-chemistry2\")\n", "\n", " if os.path.isfile(self.emmo_url_local + '.ttl'):\n", " self.emmo_url = self.emmo_url_local\n", "\n", - " #self.emmo_world = World(filename=\"emmo_labwares.sqlite3\")\n", + " #self.emmo_world = World(filename=\"emmo_labwares.sqlite3\") # this could manifest the ontology in a database\n", " if emmo_world is not None:\n", " self.emmo_world = emmo_world\n", " else:\n", " self.emmo_world = World()\n", - " # self.emmo_world.onto_path.append(\"../emmo\")\n", - "\n", + " \n", + " # loading the EMMO top-level ontology\n", " self.emmo = self.emmo_world.get_ontology(self.emmo_url)\n", " self.emmo.load() # reload_if_newer = True\n", " self.emmo.sync_python_names() # Synchronise annotations\n", " self.emmo.base_iri = self.emmo.base_iri.rstrip('/#')\n", " self.catalog_mappings = {self.emmo.base_iri: self.emmo_url}\n", "\n", - " # Create new ontology\n", - " self.osolw = self.emmo_world.get_ontology(self.labop_labware_base_iri)\n", + " # Create new ontology: labOP-labware - lolw\n", + " self.lolw = self.emmo_world.get_ontology(self.labop_labware_base_iri)\n", " if emmo_world is None:\n", - " self.osolw.imported_ontologies.append(self.emmo)\n", - " self.osolw.sync_python_names()\n", + " self.lolw.imported_ontologies.append(self.emmo)\n", + " self.llw.sync_python_names()\n", "\n", + " # defining the labOP-labware ontology\n", " def define_ontology(self):\n", " logging.debug('defining labware ontology')\n", "\n", - " with self.osolw:\n", + " with self.lolw:\n", + "\n", + " # Terminology Component (TBox) \n", "\n", " # Basic Relations\n", " # ================\n", "\n", - " class hasType(self.osolw.hasConvention):\n", + " class hasType(self.lolw.hasConvention):\n", " \"\"\"Associates a type (string, number...) to a property.\"\"\"\n", "\n", - " class isTypeOf(self.osolw.hasConvention):\n", + " class isTypeOf(self.lolw.hasConvention):\n", " \"\"\"Associates a property to a type (string, number...).\"\"\"\n", " inverse_property = hasType\n", "\n", " # Physical Properties\n", - " # ==========\n", + " # ====================\n", "\n", " class Length:\n", " \"\"\"\"Labware total length \"\"\"\n", @@ -151,7 +162,7 @@ " class Volume:\n", " \"\"\"Total Labware volume \"\"\"\n", "\n", - " class HigthLidded:\n", + " class HightLidded:\n", " \"\"\"Labware total hight, with additions, like lids etc.\"\"\"\n", "\n", " class HightStacked:\n", @@ -227,7 +238,6 @@ " \"\"\"3D model of Well shape\"\"\"\n", "\n", "\n", - "\n", " # class Description:\n", " # \"\"\"Labware description. Possible applications/purpose for this labware could be also added here.\"\"\"\n", " \n", @@ -237,12 +247,12 @@ "\n", " # Basic ------\n", "\n", - " class Labware(self.osolw.Device):\n", + " class Labware(self.lolw.Device):\n", " \"\"\"Labware is a utility device that all experiments are done with and which is not actively measuring. Examples: a container, a pipette tip, a reactor, ... \"\"\"\n", "\n", - " # is_a = [self.osolw.has_Material.some(str),\n", - " # self.osolw.has_NumCols.some(int),\n", - " # self.osolw.has_NumRows.some(int)]\n", + " # is_a = [self.lolw.has_Material.some(str),\n", + " # self.lolw.has_NumCols.some(int),\n", + " # self.lolw.has_NumRows.some(int)]\n", "\n", " # Relations / Properties\n", " # ========================\n", @@ -252,17 +262,17 @@ " class hasLength:\n", " \"\"\"\"Labware total length \"\"\"\n", " is_a = [\n", - " self.osolw.hasReferenceUnit.only(\n", - " self.osolw.hasPhysicalDimension.only(self.osolw.Length)\n", + " self.lolw.hasReferenceUnit.only(\n", + " self.lolw.hasPhysicalDimension.only(self.lolw.Length)\n", " ),\n", - " hasType.exactly(1, self.osolw.Real), ]\n", + " hasType.exactly(1, self.lolw.Real), ]\n", "\n", " # class hasWidth(FunctionalProperty):\n", " # \"\"\"Labware total width, \"\"\"\n", " # domain = [Labware]\n", " # range = [Width]\n", "\n", - " # class hasHeight(Labware >> self.osolw.Height, FunctionalProperty):\n", + " # class hasHeight(Labware >> self.lolw.Height, FunctionalProperty):\n", " # \"\"\"Labware total hight, without any additions, like lids etc. \"\"\"\n", " \n", " class hasWidth(Labware >> float, FunctionalProperty):\n", @@ -280,7 +290,7 @@ " class hasVolume(Labware >> float, FunctionalProperty):\n", " \"\"\"Total Labware volume \"\"\"\n", "\n", - " class hasHigthLidded(Labware >> float, FunctionalProperty):\n", + " class hasHightLidded(Labware >> float, FunctionalProperty):\n", " \"\"\"Labware total hight, with additions, like lids etc.\"\"\"\n", "\n", " class hasHightStacked(Labware >> float, FunctionalProperty):\n", @@ -292,23 +302,26 @@ " class hasMass(Labware >> float, FunctionalProperty):\n", " \"\"\"Mass of the Labware \"\"\"\n", "\n", + " class hasCoatingMaterial(Labware >> str, FunctionalProperty):\n", + " \"\"\"Labware coating material\"\"\"\n", + "\n", " \n", " class hasColor(Labware >> str, FunctionalProperty):\n", " \"\"\"Labware color in RGB hex encoding\"\"\"\n", "\n", " class isLiddable(Labware >> bool, FunctionalProperty):\n", - " \"\"\"container is liddable\"\"\"\n", + " \"\"\"labware is liddable\"\"\"\n", + "\n", + " class isStackable(Labware >> bool, FunctionalProperty):\n", + " \"\"\"labware is stackable\"\"\"\n", "\n", " class isSealable(Labware >> bool, FunctionalProperty):\n", " \"\"\"container is sealable\"\"\"\n", "\n", " class hasMaterial(Labware >> str, DatatypeProperty):\n", " \"\"\"Polymer, properties, like solvent tolerance, transparency, ....\"\"\"\n", - " domain = [Labware]\n", - " range = [str]\n", "\n", " # multiwell labware\n", - " \n", "\n", " class hasNumCols(Labware >> int, FunctionalProperty):\n", " \"\"\"Number of Columns of muti-well labware\"\"\"\n", @@ -381,6 +394,10 @@ " class hasShapeModel3D(Labware >> str, FunctionalProperty):\n", " \"\"\"3D model of Well shape\"\"\"\n", "\n", + " # further properties:\n", + "\n", + " # lengthAtEdge, lengthOverall, isSLAS1-2004complian\n", + "\n", " \n" ] }, @@ -390,10 +407,10 @@ "metadata": {}, "outputs": [], "source": [ - "olw = labop_Labware()\n", - "olw.define_ontology()\n", + "lw = labop_Labware()\n", + "lw.define_ontology()\n", "\n", - "list(olw.osolw.classes())" + "list(lw.lolw.classes())" ] }, { @@ -401,7 +418,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Defining individuals" + "## Defining individuals - Assertion Component (A-Box)" ] }, { @@ -410,10 +427,10 @@ "metadata": {}, "outputs": [], "source": [ - "with olw.osolw:\n", - " greiner_384_v = olw.osolw.Labware(\"Greiner_384_V\", \n", - " hasNumRows=192, \n", - " hasNumCols=16, \n", + "with lw.lolw:\n", + " greiner_384_v = lw.lolw.Labware(\"Greiner_384_V\", \n", + " hasNumRows=16, \n", + " hasNumCols=24, \n", " hasNumWells=384 )" ] }, @@ -476,10 +493,10 @@ "metadata": {}, "outputs": [], "source": [ - "with olw.osolw:\n", + "with lw.lolw:\n", " for index,row in strateos_cont_df.iterrows():\n", " print(row['Id'], \"-- >\", row['Well Count'])\n", - " lw = olw.osolw.Labware( row['Id'],\n", + " law = lw.lolw.Labware( row['Id'],\n", " hasManifacturer=row['Vendor'],\n", " hasNumRows=row['Well Count'] / row['Column Count'], \n", " hasNumCols=row['Column Count'],\n", @@ -537,7 +554,7 @@ "metadata": {}, "outputs": [], "source": [ - "graph = olw.emmo_world.as_rdflib_graph()\n", + "graph = lw.emmo_world.as_rdflib_graph()\n", "\n", "for prefix, iri in prefix_dict.items():\n", " print(prefix, \"--- \", iri )\n", @@ -570,7 +587,7 @@ "metadata": {}, "outputs": [], "source": [ - "results = list(olw.emmo_world.sparql(query))\n", + "results = list(lw.emmo_world.sparql(query))\n", "results" ] }, @@ -601,7 +618,7 @@ "metadata": {}, "outputs": [], "source": [ - "results = list(olw.emmo_world.sparql(query))\n", + "results = list(lw.emmo_world.sparql(query))\n", "results" ] }, @@ -611,7 +628,7 @@ "metadata": {}, "outputs": [], "source": [ - "results = list(olw.emmo_world.sparql(query))\n", + "results = list(lw.emmo_world.sparql(query))\n", "results" ] }, @@ -636,37 +653,37 @@ "source": [ "\n", "# Save new ontology as owl\n", - "olw.osolw.sync_attributes(name_policy='uuid', class_docstring='elucidation',\n", + "lw.lolw.sync_attributes(name_policy='uuid', class_docstring='elucidation',\n", " name_prefix='labop_')\n", " \n", - "olw.osolw.set_version(version_iri=olw.labop_labware_version_iri)\n", - "olw.osolw.dir_label = False\n", + "lw.lolw.set_version(version_iri=lw.labop_labware_version_iri)\n", + "lw.lolw.dir_label = False\n", "\n", - "olw.catalog_mappings[olw.labop_labware_version_iri] = olw.labop_labware_ttl_filename \n", + "lw.catalog_mappings[lw.labop_labware_version_iri] = lw.labop_labware_ttl_filename \n", "\n", "#################################################################\n", "# Annotate the ontology metadata\n", "#################################################################\n", "\n", - "olw.osolw.metadata.abstract.append(en(\n", - " 'An EMMO-based domain ontology scientific measurements.'\n", + "lw.lolw.metadata.abstract.append(en(\n", + " 'An EMMO-based domain ontology forscientific labware.'\n", " 'olw-measurement is released under the Creative Commons Attribution 4.0 '\n", " 'International license (CC BY 4.0).'))\n", "\n", "\n", - "olw.osolw.metadata.title.append(en('OSO-Measurement'))\n", - "olw.osolw.metadata.creator.append(en('mark doerr'))\n", - "olw.osolw.metadata.contributor.append(en('university greifswald'))\n", - "olw.osolw.metadata.publisher.append(en(''))\n", - "olw.osolw.metadata.license.append(en(\n", + "lw.lolw.metadata.title.append(en('LabOP-Labware'))\n", + "lw.lolw.metadata.creator.append(en('mark doerr'))\n", + "lw.lolw.metadata.contributor.append(en('university greifswald'))\n", + "lw.lolw.metadata.publisher.append(en(''))\n", + "lw.lolw.metadata.license.append(en(\n", " 'https://creativecommons.org/licenses/by/4.0/legalcode'))\n", - "olw.osolw.metadata.versionInfo.append(en(olw.__version__))\n", - "olw.osolw.metadata.comment.append(en(\n", + "lw.lolw.metadata.versionInfo.append(en(lw.__version__))\n", + "lw.lolw.metadata.comment.append(en(\n", " 'The EMMO requires FaCT++ reasoner plugin in order to visualize all'\n", " 'inferences and class hierarchy (ctrl+R hotkey in Protege).'))\n", - "olw.osolw.metadata.comment.append(en(\n", + "lw.lolw.metadata.comment.append(en(\n", " 'This ontology is generated with data from the ASE Python package.'))\n", - "olw.osolw.metadata.comment.append(en(\n", + "lw.lolw.metadata.comment.append(en(\n", " 'Contacts:\\n'\n", " 'mark doerr\\n'\n", " 'University Greifswald\\n'\n", @@ -674,9 +691,9 @@ " '\\n'\n", " ))\n", "\n", - "olw.osolw.save(olw.labop_labware_ttl_filename , overwrite=True)\n", + "lw.lolw.save(lw.labop_labware_ttl_filename , overwrite=True)\n", "#olw.save(labop_measurement_owl_filename, overwrite=True)\n", - "write_catalog(olw.catalog_mappings)\n", + "write_catalog(lw.catalog_mappings)\n", "# olw.sync_reasoner()\n", "# olw.save('olw-measurement-inferred.ttl', overwrite=True)\n", "# ...and to the sqlite3 database.\n", @@ -688,13 +705,13 @@ "# to open the ontology from url in Protege\n", "import rdflib # noqa: E402, F401\n", "g = rdflib.Graph()\n", - "g.parse(olw.labop_labware_ttl_filename , format='turtle')\n", + "g.parse(lw.labop_labware_ttl_filename , format='turtle')\n", "for s, p, o in g.triples(\n", " (None, rdflib.URIRef('http://www.w3.org/2002/07/owl#imports'), None)):\n", " if 'emmo-inferred' in o:\n", " g.remove((s, p, o))\n", - " g.add((s, p, rdflib.URIRef(olw.emmo_url)))\n", - "g.serialize(destination=olw.labop_labware_ttl_filename, format='turtle')\n", + " g.add((s, p, rdflib.URIRef(lw.emmo_url)))\n", + "g.serialize(destination=lw.labop_labware_ttl_filename, format='turtle')\n", "\n" ] }, @@ -708,9 +725,9 @@ ], "metadata": { "kernelspec": { - "display_name": "lara39", + "display_name": "lara", "language": "python", - "name": "python3" + "name": "lara" }, "language_info": { "codemirror_mode": { @@ -722,12 +739,12 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.16" + "version": "3.10.6" }, "orig_nbformat": 4, "vscode": { "interpreter": { - "hash": "bd9418668fc44f68c3d5dedbe2cf4d3042fece1c527f44dc626a93675f7ef664" + "hash": "916dbcbb3f70747c44a77c7bcd40155683ae19c65e1c03b4aa3499c5328201f1" } } }, diff --git a/notebooks/Add Labels.ipynb b/notebooks/old/Add Labels.ipynb similarity index 100% rename from notebooks/Add Labels.ipynb rename to notebooks/old/Add Labels.ipynb diff --git a/notebooks/Strateos Catalog.ipynb b/notebooks/old/Strateos Catalog.ipynb similarity index 100% rename from notebooks/Strateos Catalog.ipynb rename to notebooks/old/Strateos Catalog.ipynb diff --git a/tests/test_oso_labware.py b/tests/test_labop_labware.py similarity index 62% rename from tests/test_oso_labware.py rename to tests/test_labop_labware.py index bd03e60..5089a5a 100644 --- a/tests/test_oso_labware.py +++ b/tests/test_labop_labware.py @@ -3,7 +3,7 @@ # pylint: disable=redefined-outer-name from labop_labware import __version__ -from labop_labware.labware import labop_Labware +from labop_labware.labware_tbox import labop_Labware def test_version(): """Sample pytest test function.""" @@ -13,11 +13,11 @@ def test_labop_labware(): """ testing OSOMeasurement """ - olw = labop_Labware() + lolw = labop_Labware() - olw.define_ontology() + lolw.define_ontology() - assert olw.osolw.NumWells.iri == 'http://www.oso.org/oso/labware#NumWells' + assert lolw.osolw.NumWells.iri == 'http://www.oso.org/lolw/labware#NumWells' From 295c2081baa5a8c516792bb4cd57d6e97a0ed8d2 Mon Sep 17 00:00:00 2001 From: mark doerr Date: Wed, 25 Jan 2023 23:12:10 +0100 Subject: [PATCH 03/11] refining the ontology --- labop_labware/labware_tbox.py | 102 ++++++++++++++++++++++-------- notebooks/labop_labware_dev.ipynb | 89 +++++++++++++++++++++----- 2 files changed, 148 insertions(+), 43 deletions(-) diff --git a/labop_labware/labware_tbox.py b/labop_labware/labware_tbox.py index 285dfff..9ae3ca7 100644 --- a/labop_labware/labware_tbox.py +++ b/labop_labware/labware_tbox.py @@ -86,72 +86,114 @@ def define_ontology(self): with self.osolw: + # Terminology Component (TBox) + # Basic Relations # ================ - class hasType(self.osolw.hasConvention): + class hasType(self.lolw.hasConvention): """Associates a type (string, number...) to a property.""" - class isTypeOf(self.osolw.hasConvention): + class isTypeOf(self.lolw.hasConvention): """Associates a property to a type (string, number...).""" inverse_property = hasType # Physical Properties - # ========== + # ==================== - class Length: + class Length(self.emmo.Length): """"Labware total length """ + physicalDimension = pl("T+1 L0 M0 I0 Θ0 N0 J0") + wikipediaEntry = en("https://en.wikipedia.org/wiki/Length") - class Width: - """Labware total width, """ - - class Height: + # reference SI unit + self.emmo.hasReferenceUnit = self.emmo.metre + + + + class Width(self.emmo.Length): + """Labware total width """ + physicalDimension = pl("T+1 L0 M0 I0 Θ0 N0 J0") + wikipediaEntry = en("https://en.wikipedia.org/wiki/Width") + + # reference SI unit + self.emmo.hasReferenceUnit = self.emmo.metre + + + class Height(self.emmo.Length): """Labware total hight, without any additions, like lids etc. """ + physicalDimension = pl("T+1 L0 M0 I0 Θ0 N0 J0") + + # reference SI unit + self.emmo.hasReferenceUnit = self.emmo.metre + + - class HigthLidded: + class Volume(self.emmo.Volume): + """Total Labware volume """ + physicalDimension = pl("T+1 L3 M0 I0 Θ0 N0 J0") + + + class HightLidded(self.emmo.Length): """Labware total hight, with additions, like lids etc.""" + physicalDimension = pl("T+1 L0 M0 I0 Θ0 N0 J0") - class HightStacked: + class HightStacked(self.emmo.Length): """Labware stacking height without any additions, like lids.""" + physicalDimension = pl("T+1 L0 M0 I0 Θ0 N0 J0") - class HightStackedLidded: + class HightStackedLidded(self.emmo.Length): """Labware stacking height with additions, like lids.""" + physicalDimension = pl("T+1 L0 M0 I0 Θ0 N0 J0") + + + + # Torque + # ====== + class Torque(self.emmo.Torque): + """Torque of a labware, e.g. for screw caps""" + # add quantity + physicalDimension = pl("T+1 L2 M1 I0 Θ0 N0 J0") + wikipediaEntry = en("https://en.wikipedia.org/wiki/Torque") - class Mass: - """Mass of the Labware """ - class Material: + # dimension + # reference SI unit + + + class Material(self.emmo.Material): """polymer, properties, like solvent tolerance, transperancy, ....""" - class Color: + class Color(self.emmo.Color): """Labware color""" - class Liddable: + class Liddable(self.emmo.Boolean): """container is liddable""" - class Sealable: + class Sealable(self.emmo.Boolean): """container is sealable""" # multiwell labware - class NumRows: + class NumRows(self.emmo.Integer): """Number of rows of container""" - class NumCols : + class NumCols(self.emmo.Integer) : """Number of columns of container""" - class NumWells: + class NumWells(self.emmo.Integer): """Number of wells - could be auto generated""" - class WellDistRow: + class WellDistRow(self.emmo.Length): """wWll-to-well distance in row direction""" - class WellDistCol: + class WellDistCol(sef.emmo.Length): """"Well-to-well distance in column direction""" # Well properties of labware with wells - class DepthWell: + class DepthWell(self.emmo.Length): """Well total well depth=hight""" + class ShapeWell: """Well overall / top well shape,e.g. round, square, buffeled,...""" @@ -159,16 +201,16 @@ class ShapeWell: class ShapeWellBottom: """Well, bottom shape, flat, round, conical-""" - class TopRadiusXY: + class TopRadiusXY(self.emmo.Length): """Well radius of a round well at the top opening in x-y plane.""" - class BottomRadiusXY: + class BottomRadiusXY(self.emmo.Length): """Radius of a round bottom in xy plane / direction.""" - class BottomRadiusZ: + class BottomRadiusZ(self.emmo.Length): """Radius of a round bottom in z (hight) direction.""" - class ConeAngle: + class ConeAngle(self.emmo.Angle): """Opening angle of cone in deg.""" class ConeDepth: @@ -214,4 +256,8 @@ class ProductNumber: class Labware(self.osolw.Device): """Labware is a utility device that all experiments are done with and which is not actively measuring. Examples: a container, a pipette tip, a reactor, ... """ - #is_a = [self.osom.hasProperty.some(self.osom.Time)] \ No newline at end of file + #is_a = [self.osom.hasProperty.some(self.osom.Time)] + + + # query for SI unit of a property + diff --git a/notebooks/labop_labware_dev.ipynb b/notebooks/labop_labware_dev.ipynb index babe742..1302ec1 100644 --- a/notebooks/labop_labware_dev.ipynb +++ b/notebooks/labop_labware_dev.ipynb @@ -37,9 +37,17 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 2, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "* Owlready2 * Warning: optimized Cython parser module 'owlready2_optimized' is not available, defaulting to slower Python implementation\n" + ] + } + ], "source": [ "# currently only reflib 4.2.1 is supported\n", "#! pip install rdflib==4.2.1\n", @@ -77,7 +85,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ @@ -150,35 +158,70 @@ " # Physical Properties\n", " # ====================\n", "\n", - " class Length:\n", + " class Length(emmo.Length):\n", " \"\"\"\"Labware total length \"\"\"\n", + " physicalDimension = pl(\"T+1 L0 M0 I0 Θ0 N0 J0\")\n", + " wikipediaEntry = en(\"https://en.wikipedia.org/wiki/Length\")\n", + "\n", + " # reference SI unit\n", "\n", - " class Width:\n", + " \n", + "\n", + " class Width(emmo.Length):\n", " \"\"\"Labware total width, \"\"\"\n", - " \n", - " class Height:\n", + " physicalDimension = pl(\"T+1 L0 M0 I0 Θ0 N0 J0\")\n", + "\n", + " # reference SI unit\n", + "\n", + "\n", + "\n", + " class Height(emmo.Length):\n", " \"\"\"Labware total hight, without any additions, like lids etc. \"\"\"\n", + " physicalDimension = pl(\"T+1 L0 M0 I0 Θ0 N0 J0\")\n", "\n", - " class Volume:\n", + "\n", + " class Volume(emmo.Volume):\n", " \"\"\"Total Labware volume \"\"\"\n", + " physicalDimension = pl(\"T+1 L3 M0 I0 Θ0 N0 J0\")\n", + "\n", "\n", - " class HightLidded:\n", + " class HightLidded(emmo.Length):\n", " \"\"\"Labware total hight, with additions, like lids etc.\"\"\"\n", + " physicalDimension = pl(\"T+1 L0 M0 I0 Θ0 N0 J0\")\n", "\n", - " class HightStacked:\n", + " class HightStacked(emmo.Length):\n", " \"\"\"Labware stacking height without any additions, like lids.\"\"\"\n", + " physicalDimension = pl(\"T+1 L0 M0 I0 Θ0 N0 J0\")\n", "\n", - " class HightStackedLidded:\n", + " class HightStackedLidded(emmo.Length):\n", " \"\"\"Labware stacking height with additions, like lids.\"\"\"\n", + " physicalDimension = pl(\"T+1 L0 M0 I0 Θ0 N0 J0\")\n", + "\n", + "\n", + "\n", + " # Torque\n", + " # ======\n", + " class Torque(emmo.Torque):\n", + " \"\"\"Torque of a labware, e.g. for screw caps\"\"\" \n", + " # add quantity\n", + " physicalDimension = pl(\"T+1 L2 M1 I0 Θ0 N0 J0\")\n", + " wikipediaEntry = en(\"https://en.wikipedia.org/wiki/Torque\")\n", "\n", - " class Mass:\n", - " \"\"\"Mass of the Labware \"\"\"\n", + "\n", + " # dimension\n", + " # reference SI unit\n", + " \n", + " \n", "\n", " class Material:\n", " \"\"\"Polymer, properties, like solvent tolerance, transparency, ....\"\"\"\n", + " wikipediaEntry = en(\"https://en.wikipedia.org/wiki/Material\")\n", + "\n", "\n", " class Model3D:\n", " \"\"\"3D model of the labware in X format.\"\"\"\n", + " wikipediaEntry = en(\"https://en.wikipedia.org/wiki/3D_modeling\")\n", + "\n", " \n", " class Color:\n", " \"\"\"Labware color\"\"\"\n", @@ -249,6 +292,9 @@ "\n", " class Labware(self.lolw.Device):\n", " \"\"\"Labware is a utility device that all experiments are done with and which is not actively measuring. Examples: a container, a pipette tip, a reactor, ... \"\"\"\n", + " wikipediaEntry = en(\"https://en.wikipedia.org/wiki/Labware\")\n", + "\n", + "\n", "\n", " # is_a = [self.lolw.has_Material.some(str),\n", " # self.lolw.has_NumCols.some(int),\n", @@ -346,8 +392,6 @@ " class hasProductNumber(Labware >> str, FunctionalProperty):\n", " \"\"\"Manufacturer Product Number of the Labware\"\"\"\n", "\n", - " # multiwell labware\n", - "\n", " class hasWellVolume(Labware >> float, FunctionalProperty):\n", " \"\"\"Total Labware volume \"\"\"\n", "\n", @@ -394,6 +438,21 @@ " class hasShapeModel3D(Labware >> str, FunctionalProperty):\n", " \"\"\"3D model of Well shape\"\"\"\n", "\n", + " # labware with screw cap\n", + "\n", + " class hasScrewCap(Labware >> bool, FunctionalProperty):\n", + " \"\"\"Screw cap type\"\"\"\n", + "\n", + " class hasScrewCapMaterial(Labware >> str, FunctionalProperty):\n", + " \"\"\"Screw cap material\"\"\"\n", + " \n", + " class hasScrewCapColor(Labware >> str, FunctionalProperty):\n", + " \"\"\"Screw cap color\"\"\"\n", + "\n", + " \n", + "\n", + " \n", + "\n", " # further properties:\n", "\n", " # lengthAtEdge, lengthOverall, isSLAS1-2004complian\n", From 4e3ee9c94c961af7eefee1d6f7479f25f21f6b65 Mon Sep 17 00:00:00 2001 From: mark doerr Date: Thu, 26 Jan 2023 17:08:26 +0100 Subject: [PATCH 04/11] feat: first chatGPT input --- labop_labware/labware_tbox.py | 189 +++------------------ labop_labware/labware_tbox_old.py | 263 ++++++++++++++++++++++++++++++ notebooks/labop_labware_dev.ipynb | 56 +++++-- 3 files changed, 323 insertions(+), 185 deletions(-) create mode 100644 labop_labware/labware_tbox_old.py diff --git a/labop_labware/labware_tbox.py b/labop_labware/labware_tbox.py index 9ae3ca7..e3a5667 100644 --- a/labop_labware/labware_tbox.py +++ b/labop_labware/labware_tbox.py @@ -1,19 +1,13 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -"""_____________________________________________________________________ +# python module that defines an ontology of common labware classes that are used in a scientific lab, based on EMMOntoPy +# it should be possible to use this ontology to automatically get the right SI units for the properties of the labware +# and to automatically get the right EMMO classes for the labware +# as much as possible, the ontology should be based on EMMO, but it may be necessary to add some classes and properties +# that are not in EMMO +# as much as possible should be inferred from EMMO, but it may be necessary to add some axioms +# the ontology should be able to be used in a lab notebook, and should be able to be used to automatically generate +# a labware inventory +# the ontology should be able to be used to automatically generate a labware database -:PROJECT: LabOP - Laboratory Open Protocol language or LabOP - -* labOP labware implementation * - -:details: Main module i. - - https://en.wikipedia.org/wiki/Dimensional_analysis - -.. note:: - -.. todo:: - -________________________________________________________________________ -""" import os import pathlib @@ -75,17 +69,17 @@ def __init__(self, emmo_world=None) -> None: self.emmo.base_iri = self.emmo.base_iri.rstrip('/#') self.catalog_mappings = {self.emmo.base_iri: self.emmo_url} - # Create new ontology - self.osolw = self.emmo_world.get_ontology(self.labop_labware_base_iri) + # Create new ontology: labOP-labware - lolw + self.lolw = self.emmo_world.get_ontology(self.labop_labware_base_iri) if emmo_world is None: - self.osolw.imported_ontologies.append(self.emmo) - self.osolw.sync_python_names() + self.lolw.imported_ontologies.append(self.emmo) + self.llw.sync_python_names() + # defining the labOP-labware ontology def define_ontology(self): logging.debug('defining labware ontology') - with self.osolw: - + with self.lolw: # Terminology Component (TBox) # Basic Relations @@ -101,163 +95,18 @@ class isTypeOf(self.lolw.hasConvention): # Physical Properties # ==================== + # Length + class Length(self.emmo.Length): """"Labware total length """ physicalDimension = pl("T+1 L0 M0 I0 Θ0 N0 J0") wikipediaEntry = en("https://en.wikipedia.org/wiki/Length") - # reference SI unit - self.emmo.hasReferenceUnit = self.emmo.metre - - - - class Width(self.emmo.Length): - """Labware total width """ - physicalDimension = pl("T+1 L0 M0 I0 Θ0 N0 J0") - wikipediaEntry = en("https://en.wikipedia.org/wiki/Width") - - # reference SI unit - self.emmo.hasReferenceUnit = self.emmo.metre - - - class Height(self.emmo.Length): - """Labware total hight, without any additions, like lids etc. """ - physicalDimension = pl("T+1 L0 M0 I0 Θ0 N0 J0") - - # reference SI unit - self.emmo.hasReferenceUnit = self.emmo.metre - - - - class Volume(self.emmo.Volume): - """Total Labware volume """ - physicalDimension = pl("T+1 L3 M0 I0 Θ0 N0 J0") - - - class HightLidded(self.emmo.Length): - """Labware total hight, with additions, like lids etc.""" - physicalDimension = pl("T+1 L0 M0 I0 Θ0 N0 J0") - - class HightStacked(self.emmo.Length): - """Labware stacking height without any additions, like lids.""" - physicalDimension = pl("T+1 L0 M0 I0 Θ0 N0 J0") - - class HightStackedLidded(self.emmo.Length): - """Labware stacking height with additions, like lids.""" - physicalDimension = pl("T+1 L0 M0 I0 Θ0 N0 J0") - - - - # Torque - # ====== - class Torque(self.emmo.Torque): - """Torque of a labware, e.g. for screw caps""" - # add quantity - physicalDimension = pl("T+1 L2 M1 I0 Θ0 N0 J0") - wikipediaEntry = en("https://en.wikipedia.org/wiki/Torque") - - - # dimension - # reference SI unit - - - class Material(self.emmo.Material): - """polymer, properties, like solvent tolerance, transperancy, ....""" - - class Color(self.emmo.Color): - """Labware color""" - - class Liddable(self.emmo.Boolean): - """container is liddable""" - - class Sealable(self.emmo.Boolean): - """container is sealable""" + # associate the related SI unit + - # multiwell labware - - class NumRows(self.emmo.Integer): - """Number of rows of container""" - - class NumCols(self.emmo.Integer) : - """Number of columns of container""" - class NumWells(self.emmo.Integer): - """Number of wells - could be auto generated""" - - class WellDistRow(self.emmo.Length): - """wWll-to-well distance in row direction""" - - class WellDistCol(sef.emmo.Length): - """"Well-to-well distance in column direction""" - - # Well properties of labware with wells - class DepthWell(self.emmo.Length): - """Well total well depth=hight""" - - - class ShapeWell: - """Well overall / top well shape,e.g. round, square, buffeled,...""" - - class ShapeWellBottom: - """Well, bottom shape, flat, round, conical-""" - - class TopRadiusXY(self.emmo.Length): - """Well radius of a round well at the top opening in x-y plane.""" - - class BottomRadiusXY(self.emmo.Length): - """Radius of a round bottom in xy plane / direction.""" - - class BottomRadiusZ(self.emmo.Length): - """Radius of a round bottom in z (hight) direction.""" - - class ConeAngle(self.emmo.Angle): - """Opening angle of cone in deg.""" - - class ConeDepth: - """Depth of cone from beginning of conical shape.""" - - class ShapePolygonXY: - """Generalized shape polygon for more complex well shapes, in xy plane / direction.""" - - class ShapePolygonZ: - """Generalized shape polygon for more complex well shapes, in z direction = rotation axis.""" - - class ShapeModel2D: - """2D model of Well shape""" - - class ShapeModel3D: - """3D model of Well shape""" - - # Production Properties / Metadata - class Manufacturer: - """Name of the Manufacturer """ - - class ProductType: - """Labware product Type""" - - class ModelNumber: - """Labware model number""" - - class ProductNumber: - """Manufacturer Product Number of the Labware""" - - # class Description: - # """Labware description. Possible applications/purpose for this labware could be also added here.""" - - - # Relations - # =========== - - # Measurement Classes - # ==================== - - # Basic ------ - - class Labware(self.osolw.Device): - """Labware is a utility device that all experiments are done with and which is not actively measuring. Examples: a container, a pipette tip, a reactor, ... """ - #is_a = [self.osom.hasProperty.some(self.osom.Time)] - # query for SI unit of a property diff --git a/labop_labware/labware_tbox_old.py b/labop_labware/labware_tbox_old.py new file mode 100644 index 0000000..1adc05d --- /dev/null +++ b/labop_labware/labware_tbox_old.py @@ -0,0 +1,263 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +"""_____________________________________________________________________ + +:PROJECT: LabOP - Laboratory Open Protocol language or LabOP + +* labOP labware implementation * + +:details: Main module i. + + https://en.wikipedia.org/wiki/Dimensional_analysis + +.. note:: - +.. todo:: - +________________________________________________________________________ +""" + +import os +import pathlib +import logging + +from ontopy import World +from ontopy.utils import write_catalog + +import owlready2 + +from labop_labware.__init__ import __version__ # Version of this ontology + + +# --- helper functions + +def en(s): + """Returns `s` as an English location string.""" + return owlready2.locstr(s, lang='en') + + +def pl(s): + """Returns `s` as a plain literal string.""" + return owlready2.locstr(s, lang='') + + +class labop_Labware: + def __init__(self, emmo_world=None) -> None: + + self.labop_labware_base_iri = 'http://www.oso.org/oso/labware#' + self.labop_labware_version_iri = f'http://www.oso.org/{__version__}/oso/labware' + + output_filename_base = os.path.join('labop_labware') + self.labop_labware_owl_filename = f'{output_filename_base}-v{__version__}.owl' + self.labop_labware_ttl_filename = f'{output_filename_base}-v{__version__}.ttl' + + # Load crystallography, which imports emmo + # alternative url "https://raw.githubusercontent.com/emmo-repo/EMMO/master/self.emmo.ttl" + + self.emmo_url = ( + 'https://raw.githubusercontent.com/emmo-repo/emmo-repo.github.io/' + 'master/versions/1.0.0-beta/emmo-inferred-chemistry2.ttl') + + self.emmo_url_local = os.path.join(pathlib.Path( + __file__).parent.resolve(), "emmo", "emmo-inferred-chemistry2") + + if os.path.isfile(self.emmo_url_local + '.ttl'): + self.emmo_url = self.emmo_url_local + + #self.emmo_world = World(filename="emmo_labwares.sqlite3") + if emmo_world is not None: + self.emmo_world = emmo_world + else: + self.emmo_world = World() + # self.emmo_world.onto_path.append("../emmo") + + self.emmo = self.emmo_world.get_ontology(self.emmo_url) + self.emmo.load() # reload_if_newer = True + self.emmo.sync_python_names() # Syncronize annotations + self.emmo.base_iri = self.emmo.base_iri.rstrip('/#') + self.catalog_mappings = {self.emmo.base_iri: self.emmo_url} + + # Create new ontology + self.osolw = self.emmo_world.get_ontology(self.labop_labware_base_iri) + if emmo_world is None: + self.osolw.imported_ontologies.append(self.emmo) + self.osolw.sync_python_names() + + def define_ontology(self): + logging.debug('defining labware ontology') + + with self.osolw: + + # Terminology Component (TBox) + + # Basic Relations + # ================ + + class hasType(self.lolw.hasConvention): + """Associates a type (string, number...) to a property.""" + + class isTypeOf(self.lolw.hasConvention): + """Associates a property to a type (string, number...).""" + inverse_property = hasType + + # Physical Properties + # ==================== + + class Length(self.emmo.Length): + """"Labware total length """ + physicalDimension = pl("T+1 L0 M0 I0 Θ0 N0 J0") + wikipediaEntry = en("https://en.wikipedia.org/wiki/Length") + + # reference SI unit + self.emmo.hasReferenceUnit = self.emmo.metre + + + + class Width(self.emmo.Length): + """Labware total width, in case of a round container, the width is the diameter.""" + physicalDimension = pl("T+1 L0 M0 I0 Θ0 N0 J0") + wikipediaEntry = en("https://en.wikipedia.org/wiki/Width") + + # reference SI unit + self.emmo.hasReferenceUnit = self.emmo.metre + + + class Height(self.emmo.Length): + """Labware total hight, without any additions, like lids etc. """ + physicalDimension = pl("T+1 L0 M0 I0 Θ0 N0 J0") + + # reference SI unit + self.emmo.hasReferenceUnit = self.emmo.metre + + + + class Volume(self.emmo.Volume): + """Total Labware volume """ + physicalDimension = pl("T+1 L3 M0 I0 Θ0 N0 J0") + + + class HightLidded(self.emmo.Length): + """Labware total hight, with additions, like lids etc.""" + physicalDimension = pl("T+1 L0 M0 I0 Θ0 N0 J0") + + class HightStacked(self.emmo.Length): + """Labware stacking height without any additions, like lids.""" + physicalDimension = pl("T+1 L0 M0 I0 Θ0 N0 J0") + + class HightStackedLidded(self.emmo.Length): + """Labware stacking height with additions, like lids.""" + physicalDimension = pl("T+1 L0 M0 I0 Θ0 N0 J0") + + + + # Torque + # ====== + class Torque(self.emmo.Torque): + """Torque of a labware, e.g. for screw caps""" + # add quantity + physicalDimension = pl("T+1 L2 M1 I0 Θ0 N0 J0") + wikipediaEntry = en("https://en.wikipedia.org/wiki/Torque") + + + # dimension + # reference SI unit + + + class Material(self.emmo.Material): + """polymer, properties, like solvent tolerance, transperancy, ....""" + + class Color(self.emmo.Color): + """Labware color""" + + class Liddable(self.emmo.Boolean): + """container is liddable""" + + class Sealable(self.emmo.Boolean): + """container is sealable""" + + # multiwell labware + + class NumRows(self.emmo.Integer): + """Number of rows of container""" + + class NumCols(self.emmo.Integer) : + """Number of columns of container""" + + class NumWells(self.emmo.Integer): + """Number of wells - could be auto generated""" + + class WellDistRow(self.emmo.Length): + """wWll-to-well distance in row direction""" + + class WellDistCol(sef.emmo.Length): + """"Well-to-well distance in column direction""" + + # Well properties of labware with wells + class DepthWell(self.emmo.Length): + """Well total well depth=hight""" + + + class ShapeWell: + """Well overall / top well shape,e.g. round, square, buffeled,...""" + + class ShapeWellBottom: + """Well, bottom shape, flat, round, conical-""" + + class TopRadiusXY(self.emmo.Length): + """Well radius of a round well at the top opening in x-y plane.""" + + class BottomRadiusXY(self.emmo.Length): + """Radius of a round bottom in xy plane / direction.""" + + class BottomRadiusZ(self.emmo.Length): + """Radius of a round bottom in z (hight) direction.""" + + class ConeAngle(self.emmo.Angle): + """Opening angle of cone in deg.""" + + class ConeDepth: + """Depth of cone from beginning of conical shape.""" + + class ShapePolygonXY: + """Generalized shape polygon for more complex well shapes, in xy plane / direction.""" + + class ShapePolygonZ: + """Generalized shape polygon for more complex well shapes, in z direction = rotation axis.""" + + class ShapeModel2D: + """2D model of Well shape""" + + class ShapeModel3D: + """3D model of Well shape""" + + # Production Properties / Metadata + class Manufacturer: + """Name of the Manufacturer """ + + class ProductType: + """Labware product Type""" + + class ModelNumber: + """Labware model number""" + + class ProductNumber: + """Manufacturer Product Number of the Labware""" + + # class Description: + # """Labware description. Possible applications/purpose for this labware could be also added here.""" + + + # Relations + # =========== + + # Measurement Classes + # ==================== + + # Basic ------ + + class Labware(self.osolw.Device): + """Labware is a utility device that all experiments are done with and which is not actively measuring. Examples: a container, a pipette tip, a reactor, ... """ + + #is_a = [self.osom.hasProperty.some(self.osom.Time)] + + + # query for SI unit of a property + diff --git a/notebooks/labop_labware_dev.ipynb b/notebooks/labop_labware_dev.ipynb index 1302ec1..1395b73 100644 --- a/notebooks/labop_labware_dev.ipynb +++ b/notebooks/labop_labware_dev.ipynb @@ -37,17 +37,9 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "* Owlready2 * Warning: optimized Cython parser module 'owlready2_optimized' is not available, defaulting to slower Python implementation\n" - ] - } - ], + "outputs": [], "source": [ "# currently only reflib 4.2.1 is supported\n", "#! pip install rdflib==4.2.1\n", @@ -85,7 +77,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -168,7 +160,7 @@ " \n", "\n", " class Width(emmo.Length):\n", - " \"\"\"Labware total width, \"\"\"\n", + " \"\"\"Labware total width, in case of a round container, the width is the diameter.\"\"\"\n", " physicalDimension = pl(\"T+1 L0 M0 I0 Θ0 N0 J0\")\n", "\n", " # reference SI unit\n", @@ -327,6 +319,15 @@ " class hasHeight(Labware >> float, FunctionalProperty):\n", " \"\"\"Labware total hight, without any additions, like lids etc. \"\"\"\n", "\n", + " class hasGrippingHeight(Labware >> float, FunctionalProperty):\n", + " \"\"\"Labware total hight, without any additions, like lids etc. \"\"\"\n", + "\n", + " class hasGrippingHeightLidding(Labware >> float, FunctionalProperty):\n", + " \"\"\"Labware total hight, without any additions, like lids etc. \"\"\"\n", + " \n", + " class hasGrippingHeightWithLid(Labware >> float, FunctionalProperty):\n", + " \"\"\"Labware total hight, without any additions, like lids etc. \"\"\"\n", + "\n", " class hasRadiusXY(Labware >> float, FunctionalProperty):\n", " \"\"\"Labware radius of a round shape in XY direction \"\"\"\n", "\n", @@ -691,6 +692,31 @@ "results" ] }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Competency questions" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# provide width, length, height of a plate instance \n", + "\n", + "# in which unit is the width, length, height defined?\n", + "\n", + "# how to get the unit?\n", + "\n", + "# which force is required to open the lid of a screw cap vial ?\n", + "\n", + "# is a certain plat" + ] + }, { "attachments": {}, "cell_type": "markdown", @@ -784,9 +810,9 @@ ], "metadata": { "kernelspec": { - "display_name": "lara", + "display_name": "Python 3", "language": "python", - "name": "lara" + "name": "python3" }, "language_info": { "codemirror_mode": { @@ -798,7 +824,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.6" + "version": "3.10.6 (main, Nov 14 2022, 16:10:14) [GCC 11.3.0]" }, "orig_nbformat": 4, "vscode": { From 3fdf871546cebef3a606dd4e0f2f8c73c119e1d1 Mon Sep 17 00:00:00 2001 From: mark doerr Date: Thu, 26 Jan 2023 19:54:14 +0100 Subject: [PATCH 05/11] feat: more labware properties added --- notebooks/labop_labware_dev.ipynb | 216 ++++++++++++++++++++++-------- 1 file changed, 162 insertions(+), 54 deletions(-) diff --git a/notebooks/labop_labware_dev.ipynb b/notebooks/labop_labware_dev.ipynb index 1395b73..8aaf51e 100644 --- a/notebooks/labop_labware_dev.ipynb +++ b/notebooks/labop_labware_dev.ipynb @@ -35,9 +35,26 @@ " - copying code to LapOP repository (best in a new project)" ] }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## open questions\n", + "\n", + "* tolerances ?\n", + "* shape representation ? STL file ?\n", + "* first interaction position (e.g. for a tube rack, which position is the first one) ? Vector ?\n", + "* Width vs. diameter (e.g. for a tube, which one is the diameter ?)\n", + "* granularity of the materials (e.g. for a tube rack, which material is the rack made of) - reference to other ontologies?\n", + "* how to handle the \"has part\" relation (e.g. for a tube rack, which has tubes as parts)\n", + "* how to handle versioning of the ontology ?\n", + "* color representation (e.g. for a tube rack, which color is the rack) - RGB, HEX, CMYK, ... ?" + ] + }, { "cell_type": "code", - "execution_count": null, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ @@ -53,7 +70,7 @@ "from ontopy.utils import write_catalog\n", "\n", "import owlready2\n", - "from owlready2 import DatatypeProperty, FunctionalProperty\n", + "from owlready2 import DatatypeProperty, FunctionalProperty, ObjectProperty\n", "\n", "# --- helper functions\n", "\n", @@ -77,7 +94,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 14, "metadata": {}, "outputs": [], "source": [ @@ -127,7 +144,7 @@ " self.lolw = self.emmo_world.get_ontology(self.labop_labware_base_iri)\n", " if emmo_world is None:\n", " self.lolw.imported_ontologies.append(self.emmo)\n", - " self.llw.sync_python_names()\n", + " self.lolw.sync_python_names()\n", "\n", " # defining the labOP-labware ontology\n", " def define_ontology(self):\n", @@ -150,7 +167,7 @@ " # Physical Properties\n", " # ====================\n", "\n", - " class Length(emmo.Length):\n", + " class Length(self.emmo.Length):\n", " \"\"\"\"Labware total length \"\"\"\n", " physicalDimension = pl(\"T+1 L0 M0 I0 Θ0 N0 J0\")\n", " wikipediaEntry = en(\"https://en.wikipedia.org/wiki/Length\")\n", @@ -159,41 +176,43 @@ "\n", " \n", "\n", - " class Width(emmo.Length):\n", + " class Width(self.emmo.Length):\n", " \"\"\"Labware total width, in case of a round container, the width is the diameter.\"\"\"\n", " physicalDimension = pl(\"T+1 L0 M0 I0 Θ0 N0 J0\")\n", "\n", " # reference SI unit\n", "\n", "\n", - "\n", - " class Height(emmo.Length):\n", + " class Height(self.emmo.Length):\n", " \"\"\"Labware total hight, without any additions, like lids etc. \"\"\"\n", " physicalDimension = pl(\"T+1 L0 M0 I0 Θ0 N0 J0\")\n", "\n", "\n", - " class Volume(emmo.Volume):\n", + " class Volume(self.emmo.Volume):\n", " \"\"\"Total Labware volume \"\"\"\n", " physicalDimension = pl(\"T+1 L3 M0 I0 Θ0 N0 J0\")\n", "\n", "\n", - " class HightLidded(emmo.Length):\n", + " class HightLidded(self.emmo.Length):\n", " \"\"\"Labware total hight, with additions, like lids etc.\"\"\"\n", " physicalDimension = pl(\"T+1 L0 M0 I0 Θ0 N0 J0\")\n", "\n", - " class HightStacked(emmo.Length):\n", + " class HightStacked(self.emmo.Length):\n", " \"\"\"Labware stacking height without any additions, like lids.\"\"\"\n", " physicalDimension = pl(\"T+1 L0 M0 I0 Θ0 N0 J0\")\n", "\n", - " class HightStackedLidded(emmo.Length):\n", + " class HightStackedLidded(self.emmo.Length):\n", " \"\"\"Labware stacking height with additions, like lids.\"\"\"\n", " physicalDimension = pl(\"T+1 L0 M0 I0 Θ0 N0 J0\")\n", "\n", + " class CornerRadius(self.emmo.Length):\n", + " \"\"\"Corner radius of a labware, e.g. corner radius of a multi-well plate.\"\"\"\n", + " physicalDimension = pl(\"T+1 L0 M0 I0 Θ0 N0 J0\")\n", "\n", "\n", " # Torque\n", " # ======\n", - " class Torque(emmo.Torque):\n", + " class Torque(self.emmo.Torque):\n", " \"\"\"Torque of a labware, e.g. for screw caps\"\"\" \n", " # add quantity\n", " physicalDimension = pl(\"T+1 L2 M1 I0 Θ0 N0 J0\")\n", @@ -215,28 +234,27 @@ " wikipediaEntry = en(\"https://en.wikipedia.org/wiki/3D_modeling\")\n", "\n", " \n", - " class Color:\n", - " \"\"\"Labware color\"\"\"\n", + " class ColorRGB:\n", + " \"\"\"Labware color, e.g. RGB value\"\"\"\n", + " wikipediaEntry = en(\"https://en.wikipedia.org/wiki/Color\")\n", "\n", - " class Liddable:\n", - " \"\"\"container is liddable\"\"\"\n", - "\n", - " class Sealable:\n", - " \"\"\"container is sealable\"\"\"\n", "\n", " # multiwell labware\n", "\n", - " class WellVolume:\n", + " \n", + " class WellVolume(self.emmo.Volume):\n", " \"\"\"Total Labware volume \"\"\"\n", "\n", - " class WellDistRow:\n", + " class WellDistRow(self.emmo.Length):\n", " \"\"\"wWll-to-well distance in row direction\"\"\"\n", " \n", - " class WellDistCol:\n", + " class WellDistCol(self.emmo.Length):\n", " \"\"\"\"Well-to-well distance in column direction\"\"\"\n", "\n", + " \n", + "\n", " # Well properties of labware with wells\n", - " class DepthWell:\n", + " class DepthWell(self.emmo.Length):\n", " \"\"\"Well total well depth=hight\"\"\"\n", " \n", " class ShapeWell:\n", @@ -245,19 +263,19 @@ " class ShapeWellBottom:\n", " \"\"\"Well, bottom shape, flat, round, conical-\"\"\"\n", "\n", - " class TopRadiusXY:\n", + " class TopRadiusXY(self.emmo.Length):\n", " \"\"\"Well radius of a round well at the top opening in x-y plane.\"\"\"\n", "\n", - " class BottomRadiusXY:\n", + " class BottomRadiusXY(self.emmo.Length):\n", " \"\"\"Radius of a round bottom in xy plane / direction.\"\"\"\n", "\n", - " class BottomRadiusZ:\n", + " class BottomRadiusZ(self.emmo.Length):\n", " \"\"\"Radius of a round bottom in z (hight) direction.\"\"\"\n", "\n", - " class ConeAngle:\n", + " class ConeAngle(self.emmo.Angle):\n", " \"\"\"Opening angle of cone in deg.\"\"\"\n", "\n", - " class ConeDepth:\n", + " class ConeDepth(self.emmo.Length):\n", " \"\"\"Depth of cone from beginning of conical shape.\"\"\"\n", "\n", " class ShapePolygonXY:\n", @@ -272,6 +290,10 @@ " class ShapeModel3D:\n", " \"\"\"3D model of Well shape\"\"\"\n", "\n", + " class FirstInteractionPosition(self.emmo.Vector):\n", + " \"\"\"Position of first interaction point of a pipette tip with a well or a needle with a septum, rel. to the upper left corner of the labware. - what about round labware?\"\"\"\n", + "\n", + "\n", "\n", " # class Description:\n", " # \"\"\"Labware description. Possible applications/purpose for this labware could be also added here.\"\"\"\n", @@ -312,13 +334,23 @@ "\n", " # class hasHeight(Labware >> self.lolw.Height, FunctionalProperty):\n", " # \"\"\"Labware total hight, without any additions, like lids etc. \"\"\"\n", + "\n", + " class hasLengthTolerance(Labware >> self.emmo.Length, FunctionalProperty, ObjectProperty):\n", + " \"\"\"Labware length tolerance.\"\"\"\n", + "\n", " \n", - " class hasWidth(Labware >> float, FunctionalProperty):\n", + " class hasWidth(Labware >> self.lolw.Width, FunctionalProperty, ObjectProperty):\n", " \"\"\"Labware total width, \"\"\"\n", " \n", - " class hasHeight(Labware >> float, FunctionalProperty):\n", + " class hasWidthTolerance(Labware >> self.emmo.Length, FunctionalProperty, ObjectProperty):\n", + " \"\"\"Labware width tolerance.\"\"\"\n", + " \n", + " class hasHeight(Labware >> self.lolw.Height, FunctionalProperty, ObjectProperty):\n", " \"\"\"Labware total hight, without any additions, like lids etc. \"\"\"\n", "\n", + " class hasHeightTolerance(Labware >> self.emmo.Length, FunctionalProperty, ObjectProperty):\n", + " \"\"\"Labware height tolerance.\"\"\"\n", + "\n", " class hasGrippingHeight(Labware >> float, FunctionalProperty):\n", " \"\"\"Labware total hight, without any additions, like lids etc. \"\"\"\n", "\n", @@ -349,6 +381,9 @@ " class hasMass(Labware >> float, FunctionalProperty):\n", " \"\"\"Mass of the Labware \"\"\"\n", "\n", + " class hasMaxSheerForce(Labware >> self.emmo.Force, FunctionalProperty):\n", + " \"\"\"Max sheer force of the Labware, e.g. during centrifugation\"\"\"\n", + "\n", " class hasCoatingMaterial(Labware >> str, FunctionalProperty):\n", " \"\"\"Labware coating material\"\"\"\n", "\n", @@ -365,9 +400,19 @@ " class isSealable(Labware >> bool, FunctionalProperty):\n", " \"\"\"container is sealable\"\"\"\n", "\n", + " class hasSetptum(Labware >> bool, FunctionalProperty):\n", + " \"\"\"Setptum of the Labware\"\"\"\n", + "\n", " class hasMaterial(Labware >> str, DatatypeProperty):\n", " \"\"\"Polymer, properties, like solvent tolerance, transparency, ....\"\"\"\n", "\n", + " class hasSeptumMaterial(Labware >> str, FunctionalProperty):\n", + " \"\"\"Septum material\"\"\"\n", + "\n", + " class hasSeptumPenetrationForce(Labware >> self.emmo.Force, FunctionalProperty):\n", + " \"\"\"Septum penetration force\"\"\"\n", + "\n", + "\n", " # multiwell labware\n", "\n", " class hasNumCols(Labware >> int, FunctionalProperty):\n", @@ -458,14 +503,48 @@ "\n", " # lengthAtEdge, lengthOverall, isSLAS1-2004complian\n", "\n", + " # isSLAS1-2004compliant\n", + "\n", + " # all disjoined classes\n", + "\n", + " # all disjoined properties\n", + " \n", + "\n", " \n" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 15, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "[labware.Length,\n", + " labware.Width,\n", + " labware.Height,\n", + " labware.Volume,\n", + " labware.HightLidded,\n", + " labware.HightStacked,\n", + " labware.HightStackedLidded,\n", + " labware.Torque,\n", + " labware.WellVolume,\n", + " labware.WellDistRow,\n", + " labware.WellDistCol,\n", + " labware.DepthWell,\n", + " labware.TopRadiusXY,\n", + " labware.BottomRadiusXY,\n", + " labware.BottomRadiusZ,\n", + " labware.FirstInteractionPosition,\n", + " labware.Labware]" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "lw = labop_Labware()\n", "lw.define_ontology()\n", @@ -491,9 +570,32 @@ " greiner_384_v = lw.lolw.Labware(\"Greiner_384_V\", \n", " hasNumRows=16, \n", " hasNumCols=24, \n", - " hasNumWells=384 )" + " hasNumWells=384 )\n", + "\n", + " plate_1536_well = lw.lolw.Labware(\"Plate1536Well\", hasNumRows=32, hasNumCols=48, hasNumWells=1536)\n", + "\n", + " plate_384_well = lw.lolw.Labware(\"Plate384Well\", hasNumRows=16, hasNumCols=24, hasNumWells=384)\n", + "\n", + " plate_96_well = lw.lolw.Labware(\"Plate96Well\", hasNumRows=8, hasNumCols=12, hasNumWells=96)\n", + "\n", + " # slas_1_2004 = lw.lolw.Labware(\"SLAS_1_2004\", hasNumRows=8, hasNumCols=12, hasNumWells=96) \n", + "\n", + " # SLAS-2-2004-4\n", + "\n", + " # SLAS-2-2004-4-1\n", + "\n", + " # SLAS-2-2004-4-2\n", + "\n", + " # SLAS-4-2004\n" ] }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, { "cell_type": "code", "execution_count": null, @@ -571,7 +673,30 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### exporting ontology as ttl file" + "## Competency questions to be answered by the ontology" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# provide width, length, height of a plate instance \n", + "\n", + "# in which unit is the width, length, height defined?\n", + "\n", + "\n", + "# which force is required to open the lid of a screw cap vial ?\n", + "\n", + "# is a certain plate of type \"SLAS1-2004compliant\" ?\n", + "\n", + "# Where can I punch the septum of a screw cap vial / GC- / HPLC vial ?\n", + "\n", + "# What is the max. volume of a well of a multiwell plate ?\n", + "\n", + "# at with height can a robot grab a microtiterplate with a lid ?\n", + "\n" ] }, { @@ -697,24 +822,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Competency questions" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# provide width, length, height of a plate instance \n", - "\n", - "# in which unit is the width, length, height defined?\n", - "\n", - "# how to get the unit?\n", - "\n", - "# which force is required to open the lid of a screw cap vial ?\n", - "\n", - "# is a certain plat" + "## saving ontology as ttl file" ] }, { @@ -722,7 +830,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## saving ontology as ttl file" + "### exporting ontology as ttl file" ] }, { From 0af6b86adb1bb09357bdb7d0232e742bf53afa84 Mon Sep 17 00:00:00 2001 From: mark doerr Date: Thu, 26 Jan 2023 19:56:02 +0100 Subject: [PATCH 06/11] fix: minor changes added --- notebooks/labop_labware_dev.ipynb | 35 ++++--------------------------- 1 file changed, 4 insertions(+), 31 deletions(-) diff --git a/notebooks/labop_labware_dev.ipynb b/notebooks/labop_labware_dev.ipynb index 8aaf51e..1e076af 100644 --- a/notebooks/labop_labware_dev.ipynb +++ b/notebooks/labop_labware_dev.ipynb @@ -54,7 +54,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -94,7 +94,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -515,36 +515,9 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[labware.Length,\n", - " labware.Width,\n", - " labware.Height,\n", - " labware.Volume,\n", - " labware.HightLidded,\n", - " labware.HightStacked,\n", - " labware.HightStackedLidded,\n", - " labware.Torque,\n", - " labware.WellVolume,\n", - " labware.WellDistRow,\n", - " labware.WellDistCol,\n", - " labware.DepthWell,\n", - " labware.TopRadiusXY,\n", - " labware.BottomRadiusXY,\n", - " labware.BottomRadiusZ,\n", - " labware.FirstInteractionPosition,\n", - " labware.Labware]" - ] - }, - "execution_count": 15, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "lw = labop_Labware()\n", "lw.define_ontology()\n", From 9ae51d5265554160ab17859d70ecc48cee66219f Mon Sep 17 00:00:00 2001 From: mark doerr Date: Thu, 26 Jan 2023 21:24:25 +0100 Subject: [PATCH 07/11] feat: points to discuss --- notebooks/labop_labware_dev.ipynb | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/notebooks/labop_labware_dev.ipynb b/notebooks/labop_labware_dev.ipynb index 1e076af..b702105 100644 --- a/notebooks/labop_labware_dev.ipynb +++ b/notebooks/labop_labware_dev.ipynb @@ -49,7 +49,13 @@ "* granularity of the materials (e.g. for a tube rack, which material is the rack made of) - reference to other ontologies?\n", "* how to handle the \"has part\" relation (e.g. for a tube rack, which has tubes as parts)\n", "* how to handle versioning of the ontology ?\n", - "* color representation (e.g. for a tube rack, which color is the rack) - RGB, HEX, CMYK, ... ?" + "* color representation (e.g. for a tube rack, which color is the rack) - RGB, HEX, CMYK, ... ?\n", + "\n", + "- surface\n", + "- adhesion (mid-binding, high-binding, ...)\n", + "- construction style - single piece, welded, ...\n", + "- liquid contact yes/no\n", + "\n" ] }, { From f74c0079810014e4a33698fd964bf9c3ff5400c0 Mon Sep 17 00:00:00 2001 From: mark doerr Date: Thu, 26 Jan 2023 21:24:48 +0100 Subject: [PATCH 08/11] feat: discussion points --- notebooks/labop_labware_dev.ipynb | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/notebooks/labop_labware_dev.ipynb b/notebooks/labop_labware_dev.ipynb index b702105..1e8e826 100644 --- a/notebooks/labop_labware_dev.ipynb +++ b/notebooks/labop_labware_dev.ipynb @@ -43,6 +43,7 @@ "## open questions\n", "\n", "* tolerances ?\n", + "-> unit conversion : owl / ttl file -> Robert\n", "* shape representation ? STL file ?\n", "* first interaction position (e.g. for a tube rack, which position is the first one) ? Vector ?\n", "* Width vs. diameter (e.g. for a tube, which one is the diameter ?)\n", @@ -51,6 +52,9 @@ "* how to handle versioning of the ontology ?\n", "* color representation (e.g. for a tube rack, which color is the rack) - RGB, HEX, CMYK, ... ?\n", "\n", + "\n", + "\n", + "- further ideas:\n", "- surface\n", "- adhesion (mid-binding, high-binding, ...)\n", "- construction style - single piece, welded, ...\n", From 8ef7b5641d9c77123bb0928061dd9900685bd83f Mon Sep 17 00:00:00 2001 From: mark doerr Date: Thu, 9 Feb 2023 19:54:14 +0100 Subject: [PATCH 09/11] fix: optimised class structure, SI unit access --- notebooks/labop_labware_dev.ipynb | 203 +++++++++++++++++++----------- 1 file changed, 129 insertions(+), 74 deletions(-) diff --git a/notebooks/labop_labware_dev.ipynb b/notebooks/labop_labware_dev.ipynb index 1e8e826..3edd53b 100644 --- a/notebooks/labop_labware_dev.ipynb +++ b/notebooks/labop_labware_dev.ipynb @@ -51,6 +51,7 @@ "* how to handle the \"has part\" relation (e.g. for a tube rack, which has tubes as parts)\n", "* how to handle versioning of the ontology ?\n", "* color representation (e.g. for a tube rack, which color is the rack) - RGB, HEX, CMYK, ... ?\n", + "* !!! disjoint\n", "\n", "\n", "\n", @@ -80,7 +81,7 @@ "from ontopy.utils import write_catalog\n", "\n", "import owlready2\n", - "from owlready2 import DatatypeProperty, FunctionalProperty, ObjectProperty\n", + "from owlready2 import DatatypeProperty, FunctionalProperty, ObjectProperty, AllDisjoint\n", "\n", "# --- helper functions\n", "\n", @@ -178,46 +179,22 @@ " # ====================\n", "\n", " class Length(self.emmo.Length):\n", - " \"\"\"\"Labware total length \"\"\"\n", + " \"\"\"\"Length\n", + " extends EMMO:Length\n", + " \"\"\"\n", " physicalDimension = pl(\"T+1 L0 M0 I0 Θ0 N0 J0\")\n", " wikipediaEntry = en(\"https://en.wikipedia.org/wiki/Length\")\n", "\n", - " # reference SI unit\n", - "\n", - " \n", - "\n", - " class Width(self.emmo.Length):\n", - " \"\"\"Labware total width, in case of a round container, the width is the diameter.\"\"\"\n", - " physicalDimension = pl(\"T+1 L0 M0 I0 Θ0 N0 J0\")\n", - "\n", - " # reference SI unit\n", - "\n", - "\n", - " class Height(self.emmo.Length):\n", - " \"\"\"Labware total hight, without any additions, like lids etc. \"\"\"\n", - " physicalDimension = pl(\"T+1 L0 M0 I0 Θ0 N0 J0\")\n", - "\n", + " # add reference SI unit\n", + " referenceUnit = self.emmo.Metre\n", "\n", " class Volume(self.emmo.Volume):\n", " \"\"\"Total Labware volume \"\"\"\n", " physicalDimension = pl(\"T+1 L3 M0 I0 Θ0 N0 J0\")\n", + " wikipediaEntry = en(\"https://en.wikipedia.org/wiki/Volume\")\n", "\n", - "\n", - " class HightLidded(self.emmo.Length):\n", - " \"\"\"Labware total hight, with additions, like lids etc.\"\"\"\n", - " physicalDimension = pl(\"T+1 L0 M0 I0 Θ0 N0 J0\")\n", - "\n", - " class HightStacked(self.emmo.Length):\n", - " \"\"\"Labware stacking height without any additions, like lids.\"\"\"\n", - " physicalDimension = pl(\"T+1 L0 M0 I0 Θ0 N0 J0\")\n", - "\n", - " class HightStackedLidded(self.emmo.Length):\n", - " \"\"\"Labware stacking height with additions, like lids.\"\"\"\n", - " physicalDimension = pl(\"T+1 L0 M0 I0 Θ0 N0 J0\")\n", - "\n", - " class CornerRadius(self.emmo.Length):\n", - " \"\"\"Corner radius of a labware, e.g. corner radius of a multi-well plate.\"\"\"\n", - " physicalDimension = pl(\"T+1 L0 M0 I0 Θ0 N0 J0\")\n", + " # add reference SI unit\n", + " referenceUnit = self.emmo.CubicMetre\n", "\n", "\n", " # Torque\n", @@ -229,10 +206,10 @@ " wikipediaEntry = en(\"https://en.wikipedia.org/wiki/Torque\")\n", "\n", "\n", - " # dimension\n", " # reference SI unit\n", + " referenceUnit = self.emmo.NewtonMetre\n", " \n", - " \n", + " AllDisjoint([Torque, Length, Volume])\n", "\n", " class Material:\n", " \"\"\"Polymer, properties, like solvent tolerance, transparency, ....\"\"\"\n", @@ -240,7 +217,7 @@ "\n", "\n", " class Model3D:\n", - " \"\"\"3D model of the labware in X format.\"\"\"\n", + " \"\"\"3D model of the labware in X format. STL ?\"\"\"\n", " wikipediaEntry = en(\"https://en.wikipedia.org/wiki/3D_modeling\")\n", "\n", " \n", @@ -248,6 +225,9 @@ " \"\"\"Labware color, e.g. RGB value\"\"\"\n", " wikipediaEntry = en(\"https://en.wikipedia.org/wiki/Color\")\n", "\n", + " \n", + " # AllDisjoint([Material, Model3D, ColorRGB])\n", + "\n", "\n", " # multiwell labware\n", "\n", @@ -261,7 +241,7 @@ " class WellDistCol(self.emmo.Length):\n", " \"\"\"\"Well-to-well distance in column direction\"\"\"\n", "\n", - " \n", + " #AllDisjoint([WellVolume, WellDistRow, WellDistCol])\n", "\n", " # Well properties of labware with wells\n", " class DepthWell(self.emmo.Length):\n", @@ -304,11 +284,9 @@ " \"\"\"Position of first interaction point of a pipette tip with a well or a needle with a septum, rel. to the upper left corner of the labware. - what about round labware?\"\"\"\n", "\n", "\n", + " #AllDisjoint([DepthWell, ShapeWell, ShapeWellBottom, TopRadiusXY, BottomRadiusXY, BottomRadiusZ, ConeAngle, ConeDepth, ShapePolygonXY, ShapePolygonZ, ShapeModel2D, ShapeModel3D, FirstInteractionPosition])\n", "\n", - " # class Description:\n", - " # \"\"\"Labware description. Possible applications/purpose for this labware could be also added here.\"\"\"\n", - " \n", - "\n", + " \n", " # Labware Classes\n", " # ====================\n", "\n", @@ -329,13 +307,13 @@ "\n", " # Physical Properties\n", "\n", - " class hasLength:\n", - " \"\"\"\"Labware total length \"\"\"\n", - " is_a = [\n", - " self.lolw.hasReferenceUnit.only(\n", - " self.lolw.hasPhysicalDimension.only(self.lolw.Length)\n", - " ),\n", - " hasType.exactly(1, self.lolw.Real), ]\n", + " #class hasLength:\n", + " # \"\"\"\"Labware total length \"\"\"\n", + " # is_a = [\n", + " # self.lolw.hasReferenceUnit.only(\n", + " # self.lolw.hasPhysicalDimension.only(self.lolw.Length)\n", + " # ),\n", + " # hasType.exactly(1, self.lolw.Real), ]\n", "\n", " # class hasWidth(FunctionalProperty):\n", " # \"\"\"Labware total width, \"\"\"\n", @@ -345,35 +323,40 @@ " # class hasHeight(Labware >> self.lolw.Height, FunctionalProperty):\n", " # \"\"\"Labware total hight, without any additions, like lids etc. \"\"\"\n", "\n", - " class hasLengthTolerance(Labware >> self.emmo.Length, FunctionalProperty, ObjectProperty):\n", - " \"\"\"Labware length tolerance.\"\"\"\n", + " # class hasLengthTolerance(Labware >> self.emmo.Length, FunctionalProperty, ObjectProperty):\n", + " # \"\"\"Labware length tolerance.\"\"\"\n", + "\n", + " class hasLength(Labware >> Length, FunctionalProperty, ObjectProperty):\n", + " \"\"\"Labware total length, without any additions, like lids etc.\"\"\"\n", "\n", + " class hasLengthTolerance(Length >> float, FunctionalProperty, DatatypeProperty):\n", + " \"\"\"Labware relative length tolerance (= measured width/target width).\"\"\"\n", " \n", - " class hasWidth(Labware >> self.lolw.Width, FunctionalProperty, ObjectProperty):\n", - " \"\"\"Labware total width, \"\"\"\n", + " class hasWidth(Labware >> Length, FunctionalProperty, ObjectProperty):\n", + " \"\"\"Labware total width, without any additions, like lids etc.\"\"\"\n", " \n", - " class hasWidthTolerance(Labware >> self.emmo.Length, FunctionalProperty, ObjectProperty):\n", - " \"\"\"Labware width tolerance.\"\"\"\n", + " class hasWidthTolerance(Length >> float, FunctionalProperty, DatatypeProperty):\n", + " \"\"\"Labware relative width tolerance (= measured width/target width).\"\"\"\n", " \n", - " class hasHeight(Labware >> self.lolw.Height, FunctionalProperty, ObjectProperty):\n", + " class hasHeight(Labware >> Length, FunctionalProperty, ObjectProperty):\n", " \"\"\"Labware total hight, without any additions, like lids etc. \"\"\"\n", "\n", - " class hasHeightTolerance(Labware >> self.emmo.Length, FunctionalProperty, ObjectProperty):\n", + " class hasHeightTolerance(Length >> float, FunctionalProperty, DatatypeProperty):\n", " \"\"\"Labware height tolerance.\"\"\"\n", "\n", - " class hasGrippingHeight(Labware >> float, FunctionalProperty):\n", + " class hasGrippingHeight(Labware >> Length, FunctionalProperty, ObjectProperty):\n", " \"\"\"Labware total hight, without any additions, like lids etc. \"\"\"\n", "\n", - " class hasGrippingHeightLidding(Labware >> float, FunctionalProperty):\n", + " class hasGrippingHeightLidding(Labware >> Length, FunctionalProperty, ObjectProperty):\n", " \"\"\"Labware total hight, without any additions, like lids etc. \"\"\"\n", " \n", - " class hasGrippingHeightWithLid(Labware >> float, FunctionalProperty):\n", + " class hasGrippingHeightWithLid(Labware >> Length, FunctionalProperty, ObjectProperty):\n", " \"\"\"Labware total hight, without any additions, like lids etc. \"\"\"\n", "\n", - " class hasRadiusXY(Labware >> float, FunctionalProperty):\n", + " class hasRadiusXY(Labware >> Length, FunctionalProperty, ObjectProperty):\n", " \"\"\"Labware radius of a round shape in XY direction \"\"\"\n", "\n", - " class hasRadiusZ(Labware >> float, FunctionalProperty):\n", + " class hasRadiusZ(Labware >> Length, FunctionalProperty, ObjectProperty):\n", " \"\"\"Labware radius of a round shape in XY direction \"\"\"\n", "\n", " class hasVolume(Labware >> float, FunctionalProperty):\n", @@ -506,18 +489,34 @@ " \"\"\"Screw cap color\"\"\"\n", "\n", " \n", - "\n", - " \n", - "\n", " # further properties:\n", "\n", " # lengthAtEdge, lengthOverall, isSLAS1-2004complian\n", "\n", " # isSLAS1-2004compliant\n", "\n", - " # all disjoined classes\n", + " \n", "\n", " # all disjoined properties\n", + "\n", + " # special labware classes\n", + " # can be used for faster type testing\n", + " # ===================================================\n", + "\n", + " class SLAS_4_2004_96_Well_Plate(Labware):\n", + " \"\"\"96 Well Microtiter Plate according to SLAS 4-2004 standard\"\"\"\n", + " equivalent_to = [ Labware & hasNumCols.value(12) & hasNumRows.value(8) & hasNumWells.value(96) \n", + " & hasWellVolume.value(100) & hasWellDistRow.value(9) & hasWellDistCol.value(9) \n", + " & hasDepthWell.value(14.5) & hasShapeWell.value(\"round\") & hasShapeWellBottom.value(\"flat\") \n", + " & hasTopRadiusXY.value(4.5) & hasBottomRadiusXY.value(4.5) & hasBottomRadiusZ.value(0) \n", + " & hasConeAngle.value(0) & hasConeDepth.value(0) & hasShapePolygonXY.value(0) \n", + " & hasShapePolygonZ.value(0) & hasShapeModel2D.value(\"circle\") & hasShapeModel3D.value(\"cylinder\") \n", + " & hasScrewCap.value(False) & hasScrewCapMaterial.value(\"N/A\") & hasScrewCapColor.value(\"N/A\") \n", + " & hasColor.value(\"#FFFFFF\") & hasMaterial.value(\"polystyrene\") & hasMass.value(0) \n", + " & hasMaxSheerForce.value(0) & hasCoatingMaterial.value(\"N/A\") & hasSetptum.value(False) \n", + " & hasSeptumMaterial.value(\"N/A\") & hasSeptumPenetrationForce.value(0) & isLiddable.value(False) & isStackable.value(True) \n", + " & isSealable.value(False) & hasManifacturer.value(\"N/A\") & isProductType.value(\"N/A\") & hasModelNumber.value(\"N/A\") & hasProductNumber.value(\"N/A\") ]\n", + " \n", " \n", "\n", " \n" @@ -550,16 +549,18 @@ "outputs": [], "source": [ "with lw.lolw:\n", - " greiner_384_v = lw.lolw.Labware(\"Greiner_384_V\", \n", + " greiner_384_v = lw.lolw.Labware(\"Greiner_384_V\",\n", + " hasLength=lw.lolw.Length(lw.emmo.hasQuantityValue.value(127.76)),\n", + " hasWidth=lw.lolw.Length(lw.emmo.hasQuantityValue.value(85.48)),\n", " hasNumRows=16, \n", " hasNumCols=24, \n", " hasNumWells=384 )\n", "\n", - " plate_1536_well = lw.lolw.Labware(\"Plate1536Well\", hasNumRows=32, hasNumCols=48, hasNumWells=1536)\n", + " #plate_1536_well = lw.lolw.Labware(\"Plate1536Well\", hasNumRows=32, hasNumCols=48, hasNumWells=1536)\n", "\n", - " plate_384_well = lw.lolw.Labware(\"Plate384Well\", hasNumRows=16, hasNumCols=24, hasNumWells=384)\n", + " #plate_384_well = lw.lolw.Labware(\"Plate384Well\", hasNumRows=16, hasNumCols=24, hasNumWells=384)\n", "\n", - " plate_96_well = lw.lolw.Labware(\"Plate96Well\", hasNumRows=8, hasNumCols=12, hasNumWells=96)\n", + " #plate_96_well = lw.lolw.Labware(\"Plate96Well\", hasNumRows=8, hasNumCols=12, hasNumWells=96)\n", "\n", " # slas_1_2004 = lw.lolw.Labware(\"SLAS_1_2004\", hasNumRows=8, hasNumCols=12, hasNumWells=96) \n", "\n", @@ -607,6 +608,60 @@ "greiner_384_v.hasNumCols, greiner_384_v.hasNumWells" ] }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "greiner_384_v.hasLength" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "greiner_384_v.hasLength.INDIRECT_hasQuantityValue" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "greiner_384_v.hasLength.referenceUnit" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "greiner_384_v.hasLength.referenceUnit.hasSymbolData" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "greiner_384_v.hasWidth" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "greiner_384_v.hasWidth, greiner_384_v.hasWidth.referenceUnit, greiner_384_v.hasWidth.referenceUnit.hasSymbolData" + ] + }, { "cell_type": "code", "execution_count": null, @@ -646,8 +701,8 @@ " hasNumRows=row['Well Count'] / row['Column Count'], \n", " hasNumCols=row['Column Count'],\n", " hasNumWells=row['Well Count'],\n", - " hasHeight=row['Height (mm)'],\n", - " hasWellVolume=row['Well Volume (ul)'],\n", + " #hasHeight=row['Height (mm)'],\n", + " #hasWellVolume=row['Well Volume (ul)'],\n", " )" ] }, @@ -901,7 +956,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "lara10", "language": "python", "name": "python3" }, @@ -915,12 +970,12 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.6 (main, Nov 14 2022, 16:10:14) [GCC 11.3.0]" + "version": "3.10.6" }, "orig_nbformat": 4, "vscode": { "interpreter": { - "hash": "916dbcbb3f70747c44a77c7bcd40155683ae19c65e1c03b4aa3499c5328201f1" + "hash": "4e9d87653db52c347ca95dcfde7039702998970d88d06a3d2a1455e0aa9e09dd" } } }, From d606dc35ebc68a00b74f78e5077ef37916811c10 Mon Sep 17 00:00:00 2001 From: mark doerr Date: Thu, 9 Feb 2023 21:10:31 +0100 Subject: [PATCH 10/11] feat: notes from workgroup discussion --- notebooks/labop_labware_dev.ipynb | 1181 ++++++++++++++++++++++++++++- 1 file changed, 1144 insertions(+), 37 deletions(-) diff --git a/notebooks/labop_labware_dev.ipynb b/notebooks/labop_labware_dev.ipynb index 3edd53b..19e50d3 100644 --- a/notebooks/labop_labware_dev.ipynb +++ b/notebooks/labop_labware_dev.ipynb @@ -44,7 +44,7 @@ "\n", "* tolerances ?\n", "-> unit conversion : owl / ttl file -> Robert\n", - "* shape representation ? STL file ?\n", + "* shape representation ? STL file ? .AMF format, is the modern alternative to .STL format \n", "* first interaction position (e.g. for a tube rack, which position is the first one) ? Vector ?\n", "* Width vs. diameter (e.g. for a tube, which one is the diameter ?)\n", "* granularity of the materials (e.g. for a tube rack, which material is the rack made of) - reference to other ontologies?\n", @@ -52,20 +52,28 @@ "* how to handle versioning of the ontology ?\n", "* color representation (e.g. for a tube rack, which color is the rack) - RGB, HEX, CMYK, ... ?\n", "* !!! disjoint\n", - "\n", - "\n", + "* reusable \n", + "* transparency\n", "\n", "- further ideas:\n", "- surface\n", "- adhesion (mid-binding, high-binding, ...)\n", "- construction style - single piece, welded, ...\n", "- liquid contact yes/no\n", - "\n" + "\n", + "Scoping:\n", + "Must-have: SLAS (“SBS”)\n", + "Likely should: flasks, tubes, tube racks, tips and tip boxes\n", + "“stuff that lives on a lot of people’s robot decks”\n", + "—-------------- (the line of inclusion) —-------------\n", + "Nice-to-have: larger reactors\n", + "Must not: custom blown glassware\n", + "“ \n" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 154, "metadata": {}, "outputs": [], "source": [ @@ -105,7 +113,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 173, "metadata": {}, "outputs": [], "source": [ @@ -196,12 +204,28 @@ " # add reference SI unit\n", " referenceUnit = self.emmo.CubicMetre\n", "\n", + " class Mass(self.emmo.Mass):\n", + " \"\"\"Total Labware mass \"\"\"\n", + " physicalDimension = pl(\"T+1 L0 M1 I0 Θ0 N0 J0\")\n", + " wikipediaEntry = en(\"https://en.wikipedia.org/wiki/Mass\")\n", + "\n", + " # add reference SI unit\n", + " referenceUnit = self.emmo.Kilogram\n", + "\n", + " class Force(self.emmo.Force):\n", + " \"\"\"Force of a labware, e.g. for screw caps\"\"\" \n", + " # add quantity“Scoping:\n", + "\n", + " physicalDimension = pl(\"T+1 L1 M1 I0 Θ0 N-2 J0\")\n", + " wikipediaEntry = en(\"https://en.wikipedia.org/wiki/Force\")\n", + "\n", + " # reference SI unit\n", + " referenceUnit = self.emmo.Newton\n", "\n", - " # Torque\n", - " # ======\n", " class Torque(self.emmo.Torque):\n", " \"\"\"Torque of a labware, e.g. for screw caps\"\"\" \n", - " # add quantity\n", + " # add quantity“Scoping:\n", + "\n", " physicalDimension = pl(\"T+1 L2 M1 I0 Θ0 N0 J0\")\n", " wikipediaEntry = en(\"https://en.wikipedia.org/wiki/Torque\")\n", "\n", @@ -230,8 +254,8 @@ "\n", "\n", " # multiwell labware\n", + " # =================\n", "\n", - " \n", " class WellVolume(self.emmo.Volume):\n", " \"\"\"Total Labware volume \"\"\"\n", "\n", @@ -296,8 +320,6 @@ " \"\"\"Labware is a utility device that all experiments are done with and which is not actively measuring. Examples: a container, a pipette tip, a reactor, ... \"\"\"\n", " wikipediaEntry = en(\"https://en.wikipedia.org/wiki/Labware\")\n", "\n", - "\n", - "\n", " # is_a = [self.lolw.has_Material.some(str),\n", " # self.lolw.has_NumCols.some(int),\n", " # self.lolw.has_NumRows.some(int)]\n", @@ -524,9 +546,34 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 174, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "[labware.Length,\n", + " labware.Volume,\n", + " labware.Torque,\n", + " labware.WellVolume,\n", + " labware.WellDistRow,\n", + " labware.WellDistCol,\n", + " labware.DepthWell,\n", + " labware.TopRadiusXY,\n", + " labware.BottomRadiusXY,\n", + " labware.BottomRadiusZ,\n", + " labware.ConeAngle,\n", + " labware.ConeDepth,\n", + " labware.FirstInteractionPosition,\n", + " labware.Labware,\n", + " labware.SLAS_4_2004_96_Well_Plate]" + ] + }, + "execution_count": 174, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "lw = labop_Labware()\n", "lw.define_ontology()\n", @@ -544,7 +591,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 175, "metadata": {}, "outputs": [], "source": [ @@ -582,9 +629,20 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 176, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "[labware.Labware]" + ] + }, + "execution_count": 176, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "\n", "greiner_384_v.is_a\n" @@ -592,81 +650,939 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 177, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "labware.Labware" + ] + }, + "execution_count": 177, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "type(greiner_384_v)" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 178, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "(24, 384)" + ] + }, + "execution_count": 178, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "greiner_384_v.hasNumCols, greiner_384_v.hasNumWells" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 179, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "labware.emmo.hasQuantityValue.value(127.76)" + ] + }, + "execution_count": 179, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "greiner_384_v.hasLength" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 180, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "[emmo.Numerical]" + ] + }, + "execution_count": 180, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "greiner_384_v.hasLength.INDIRECT_hasQuantityValue" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 181, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "emmo.Metre" + ] + }, + "execution_count": 181, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "greiner_384_v.hasLength.referenceUnit" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 182, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "'m'" + ] + }, + "execution_count": 182, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "greiner_384_v.hasLength.referenceUnit.hasSymbolData" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 186, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "labware.emmo.hasQuantityValue.value(85.48)" + ] + }, + "execution_count": 186, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "greiner_384_v.hasWidth" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 184, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "(labware.emmo.hasQuantityValue.value(85.48), emmo.Metre, 'm')" + ] + }, + "execution_count": 184, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "greiner_384_v.hasWidth, greiner_384_v.hasWidth.referenceUnit, greiner_384_v.hasWidth.referenceUnit.hasSymbolData" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 167, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "/mnt/data/userdata/mark/source/projects/science/labOP/labware-ontology/notebooks\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
indexIdVendorCatalog NumberNameRetired AtWell CountWell Depth (mm)Height (mm)Well Volume (ul)Column CountCapabilitiesAcceptable LidsSale Price
00384-pcrEppendorf951020539384-Well twin.tec PCR Plate-3849.6010.640.024bluewash, dispense-destination, echo_dest, env...ultra-clear, foil*$9.35*
1196-10-spot-vplex-m-pro-inflamm1-MSDMesoscaleK15048G96-well 10-spot v-plex mouse pro-inflammatory ...-9611.6814.35410.012bluewash, cover, deseal, dispense-destination,...low_evaporation, standard, universal, ultra-clear*$0.00*
22single-vbottom-microwellunknownunknownSingle-V-Bottom Microwell-110.5014.7400.01agitate, evaporate, image, incubate, lcms, liq...universal*$1.19*
33conical-50Greiner22727050mL Conical-10.00-50000.01cover, dispense-source, incubate, provision, s...screw-cap*$1.07*
44384-flat-white-white-nbsCorning3574384-Well Low Flange White FlatBottom Polystyre...-38411.4314.3580.024cover, deseal, dispense-destination, echo_dest...universal, standard, ultra-clear, foil*$11.80*
55384-flat-white-white-optiplatePerkinElmer6007290384-Well White Opaque Microplate-38410.4514.4105.024bluewash, cover, dispense-destination, echo_de...universal, ultra-clear, foil*$8.28*
6696-v-kfFisher22-387-03096-well KingFisher PCR microplate-9612.9014.5200.012cover, dispense-destination, envision, image_p...standard*$6.31*
77chemspeed-96-sealed-pin-rackChemspeedunknownChemspeed 96 Pin Rack-9636.00369000.012NaNNaN*$0.00*
88384-echoLabcytePP-0200384-Well Echo Qualified Polypropylene Micropla...-38411.5014.4135.024dispense-destination, echo_dest, echo_source, ...universal, foil, ultra-clear*$7.35*
9996-flat-clear-costar-3590Costar359096-well EIA/RIA Clear Flat Bottom Polystyrene ...-9610.6714.22360.012absorbance, bluewash, cover, deseal, dispense,...universal, standard, ultra-clear, foil, low_ev...*$0.00*
101096-flat-uvCorning363596-Well Clear Flat Bottom UV-Transparent Micro...-9610.6714.22340.012absorbance, dispense-destination, envision, fl...low_evaporation, standard, universal*$16.78*
1111bottle-250not_applicablenot_applicable250mL Bottle-10.00-250000.01cover, dispense-source, incubate, provision, s...screw-cap*$1.01*
1212nmr-tube-5mmunknownunknownNuclear Magnetic Resonance Tube 5mm OD-1103.50117.2600.01cover, dispense, liquid_handle, provision, unc...screw-cap*$0.00*
1313res-sw96-hpAxygenres-sw96-hp1-Well Reagent Reservoir with 96-Bottom Trough...-138.6043.92280000.01cover, dispense-destination, dispense-source, ...universal*$8.35*
141496-flat-white-dcThermoFisher136101Nunc MicroWell 96-Well, Nunclon Delta-Treated,...-9611.2014.6320.012absorbance, cover, dispense-destination, fluor...low_evaporation, standard, universal, ultra-cl...*$0.00*
151596-4-spot-mMIP3a-MSDMesoscaleK152MSD96-well 4-spot mouse MIP3a MSD plate-9611.6814.35410.012bluewash, cover, deseal, dispense-destination,...low_evaporation, standard, universal, ultra-clear*$0.00*
1616384-flat-white-white-lvCorning3824384-Well Low Volume White Flat Bottom Polystyr...-3849.3912.1940.024absorbance, cover, dispense-destination, echo_...standard, universal*$15.70*
171796-10-spot-uplex-MSDMesoscaleK15069L96-well 10-spot u-plex MSD plate-9611.6814.35410.012bluewash, cover, deseal, dispense-destination,...low_evaporation, standard, universal, ultra-clear*$0.00*
1818pcr-0.5USA Scientific1405-81000.5mL PCR tube2/27/201810.00-500.01thermocycleNaN*$0.00*
191996-flatCorning363296-Well White with Clear Flat Bottom Polystyre...-9610.6714.22340.012absorbance, bluewash, dispense-destination, ec...low_evaporation, standard, universal*$9.56*
202096-flat-black-black-fluotrac-600Greiner65507796-Well F-Bottom Black Fluotrac High-Binding M...-9610.9014.22340.012absorbance, bluewash, cover, deseal, dispense-...low_evaporation, standard, universal, ultra-clear*$2.46*
2121vendor-tubenot_applicablenot_applicableVendor tube-10.00-999999999.01NaNscrew-cap*$0.00*
2222conical-15Greiner18826115mL Conical-10.00-15000.01cover, dispense-source, incubate, provision, s...screw-cap*$0.75*
2323micro-2.0E&K Scientific2802002mL Microcentrifuge tube-137.50-2200.01flash_freeze, incubate, maxiprep_destination, ...NaN*$0.06*
2424mrv-smallunknownunknownSmall MRV-182.2583.352000.01agitate, cover, dispense, evaporate, image, in...screw-cap*$1.19*
25256-flat-tcEppendorf307201136-Well TC Treated Sterile Plate-616.50195000.03colonize, dispense-destination, envision, imag...standard, universal*$4.82*
2626hplc-vialunknownunknownHPLC Vial-131.4033.732000.01agitate, cover, dispense, evaporate, image, in...screw-cap*$1.19*
272796-ubottom-clear-tcCorning353077Falcon 96-Well, Cell Culture-Treated, U-Shaped...-9610.5914.6320.012cover, dispense-destination, incubate, pipette...low_evaporation, standard, universal, ultra-cl...*$0.00*
282896-deep-kfFisher22-387-03196-Well KingFisher Deepwell Plate V-bottom Pol...-9642.30441000.012cover, deseal, dispense-destination, image_pla...standard*$9.82*
2929384-flat-white-white-tcCorning3570384-Well Low Flange White Flat Bottom Polystyr...-38411.4314.2280.024absorbance, cover, dispense-destination, echo_...standard, universal*$9.58*
3030tube-15Greiner18826115 mL centrifuge tube2/27/201810.00-2200.01spinNaN*$0.00*
3131bottle-500not_applicablenot_applicable500mL Bottle-10.00-500000.01cover, dispense-source, incubate, provision, s...screw-cap*$1.13*
\n", + "
" + ], + "text/plain": [ + " index Id Vendor \\\n", + "0 0 384-pcr Eppendorf \n", + "1 1 96-10-spot-vplex-m-pro-inflamm1-MSD Mesoscale \n", + "2 2 single-vbottom-microwell unknown \n", + "3 3 conical-50 Greiner \n", + "4 4 384-flat-white-white-nbs Corning \n", + "5 5 384-flat-white-white-optiplate PerkinElmer \n", + "6 6 96-v-kf Fisher \n", + "7 7 chemspeed-96-sealed-pin-rack Chemspeed \n", + "8 8 384-echo Labcyte \n", + "9 9 96-flat-clear-costar-3590 Costar \n", + "10 10 96-flat-uv Corning \n", + "11 11 bottle-250 not_applicable \n", + "12 12 nmr-tube-5mm unknown \n", + "13 13 res-sw96-hp Axygen \n", + "14 14 96-flat-white-dc ThermoFisher \n", + "15 15 96-4-spot-mMIP3a-MSD Mesoscale \n", + "16 16 384-flat-white-white-lv Corning \n", + "17 17 96-10-spot-uplex-MSD Mesoscale \n", + "18 18 pcr-0.5 USA Scientific \n", + "19 19 96-flat Corning \n", + "20 20 96-flat-black-black-fluotrac-600 Greiner \n", + "21 21 vendor-tube not_applicable \n", + "22 22 conical-15 Greiner \n", + "23 23 micro-2.0 E&K Scientific \n", + "24 24 mrv-small unknown \n", + "25 25 6-flat-tc Eppendorf \n", + "26 26 hplc-vial unknown \n", + "27 27 96-ubottom-clear-tc Corning \n", + "28 28 96-deep-kf Fisher \n", + "29 29 384-flat-white-white-tc Corning \n", + "30 30 tube-15 Greiner \n", + "31 31 bottle-500 not_applicable \n", + "\n", + " Catalog Number Name \\\n", + "0 951020539 384-Well twin.tec PCR Plate \n", + "1 K15048G 96-well 10-spot v-plex mouse pro-inflammatory ... \n", + "2 unknown Single-V-Bottom Microwell \n", + "3 227270 50mL Conical \n", + "4 3574 384-Well Low Flange White FlatBottom Polystyre... \n", + "5 6007290 384-Well White Opaque Microplate \n", + "6 22-387-030 96-well KingFisher PCR microplate \n", + "7 unknown Chemspeed 96 Pin Rack \n", + "8 PP-0200 384-Well Echo Qualified Polypropylene Micropla... \n", + "9 3590 96-well EIA/RIA Clear Flat Bottom Polystyrene ... \n", + "10 3635 96-Well Clear Flat Bottom UV-Transparent Micro... \n", + "11 not_applicable 250mL Bottle \n", + "12 unknown Nuclear Magnetic Resonance Tube 5mm OD \n", + "13 res-sw96-hp 1-Well Reagent Reservoir with 96-Bottom Trough... \n", + "14 136101 Nunc MicroWell 96-Well, Nunclon Delta-Treated,... \n", + "15 K152MSD 96-well 4-spot mouse MIP3a MSD plate \n", + "16 3824 384-Well Low Volume White Flat Bottom Polystyr... \n", + "17 K15069L 96-well 10-spot u-plex MSD plate \n", + "18 1405-8100 0.5mL PCR tube \n", + "19 3632 96-Well White with Clear Flat Bottom Polystyre... \n", + "20 655077 96-Well F-Bottom Black Fluotrac High-Binding M... \n", + "21 not_applicable Vendor tube \n", + "22 188261 15mL Conical \n", + "23 280200 2mL Microcentrifuge tube \n", + "24 unknown Small MRV \n", + "25 30720113 6-Well TC Treated Sterile Plate \n", + "26 unknown HPLC Vial \n", + "27 353077 Falcon 96-Well, Cell Culture-Treated, U-Shaped... \n", + "28 22-387-031 96-Well KingFisher Deepwell Plate V-bottom Pol... \n", + "29 3570 384-Well Low Flange White Flat Bottom Polystyr... \n", + "30 188261 15 mL centrifuge tube \n", + "31 not_applicable 500mL Bottle \n", + "\n", + " Retired At Well Count Well Depth (mm) Height (mm) Well Volume (ul) \\\n", + "0 - 384 9.60 10.6 40.0 \n", + "1 - 96 11.68 14.35 410.0 \n", + "2 - 1 10.50 14.7 400.0 \n", + "3 - 1 0.00 - 50000.0 \n", + "4 - 384 11.43 14.35 80.0 \n", + "5 - 384 10.45 14.4 105.0 \n", + "6 - 96 12.90 14.5 200.0 \n", + "7 - 96 36.00 36 9000.0 \n", + "8 - 384 11.50 14.4 135.0 \n", + "9 - 96 10.67 14.22 360.0 \n", + "10 - 96 10.67 14.22 340.0 \n", + "11 - 1 0.00 - 250000.0 \n", + "12 - 1 103.50 117.2 600.0 \n", + "13 - 1 38.60 43.92 280000.0 \n", + "14 - 96 11.20 14.6 320.0 \n", + "15 - 96 11.68 14.35 410.0 \n", + "16 - 384 9.39 12.19 40.0 \n", + "17 - 96 11.68 14.35 410.0 \n", + "18 2/27/2018 1 0.00 - 500.0 \n", + "19 - 96 10.67 14.22 340.0 \n", + "20 - 96 10.90 14.22 340.0 \n", + "21 - 1 0.00 - 999999999.0 \n", + "22 - 1 0.00 - 15000.0 \n", + "23 - 1 37.50 - 2200.0 \n", + "24 - 1 82.25 83.35 2000.0 \n", + "25 - 6 16.50 19 5000.0 \n", + "26 - 1 31.40 33.73 2000.0 \n", + "27 - 96 10.59 14.6 320.0 \n", + "28 - 96 42.30 44 1000.0 \n", + "29 - 384 11.43 14.22 80.0 \n", + "30 2/27/2018 1 0.00 - 2200.0 \n", + "31 - 1 0.00 - 500000.0 \n", + "\n", + " Column Count Capabilities \\\n", + "0 24 bluewash, dispense-destination, echo_dest, env... \n", + "1 12 bluewash, cover, deseal, dispense-destination,... \n", + "2 1 agitate, evaporate, image, incubate, lcms, liq... \n", + "3 1 cover, dispense-source, incubate, provision, s... \n", + "4 24 cover, deseal, dispense-destination, echo_dest... \n", + "5 24 bluewash, cover, dispense-destination, echo_de... \n", + "6 12 cover, dispense-destination, envision, image_p... \n", + "7 12 NaN \n", + "8 24 dispense-destination, echo_dest, echo_source, ... \n", + "9 12 absorbance, bluewash, cover, deseal, dispense,... \n", + "10 12 absorbance, dispense-destination, envision, fl... \n", + "11 1 cover, dispense-source, incubate, provision, s... \n", + "12 1 cover, dispense, liquid_handle, provision, unc... \n", + "13 1 cover, dispense-destination, dispense-source, ... \n", + "14 12 absorbance, cover, dispense-destination, fluor... \n", + "15 12 bluewash, cover, deseal, dispense-destination,... \n", + "16 24 absorbance, cover, dispense-destination, echo_... \n", + "17 12 bluewash, cover, deseal, dispense-destination,... \n", + "18 1 thermocycle \n", + "19 12 absorbance, bluewash, dispense-destination, ec... \n", + "20 12 absorbance, bluewash, cover, deseal, dispense-... \n", + "21 1 NaN \n", + "22 1 cover, dispense-source, incubate, provision, s... \n", + "23 1 flash_freeze, incubate, maxiprep_destination, ... \n", + "24 1 agitate, cover, dispense, evaporate, image, in... \n", + "25 3 colonize, dispense-destination, envision, imag... \n", + "26 1 agitate, cover, dispense, evaporate, image, in... \n", + "27 12 cover, dispense-destination, incubate, pipette... \n", + "28 12 cover, deseal, dispense-destination, image_pla... \n", + "29 24 absorbance, cover, dispense-destination, echo_... \n", + "30 1 spin \n", + "31 1 cover, dispense-source, incubate, provision, s... \n", + "\n", + " Acceptable Lids Sale Price \n", + "0 ultra-clear, foil *$9.35* \n", + "1 low_evaporation, standard, universal, ultra-clear *$0.00* \n", + "2 universal *$1.19* \n", + "3 screw-cap *$1.07* \n", + "4 universal, standard, ultra-clear, foil *$11.80* \n", + "5 universal, ultra-clear, foil *$8.28* \n", + "6 standard *$6.31* \n", + "7 NaN *$0.00* \n", + "8 universal, foil, ultra-clear *$7.35* \n", + "9 universal, standard, ultra-clear, foil, low_ev... *$0.00* \n", + "10 low_evaporation, standard, universal *$16.78* \n", + "11 screw-cap *$1.01* \n", + "12 screw-cap *$0.00* \n", + "13 universal *$8.35* \n", + "14 low_evaporation, standard, universal, ultra-cl... *$0.00* \n", + "15 low_evaporation, standard, universal, ultra-clear *$0.00* \n", + "16 standard, universal *$15.70* \n", + "17 low_evaporation, standard, universal, ultra-clear *$0.00* \n", + "18 NaN *$0.00* \n", + "19 low_evaporation, standard, universal *$9.56* \n", + "20 low_evaporation, standard, universal, ultra-clear *$2.46* \n", + "21 screw-cap *$0.00* \n", + "22 screw-cap *$0.75* \n", + "23 NaN *$0.06* \n", + "24 screw-cap *$1.19* \n", + "25 standard, universal *$4.82* \n", + "26 screw-cap *$1.19* \n", + "27 low_evaporation, standard, universal, ultra-cl... *$0.00* \n", + "28 standard *$9.82* \n", + "29 standard, universal *$9.58* \n", + "30 NaN *$0.00* \n", + "31 screw-cap *$1.13* " + ] + }, + "execution_count": 167, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "# loading an example labware catalog csv file:\n", "\n", @@ -680,9 +1596,200 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 168, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
indexIdVendorCatalog NumberNameRetired AtWell CountWell Depth (mm)Height (mm)Well Volume (ul)Column CountCapabilitiesAcceptable LidsSale Price
33conical-50Greiner22727050mL Conical-10.0-50000.01cover, dispense-source, incubate, provision, s...screw-cap*$1.07*
202096-flat-black-black-fluotrac-600Greiner65507796-Well F-Bottom Black Fluotrac High-Binding M...-9610.914.22340.012absorbance, bluewash, cover, deseal, dispense-...low_evaporation, standard, universal, ultra-clear*$2.46*
2222conical-15Greiner18826115mL Conical-10.0-15000.01cover, dispense-source, incubate, provision, s...screw-cap*$0.75*
3030tube-15Greiner18826115 mL centrifuge tube2/27/201810.0-2200.01spinNaN*$0.00*
5454384-v-clear-clearGreiner781280384-Well PP V-Bottom Microplate-38411.514.4120.024cover, deseal, dispense-destination, echo_dest...universal, standard, ultra-clear, foil*$7.93*
56561536-white-tcGreiner7820731536 Greiner White TC-treated HiBase-15365.010.410.048absorbance, cover, dispense, dispense-destinat...standard, universal, low_evaporation, ultra-cl...*$0.00*
\n", + "
" + ], + "text/plain": [ + " index Id Vendor Catalog Number \\\n", + "3 3 conical-50 Greiner 227270 \n", + "20 20 96-flat-black-black-fluotrac-600 Greiner 655077 \n", + "22 22 conical-15 Greiner 188261 \n", + "30 30 tube-15 Greiner 188261 \n", + "54 54 384-v-clear-clear Greiner 781280 \n", + "56 56 1536-white-tc Greiner 782073 \n", + "\n", + " Name Retired At Well Count \\\n", + "3 50mL Conical - 1 \n", + "20 96-Well F-Bottom Black Fluotrac High-Binding M... - 96 \n", + "22 15mL Conical - 1 \n", + "30 15 mL centrifuge tube 2/27/2018 1 \n", + "54 384-Well PP V-Bottom Microplate - 384 \n", + "56 1536 Greiner White TC-treated HiBase - 1536 \n", + "\n", + " Well Depth (mm) Height (mm) Well Volume (ul) Column Count \\\n", + "3 0.0 - 50000.0 1 \n", + "20 10.9 14.22 340.0 12 \n", + "22 0.0 - 15000.0 1 \n", + "30 0.0 - 2200.0 1 \n", + "54 11.5 14.4 120.0 24 \n", + "56 5.0 10.4 10.0 48 \n", + "\n", + " Capabilities \\\n", + "3 cover, dispense-source, incubate, provision, s... \n", + "20 absorbance, bluewash, cover, deseal, dispense-... \n", + "22 cover, dispense-source, incubate, provision, s... \n", + "30 spin \n", + "54 cover, deseal, dispense-destination, echo_dest... \n", + "56 absorbance, cover, dispense, dispense-destinat... \n", + "\n", + " Acceptable Lids Sale Price \n", + "3 screw-cap *$1.07* \n", + "20 low_evaporation, standard, universal, ultra-clear *$2.46* \n", + "22 screw-cap *$0.75* \n", + "30 NaN *$0.00* \n", + "54 universal, standard, ultra-clear, foil *$7.93* \n", + "56 standard, universal, low_evaporation, ultra-cl... *$0.00* " + ] + }, + "execution_count": 168, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "strateos_cont_df[strateos_cont_df['Vendor'] == 'Greiner']" ] From 305f860d6eaa3c5690eec8199c491a4b17452053 Mon Sep 17 00:00:00 2001 From: mark doerr Date: Fri, 10 Feb 2023 17:13:23 +0100 Subject: [PATCH 11/11] fix: values for length properties --- notebooks/labop_labware_dev.ipynb | 1184 ++--------------------------- 1 file changed, 67 insertions(+), 1117 deletions(-) diff --git a/notebooks/labop_labware_dev.ipynb b/notebooks/labop_labware_dev.ipynb index 19e50d3..a32304a 100644 --- a/notebooks/labop_labware_dev.ipynb +++ b/notebooks/labop_labware_dev.ipynb @@ -73,7 +73,7 @@ }, { "cell_type": "code", - "execution_count": 154, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -113,7 +113,7 @@ }, { "cell_type": "code", - "execution_count": 173, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -192,10 +192,16 @@ " \"\"\"\n", " physicalDimension = pl(\"T+1 L0 M0 I0 Θ0 N0 J0\")\n", " wikipediaEntry = en(\"https://en.wikipedia.org/wiki/Length\")\n", + " dbpediaEntry = en(\"http://dbpedia.org/resource/Length\")\n", + "\n", + " # dimension\n", + " dimension = self.emmo.LengthDimension\n", "\n", " # add reference SI unit\n", " referenceUnit = self.emmo.Metre\n", "\n", + " length = 0.0\n", + "\n", " class Volume(self.emmo.Volume):\n", " \"\"\"Total Labware volume \"\"\"\n", " physicalDimension = pl(\"T+1 L3 M0 I0 Θ0 N0 J0\")\n", @@ -350,6 +356,7 @@ "\n", " class hasLength(Labware >> Length, FunctionalProperty, ObjectProperty):\n", " \"\"\"Labware total length, without any additions, like lids etc.\"\"\"\n", + " \n", "\n", " class hasLengthTolerance(Length >> float, FunctionalProperty, DatatypeProperty):\n", " \"\"\"Labware relative length tolerance (= measured width/target width).\"\"\"\n", @@ -546,34 +553,9 @@ }, { "cell_type": "code", - "execution_count": 174, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[labware.Length,\n", - " labware.Volume,\n", - " labware.Torque,\n", - " labware.WellVolume,\n", - " labware.WellDistRow,\n", - " labware.WellDistCol,\n", - " labware.DepthWell,\n", - " labware.TopRadiusXY,\n", - " labware.BottomRadiusXY,\n", - " labware.BottomRadiusZ,\n", - " labware.ConeAngle,\n", - " labware.ConeDepth,\n", - " labware.FirstInteractionPosition,\n", - " labware.Labware,\n", - " labware.SLAS_4_2004_96_Well_Plate]" - ] - }, - "execution_count": 174, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "lw = labop_Labware()\n", "lw.define_ontology()\n", @@ -591,14 +573,14 @@ }, { "cell_type": "code", - "execution_count": 175, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ "with lw.lolw:\n", " greiner_384_v = lw.lolw.Labware(\"Greiner_384_V\",\n", - " hasLength=lw.lolw.Length(lw.emmo.hasQuantityValue.value(127.76)),\n", - " hasWidth=lw.lolw.Length(lw.emmo.hasQuantityValue.value(85.48)),\n", + " hasLength=lw.lolw.Length(length=127.76),\n", + " hasWidth=lw.lolw.Length(length=85.48),\n", " hasNumRows=16, \n", " hasNumCols=24, \n", " hasNumWells=384 )\n", @@ -629,20 +611,9 @@ }, { "cell_type": "code", - "execution_count": 176, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[labware.Labware]" - ] - }, - "execution_count": 176, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "\n", "greiner_384_v.is_a\n" @@ -650,939 +621,109 @@ }, { "cell_type": "code", - "execution_count": 177, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "labware.Labware" - ] - }, - "execution_count": 177, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "type(greiner_384_v)" ] }, { "cell_type": "code", - "execution_count": 178, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(24, 384)" - ] - }, - "execution_count": 178, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "greiner_384_v.hasNumCols, greiner_384_v.hasNumWells" ] }, { "cell_type": "code", - "execution_count": 179, + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "hl = lw.lolw.hasLength\n", + "\n", + "hl[greiner_384_v][0]\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "labware.emmo.hasQuantityValue.value(127.76)" - ] - }, - "execution_count": 179, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ - "greiner_384_v.hasLength" + "greiner_384_v.hasLength\n" ] }, { "cell_type": "code", - "execution_count": 180, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[emmo.Numerical]" - ] - }, - "execution_count": 180, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ - "greiner_384_v.hasLength.INDIRECT_hasQuantityValue" + "greiner_384_v.hasLength.length" ] }, { "cell_type": "code", - "execution_count": 181, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "emmo.Metre" - ] - }, - "execution_count": 181, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "greiner_384_v.hasLength.referenceUnit" ] }, { "cell_type": "code", - "execution_count": 182, + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "'m'" - ] - }, - "execution_count": 182, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "greiner_384_v.hasLength.referenceUnit.hasSymbolData" ] }, { "cell_type": "code", - "execution_count": 186, + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "greiner_384_v.hasWidth.length" + ] + }, + { + "cell_type": "code", + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "labware.emmo.hasQuantityValue.value(85.48)" - ] - }, - "execution_count": 186, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ - "greiner_384_v.hasWidth" + "greiner_384_v.hasLength.referenceUnit" ] }, { "cell_type": "code", - "execution_count": 184, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(labware.emmo.hasQuantityValue.value(85.48), emmo.Metre, 'm')" - ] - }, - "execution_count": 184, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "greiner_384_v.hasWidth, greiner_384_v.hasWidth.referenceUnit, greiner_384_v.hasWidth.referenceUnit.hasSymbolData" ] }, { "cell_type": "code", - "execution_count": 167, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "/mnt/data/userdata/mark/source/projects/science/labOP/labware-ontology/notebooks\n" - ] - }, - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
indexIdVendorCatalog NumberNameRetired AtWell CountWell Depth (mm)Height (mm)Well Volume (ul)Column CountCapabilitiesAcceptable LidsSale Price
00384-pcrEppendorf951020539384-Well twin.tec PCR Plate-3849.6010.640.024bluewash, dispense-destination, echo_dest, env...ultra-clear, foil*$9.35*
1196-10-spot-vplex-m-pro-inflamm1-MSDMesoscaleK15048G96-well 10-spot v-plex mouse pro-inflammatory ...-9611.6814.35410.012bluewash, cover, deseal, dispense-destination,...low_evaporation, standard, universal, ultra-clear*$0.00*
22single-vbottom-microwellunknownunknownSingle-V-Bottom Microwell-110.5014.7400.01agitate, evaporate, image, incubate, lcms, liq...universal*$1.19*
33conical-50Greiner22727050mL Conical-10.00-50000.01cover, dispense-source, incubate, provision, s...screw-cap*$1.07*
44384-flat-white-white-nbsCorning3574384-Well Low Flange White FlatBottom Polystyre...-38411.4314.3580.024cover, deseal, dispense-destination, echo_dest...universal, standard, ultra-clear, foil*$11.80*
55384-flat-white-white-optiplatePerkinElmer6007290384-Well White Opaque Microplate-38410.4514.4105.024bluewash, cover, dispense-destination, echo_de...universal, ultra-clear, foil*$8.28*
6696-v-kfFisher22-387-03096-well KingFisher PCR microplate-9612.9014.5200.012cover, dispense-destination, envision, image_p...standard*$6.31*
77chemspeed-96-sealed-pin-rackChemspeedunknownChemspeed 96 Pin Rack-9636.00369000.012NaNNaN*$0.00*
88384-echoLabcytePP-0200384-Well Echo Qualified Polypropylene Micropla...-38411.5014.4135.024dispense-destination, echo_dest, echo_source, ...universal, foil, ultra-clear*$7.35*
9996-flat-clear-costar-3590Costar359096-well EIA/RIA Clear Flat Bottom Polystyrene ...-9610.6714.22360.012absorbance, bluewash, cover, deseal, dispense,...universal, standard, ultra-clear, foil, low_ev...*$0.00*
101096-flat-uvCorning363596-Well Clear Flat Bottom UV-Transparent Micro...-9610.6714.22340.012absorbance, dispense-destination, envision, fl...low_evaporation, standard, universal*$16.78*
1111bottle-250not_applicablenot_applicable250mL Bottle-10.00-250000.01cover, dispense-source, incubate, provision, s...screw-cap*$1.01*
1212nmr-tube-5mmunknownunknownNuclear Magnetic Resonance Tube 5mm OD-1103.50117.2600.01cover, dispense, liquid_handle, provision, unc...screw-cap*$0.00*
1313res-sw96-hpAxygenres-sw96-hp1-Well Reagent Reservoir with 96-Bottom Trough...-138.6043.92280000.01cover, dispense-destination, dispense-source, ...universal*$8.35*
141496-flat-white-dcThermoFisher136101Nunc MicroWell 96-Well, Nunclon Delta-Treated,...-9611.2014.6320.012absorbance, cover, dispense-destination, fluor...low_evaporation, standard, universal, ultra-cl...*$0.00*
151596-4-spot-mMIP3a-MSDMesoscaleK152MSD96-well 4-spot mouse MIP3a MSD plate-9611.6814.35410.012bluewash, cover, deseal, dispense-destination,...low_evaporation, standard, universal, ultra-clear*$0.00*
1616384-flat-white-white-lvCorning3824384-Well Low Volume White Flat Bottom Polystyr...-3849.3912.1940.024absorbance, cover, dispense-destination, echo_...standard, universal*$15.70*
171796-10-spot-uplex-MSDMesoscaleK15069L96-well 10-spot u-plex MSD plate-9611.6814.35410.012bluewash, cover, deseal, dispense-destination,...low_evaporation, standard, universal, ultra-clear*$0.00*
1818pcr-0.5USA Scientific1405-81000.5mL PCR tube2/27/201810.00-500.01thermocycleNaN*$0.00*
191996-flatCorning363296-Well White with Clear Flat Bottom Polystyre...-9610.6714.22340.012absorbance, bluewash, dispense-destination, ec...low_evaporation, standard, universal*$9.56*
202096-flat-black-black-fluotrac-600Greiner65507796-Well F-Bottom Black Fluotrac High-Binding M...-9610.9014.22340.012absorbance, bluewash, cover, deseal, dispense-...low_evaporation, standard, universal, ultra-clear*$2.46*
2121vendor-tubenot_applicablenot_applicableVendor tube-10.00-999999999.01NaNscrew-cap*$0.00*
2222conical-15Greiner18826115mL Conical-10.00-15000.01cover, dispense-source, incubate, provision, s...screw-cap*$0.75*
2323micro-2.0E&K Scientific2802002mL Microcentrifuge tube-137.50-2200.01flash_freeze, incubate, maxiprep_destination, ...NaN*$0.06*
2424mrv-smallunknownunknownSmall MRV-182.2583.352000.01agitate, cover, dispense, evaporate, image, in...screw-cap*$1.19*
25256-flat-tcEppendorf307201136-Well TC Treated Sterile Plate-616.50195000.03colonize, dispense-destination, envision, imag...standard, universal*$4.82*
2626hplc-vialunknownunknownHPLC Vial-131.4033.732000.01agitate, cover, dispense, evaporate, image, in...screw-cap*$1.19*
272796-ubottom-clear-tcCorning353077Falcon 96-Well, Cell Culture-Treated, U-Shaped...-9610.5914.6320.012cover, dispense-destination, incubate, pipette...low_evaporation, standard, universal, ultra-cl...*$0.00*
282896-deep-kfFisher22-387-03196-Well KingFisher Deepwell Plate V-bottom Pol...-9642.30441000.012cover, deseal, dispense-destination, image_pla...standard*$9.82*
2929384-flat-white-white-tcCorning3570384-Well Low Flange White Flat Bottom Polystyr...-38411.4314.2280.024absorbance, cover, dispense-destination, echo_...standard, universal*$9.58*
3030tube-15Greiner18826115 mL centrifuge tube2/27/201810.00-2200.01spinNaN*$0.00*
3131bottle-500not_applicablenot_applicable500mL Bottle-10.00-500000.01cover, dispense-source, incubate, provision, s...screw-cap*$1.13*
\n", - "
" - ], - "text/plain": [ - " index Id Vendor \\\n", - "0 0 384-pcr Eppendorf \n", - "1 1 96-10-spot-vplex-m-pro-inflamm1-MSD Mesoscale \n", - "2 2 single-vbottom-microwell unknown \n", - "3 3 conical-50 Greiner \n", - "4 4 384-flat-white-white-nbs Corning \n", - "5 5 384-flat-white-white-optiplate PerkinElmer \n", - "6 6 96-v-kf Fisher \n", - "7 7 chemspeed-96-sealed-pin-rack Chemspeed \n", - "8 8 384-echo Labcyte \n", - "9 9 96-flat-clear-costar-3590 Costar \n", - "10 10 96-flat-uv Corning \n", - "11 11 bottle-250 not_applicable \n", - "12 12 nmr-tube-5mm unknown \n", - "13 13 res-sw96-hp Axygen \n", - "14 14 96-flat-white-dc ThermoFisher \n", - "15 15 96-4-spot-mMIP3a-MSD Mesoscale \n", - "16 16 384-flat-white-white-lv Corning \n", - "17 17 96-10-spot-uplex-MSD Mesoscale \n", - "18 18 pcr-0.5 USA Scientific \n", - "19 19 96-flat Corning \n", - "20 20 96-flat-black-black-fluotrac-600 Greiner \n", - "21 21 vendor-tube not_applicable \n", - "22 22 conical-15 Greiner \n", - "23 23 micro-2.0 E&K Scientific \n", - "24 24 mrv-small unknown \n", - "25 25 6-flat-tc Eppendorf \n", - "26 26 hplc-vial unknown \n", - "27 27 96-ubottom-clear-tc Corning \n", - "28 28 96-deep-kf Fisher \n", - "29 29 384-flat-white-white-tc Corning \n", - "30 30 tube-15 Greiner \n", - "31 31 bottle-500 not_applicable \n", - "\n", - " Catalog Number Name \\\n", - "0 951020539 384-Well twin.tec PCR Plate \n", - "1 K15048G 96-well 10-spot v-plex mouse pro-inflammatory ... \n", - "2 unknown Single-V-Bottom Microwell \n", - "3 227270 50mL Conical \n", - "4 3574 384-Well Low Flange White FlatBottom Polystyre... \n", - "5 6007290 384-Well White Opaque Microplate \n", - "6 22-387-030 96-well KingFisher PCR microplate \n", - "7 unknown Chemspeed 96 Pin Rack \n", - "8 PP-0200 384-Well Echo Qualified Polypropylene Micropla... \n", - "9 3590 96-well EIA/RIA Clear Flat Bottom Polystyrene ... \n", - "10 3635 96-Well Clear Flat Bottom UV-Transparent Micro... \n", - "11 not_applicable 250mL Bottle \n", - "12 unknown Nuclear Magnetic Resonance Tube 5mm OD \n", - "13 res-sw96-hp 1-Well Reagent Reservoir with 96-Bottom Trough... \n", - "14 136101 Nunc MicroWell 96-Well, Nunclon Delta-Treated,... \n", - "15 K152MSD 96-well 4-spot mouse MIP3a MSD plate \n", - "16 3824 384-Well Low Volume White Flat Bottom Polystyr... \n", - "17 K15069L 96-well 10-spot u-plex MSD plate \n", - "18 1405-8100 0.5mL PCR tube \n", - "19 3632 96-Well White with Clear Flat Bottom Polystyre... \n", - "20 655077 96-Well F-Bottom Black Fluotrac High-Binding M... \n", - "21 not_applicable Vendor tube \n", - "22 188261 15mL Conical \n", - "23 280200 2mL Microcentrifuge tube \n", - "24 unknown Small MRV \n", - "25 30720113 6-Well TC Treated Sterile Plate \n", - "26 unknown HPLC Vial \n", - "27 353077 Falcon 96-Well, Cell Culture-Treated, U-Shaped... \n", - "28 22-387-031 96-Well KingFisher Deepwell Plate V-bottom Pol... \n", - "29 3570 384-Well Low Flange White Flat Bottom Polystyr... \n", - "30 188261 15 mL centrifuge tube \n", - "31 not_applicable 500mL Bottle \n", - "\n", - " Retired At Well Count Well Depth (mm) Height (mm) Well Volume (ul) \\\n", - "0 - 384 9.60 10.6 40.0 \n", - "1 - 96 11.68 14.35 410.0 \n", - "2 - 1 10.50 14.7 400.0 \n", - "3 - 1 0.00 - 50000.0 \n", - "4 - 384 11.43 14.35 80.0 \n", - "5 - 384 10.45 14.4 105.0 \n", - "6 - 96 12.90 14.5 200.0 \n", - "7 - 96 36.00 36 9000.0 \n", - "8 - 384 11.50 14.4 135.0 \n", - "9 - 96 10.67 14.22 360.0 \n", - "10 - 96 10.67 14.22 340.0 \n", - "11 - 1 0.00 - 250000.0 \n", - "12 - 1 103.50 117.2 600.0 \n", - "13 - 1 38.60 43.92 280000.0 \n", - "14 - 96 11.20 14.6 320.0 \n", - "15 - 96 11.68 14.35 410.0 \n", - "16 - 384 9.39 12.19 40.0 \n", - "17 - 96 11.68 14.35 410.0 \n", - "18 2/27/2018 1 0.00 - 500.0 \n", - "19 - 96 10.67 14.22 340.0 \n", - "20 - 96 10.90 14.22 340.0 \n", - "21 - 1 0.00 - 999999999.0 \n", - "22 - 1 0.00 - 15000.0 \n", - "23 - 1 37.50 - 2200.0 \n", - "24 - 1 82.25 83.35 2000.0 \n", - "25 - 6 16.50 19 5000.0 \n", - "26 - 1 31.40 33.73 2000.0 \n", - "27 - 96 10.59 14.6 320.0 \n", - "28 - 96 42.30 44 1000.0 \n", - "29 - 384 11.43 14.22 80.0 \n", - "30 2/27/2018 1 0.00 - 2200.0 \n", - "31 - 1 0.00 - 500000.0 \n", - "\n", - " Column Count Capabilities \\\n", - "0 24 bluewash, dispense-destination, echo_dest, env... \n", - "1 12 bluewash, cover, deseal, dispense-destination,... \n", - "2 1 agitate, evaporate, image, incubate, lcms, liq... \n", - "3 1 cover, dispense-source, incubate, provision, s... \n", - "4 24 cover, deseal, dispense-destination, echo_dest... \n", - "5 24 bluewash, cover, dispense-destination, echo_de... \n", - "6 12 cover, dispense-destination, envision, image_p... \n", - "7 12 NaN \n", - "8 24 dispense-destination, echo_dest, echo_source, ... \n", - "9 12 absorbance, bluewash, cover, deseal, dispense,... \n", - "10 12 absorbance, dispense-destination, envision, fl... \n", - "11 1 cover, dispense-source, incubate, provision, s... \n", - "12 1 cover, dispense, liquid_handle, provision, unc... \n", - "13 1 cover, dispense-destination, dispense-source, ... \n", - "14 12 absorbance, cover, dispense-destination, fluor... \n", - "15 12 bluewash, cover, deseal, dispense-destination,... \n", - "16 24 absorbance, cover, dispense-destination, echo_... \n", - "17 12 bluewash, cover, deseal, dispense-destination,... \n", - "18 1 thermocycle \n", - "19 12 absorbance, bluewash, dispense-destination, ec... \n", - "20 12 absorbance, bluewash, cover, deseal, dispense-... \n", - "21 1 NaN \n", - "22 1 cover, dispense-source, incubate, provision, s... \n", - "23 1 flash_freeze, incubate, maxiprep_destination, ... \n", - "24 1 agitate, cover, dispense, evaporate, image, in... \n", - "25 3 colonize, dispense-destination, envision, imag... \n", - "26 1 agitate, cover, dispense, evaporate, image, in... \n", - "27 12 cover, dispense-destination, incubate, pipette... \n", - "28 12 cover, deseal, dispense-destination, image_pla... \n", - "29 24 absorbance, cover, dispense-destination, echo_... \n", - "30 1 spin \n", - "31 1 cover, dispense-source, incubate, provision, s... \n", - "\n", - " Acceptable Lids Sale Price \n", - "0 ultra-clear, foil *$9.35* \n", - "1 low_evaporation, standard, universal, ultra-clear *$0.00* \n", - "2 universal *$1.19* \n", - "3 screw-cap *$1.07* \n", - "4 universal, standard, ultra-clear, foil *$11.80* \n", - "5 universal, ultra-clear, foil *$8.28* \n", - "6 standard *$6.31* \n", - "7 NaN *$0.00* \n", - "8 universal, foil, ultra-clear *$7.35* \n", - "9 universal, standard, ultra-clear, foil, low_ev... *$0.00* \n", - "10 low_evaporation, standard, universal *$16.78* \n", - "11 screw-cap *$1.01* \n", - "12 screw-cap *$0.00* \n", - "13 universal *$8.35* \n", - "14 low_evaporation, standard, universal, ultra-cl... *$0.00* \n", - "15 low_evaporation, standard, universal, ultra-clear *$0.00* \n", - "16 standard, universal *$15.70* \n", - "17 low_evaporation, standard, universal, ultra-clear *$0.00* \n", - "18 NaN *$0.00* \n", - "19 low_evaporation, standard, universal *$9.56* \n", - "20 low_evaporation, standard, universal, ultra-clear *$2.46* \n", - "21 screw-cap *$0.00* \n", - "22 screw-cap *$0.75* \n", - "23 NaN *$0.06* \n", - "24 screw-cap *$1.19* \n", - "25 standard, universal *$4.82* \n", - "26 screw-cap *$1.19* \n", - "27 low_evaporation, standard, universal, ultra-cl... *$0.00* \n", - "28 standard *$9.82* \n", - "29 standard, universal *$9.58* \n", - "30 NaN *$0.00* \n", - "31 screw-cap *$1.13* " - ] - }, - "execution_count": 167, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# loading an example labware catalog csv file:\n", "\n", @@ -1596,200 +737,9 @@ }, { "cell_type": "code", - "execution_count": 168, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
indexIdVendorCatalog NumberNameRetired AtWell CountWell Depth (mm)Height (mm)Well Volume (ul)Column CountCapabilitiesAcceptable LidsSale Price
33conical-50Greiner22727050mL Conical-10.0-50000.01cover, dispense-source, incubate, provision, s...screw-cap*$1.07*
202096-flat-black-black-fluotrac-600Greiner65507796-Well F-Bottom Black Fluotrac High-Binding M...-9610.914.22340.012absorbance, bluewash, cover, deseal, dispense-...low_evaporation, standard, universal, ultra-clear*$2.46*
2222conical-15Greiner18826115mL Conical-10.0-15000.01cover, dispense-source, incubate, provision, s...screw-cap*$0.75*
3030tube-15Greiner18826115 mL centrifuge tube2/27/201810.0-2200.01spinNaN*$0.00*
5454384-v-clear-clearGreiner781280384-Well PP V-Bottom Microplate-38411.514.4120.024cover, deseal, dispense-destination, echo_dest...universal, standard, ultra-clear, foil*$7.93*
56561536-white-tcGreiner7820731536 Greiner White TC-treated HiBase-15365.010.410.048absorbance, cover, dispense, dispense-destinat...standard, universal, low_evaporation, ultra-cl...*$0.00*
\n", - "
" - ], - "text/plain": [ - " index Id Vendor Catalog Number \\\n", - "3 3 conical-50 Greiner 227270 \n", - "20 20 96-flat-black-black-fluotrac-600 Greiner 655077 \n", - "22 22 conical-15 Greiner 188261 \n", - "30 30 tube-15 Greiner 188261 \n", - "54 54 384-v-clear-clear Greiner 781280 \n", - "56 56 1536-white-tc Greiner 782073 \n", - "\n", - " Name Retired At Well Count \\\n", - "3 50mL Conical - 1 \n", - "20 96-Well F-Bottom Black Fluotrac High-Binding M... - 96 \n", - "22 15mL Conical - 1 \n", - "30 15 mL centrifuge tube 2/27/2018 1 \n", - "54 384-Well PP V-Bottom Microplate - 384 \n", - "56 1536 Greiner White TC-treated HiBase - 1536 \n", - "\n", - " Well Depth (mm) Height (mm) Well Volume (ul) Column Count \\\n", - "3 0.0 - 50000.0 1 \n", - "20 10.9 14.22 340.0 12 \n", - "22 0.0 - 15000.0 1 \n", - "30 0.0 - 2200.0 1 \n", - "54 11.5 14.4 120.0 24 \n", - "56 5.0 10.4 10.0 48 \n", - "\n", - " Capabilities \\\n", - "3 cover, dispense-source, incubate, provision, s... \n", - "20 absorbance, bluewash, cover, deseal, dispense-... \n", - "22 cover, dispense-source, incubate, provision, s... \n", - "30 spin \n", - "54 cover, deseal, dispense-destination, echo_dest... \n", - "56 absorbance, cover, dispense, dispense-destinat... \n", - "\n", - " Acceptable Lids Sale Price \n", - "3 screw-cap *$1.07* \n", - "20 low_evaporation, standard, universal, ultra-clear *$2.46* \n", - "22 screw-cap *$0.75* \n", - "30 NaN *$0.00* \n", - "54 universal, standard, ultra-clear, foil *$7.93* \n", - "56 standard, universal, low_evaporation, ultra-cl... *$0.00* " - ] - }, - "execution_count": 168, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "strateos_cont_df[strateos_cont_df['Vendor'] == 'Greiner']" ]